【AWS_36】プライベートサブネットのEC2インスタンス(Linux)からVPCエンドポイントを介してS3へ接続する

プライベートサブネットのEC2インスタンス(Linux)からAWS CLIを利用して、VPCエンドポイントを介し、S3へ接続してみます。
今回は、VPCエンドポイントのゲートウェイエンドポイントを利用してS3へ接続します。ゲートウェイエンドポイントの対象サービスは S3 と DynamoDB となります。
資格の勉強をしている際、VPCエンドポイントが出てきて、どのように利用すればよいか検証してみたいと思ったことがきっかけとなります。
検証を通じて、プライベートサブネットのEC2インスタンスへの接続方法やIAMロールの作成、割り当てなども合わせて検証することができたので結果、いろいろ勉強になりました。
別サイトへの参照が多く、まとまってない記事になりますがご了承ください。
目次
前提
今回、パブリックサブネットのEC2インスタンス(Linux)からAWS CLIを利用してS3へ接続できたマシンをAMIへ変換し、AMIからプライベートサブネットへデプロイしたEC2インスタンス(Linux)を利用しています。
そのため、AWS CLIはインストール済みとなります。デフォルトではプライベートサブネットからインターネット接続できないのでAWS CLIのインストールを端折るためにAMIからデプロイしました。
【構成図】

EC2 Instance ConnectでプライベートサブネットのEC2インスタンスへ接続する
以下の記事を参照してください。
S3バケットの作成
以下の記事を参照してください。
AWS CLI のインストール
今回、パブリックサブネットのEC2インスタンス(Linux)からAWS CLIを利用してS3へ接続できたマシンをAMIへ変換し、AMIからプライベートサブネットへデプロイしたEC2インスタンス(Linux)を利用しています。
IAMロールを作成してEC2インスタンスへ割り当てる(S3への接続)
S3接続用のVPCエンドポイントを作成する
AWSマネジメントコンソールで「vpc」を検索します。
左ペインのエンドポイントをクリックし、画面右上の「エンドポイントを作成」をクリックします。
エンドポイントを作成画面で以下を選択、入力します。
名前タグ:任意の名前を入力
タイプ:AWSのサービスを選択

サービス:サービス名 = com.amazonaws.ap-northeast-1.s3
※ap-northeast-1は、選択しているリージョンによって変わる可能性があります

VPC:EC2インスタンスが属するVPC
ルートテーブル:EC2インスタンスが属するプライベートサブネットのルートテーブル

ポリシー、タグはデフォルトのままで「エンドポイントを作成」をクリックします。

作成後、ステータスが「使用可能」になることを確認しておきます。

AWS CLI コマンドを実行してS3を操作する
準備ができたのでAWS CLIコマンドでS3を操作してみます。
一応、EC2インスタンスがインターネット接続できないことを確認しておきます。
このブログが公開されているサーバからインターネット公開されているサーバに対してcurlコマンドを実行し、インターネット接続できないことを確認します。
「tkjzblog.com」は、当Wordpressサーバとなります。

それでは、VPCエンドポイント経由でS3 のバケット名の確認とファイルのアップロード、削除を検証してみます。
バケットの一覧を表示する
バケットの一覧を表示するコマンドを実行するとバケット名が表示されました。
aws s3 ls

ローカルのファイルをバケットへアップロードする
/root/20250717-03.txt ファイルをバケット直下へアップロードしてみます。
ローカルのファイルをバケットにアップロードするコマンド
aws s3 cp {ファイルパス} s3://{バケット名}/{パス}
aws s3 cp /root/20250717-03.txt s3://mybucket-20250703-02/

アップロードされました!

バケット内のファイルを削除する
アップロードしたファイルをAWS CLIで削除してみます。
バケットのファイルを削除する
aws s3 rm s3://{バケット名}/{ファイルパス}
aws s3 rm s3://mybucket-20250703-02/20250717-03.txt

削除されました!

まとめ
今回は、EC2インスタンス(Linux)へAWS CLIをインストールしてAWSリソース( S3)へ接続できるか検証してみました。
次は、VPCエンドポイントを利用してAWSのプライベートサブネット内のEC2インスタンスからS3へアクセスできるか検証したいと思います。
以下、他の記事をまとめた一覧です。AWSもまとめています。