APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

EC2とS3をゲートウェイエンドポイントで接続してみた。

◆記事概要

プライベートサブネットの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コンソールでの操作が何もできなくなってしまいました。危うくゾンビバケットになってしまうところでした。今回の検証で苦戦したバケットポリシーについての記事も書いてみたいと思います。