◆記事概要
プライベートサブネットのEC2インスタンス(Linux)からS3バケットをゲートウェイエンドポイントで接続してみました。
◆筆者情報・取得資格
AWSは実務未経験、オンプレミスのインフラ経験が2年あります。
AWSの資格はAWS SAA→AWS SAP→AWS DVAの順に取得しました。
◆本文
★S3バケットの作成
AWSコンソールからS3を検索し、バケットを作成します。特に変更する箇所はなく、デフォルト設定のまま作成します。
★S3バケットにファイルを保存
サンプルのtxtファイルを作って試しにS3バケットに保存してみます。ドラックアンドドロップでアップロード出来ました。
★IAMロールの作成
続いてIAMロールを作成します。コンソールからIAMサービスに移動し、ロールの作成を選択します。
信頼されたエンティティタイプは「AWSのサービス」、ユースケースは「EC2」を選びます。
ポリシーは「AmazonS3FullAccess」を選択します。
名前を決めて作成します。
★EC2インスタンス作成
コンソールからEC2サービスに移動し、「インスタンスを起動」で新しいEC2インスタンスを作成します。AMIはAmazon Linux 2を選択しました。
ネットワーク設定です。プライベートサブネットを選びましょう。
高度な詳細を展開し、IAMインスタンスプロフィールに作成したIAMロールを選びます。
同じようにパブリックサブネットにもEC2インスタンスを作成します。踏み台接続に使用します。
★ゲートウェイエンドポイントの作成
エンドポイントを作成します。名前を入力し、「AWSのサービス」、「インスタンスのVPCのリージョン.s3(Gatewayタイプ)」を選択します。
続いて自分のVPCを選択、紐づけるルートテーブルを選択します。このルートテーブルは作成したプライベートEC2インスタンスのルートテーブルです。
★バケットポリシーの作成
S3バケットをコンソールで選択し、「アクセス許可」タブからバケットポリシーを編集します。
ネットの記事を参考に、このように作ってみました。
このポリシーでは、作成したゲートウェイ以外からの接続をすべて拒否します。コンソールでのバケット操作も出来なくなります。
★EC2インスタンスに接続
パブリックインスタンスにSSH接続します。
パブリックインスタンスからプライベートインスタンスにSSH接続します。
ssh -i [キーのフルパス] ec2-user@[プライベートIP]
★EC2インスタンスにS3バケットのファイルを取得する
S3バケットのファイルを一覧表示してみます。問題なく表示できました。
aws s3 ls --region ap-northeast-1 --recursive s3://[S3バケット名]
S3バケットからサンプルファイルを取得してみます。問題なく取得できました。
aws s3 cp s3://[S3バケット名]/[ファイル名] [取得先ディレクトリパス]
◆まとめ・最後に
プライベートEC2インスタンスの踏み台接続は初めてだったので、今回経験出来て良かったです。
バケットポリシーでは、ゲートウェイ以外の接続をすべて拒否しているので、AWSコンソールでの操作が何もできなくなってしまいました。危うくゾンビバケットになってしまうところでした。今回の検証で苦戦したバケットポリシーについての記事も書いてみたいと思います。