VPC内のEC2からS3にアクセスする

公開日:

PrivateなEC2からセキュアにS3にアクセスする

PrivateなVPCの中にあるEC2から非公開なS3のファイルをダウンロードする。インターネットには全く出ることができない環境。

VPCにS3へのエンドポイントを作ることで、VPC内のEC2とS3が通信できるようになる。

この時、

  • VPCからS3までAWSで通信が完結する(外部の経路を通らない)
  • インターネット上に公開されるゲートウェイが作成されるわけではない

のでセキュアに通信できる。

EC2はWindows。

VPCにエンドポイントを作る

VPCとEC2が通信するためのエンドポイントを作る。

エンドポイントは、インターフェースエンドポイントとゲートウェイエンドポイントの2種類がある。今回はゲートウェイエンドポイントを作成する。

手順は以下のリンクから。

Amazon S3 のゲートウェイエンドポイント - Amazon Virtual Private Cloud

AWS CLI

WindowsのEC2はAWS CLIがインストールされていない。

EC2はインターネットに出られないようになっていたので、RDP経由でローカルのインストーラーをコピーした。

IAM

EC2のIAMでS3へのアクセスを許可する。以下のポリシーEC2に当たるように設定する。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-bucket"
        },
        {
            "Sid": "GetObjects",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:HeadObject"
            ],
            "Resource": "arn:aws:s3:::my-bucket/*"
        }
    ]
}

権限が適切に設定されてないとエラーが出る。

fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

ダウンロードする

バケットの中を確認する。

aws s3 ls s3://my-bucket
2025-09-05 02:09:23  143486464 myData1
2025-09-04 07:04:23 3516037632 myData2

コピーを実行する。

aws s3 cp s3://my-bucket/myData1 ./

以下のように出ればダウンロード成功。

download: s3://my-bucket/myData1 to .\myData1

参考

おまけ

AIに相談している時に教えてもらった、AWSが公開しているIPアドレス調査ツール。調べてみるとAWS的には非公開のようだが、検索結果には情報がバンバン出てくる。

https://checkip.amazonaws.com