S3 インターフェース VPC エンドポイントと Route 53 Private Hosted Zone を利用した S3 アクセス

S3 インターフェース VPC エンドポイントと Route 53 Private Hosted Zone を利用した S3 アクセス

Takahiro Iwasa
(岩佐 孝浩)
Takahiro Iwasa (岩佐 孝浩)
3 min read
Route 53 VPC Endpoints

S3 は、ゲートウェイ VPC エンドポイントだけでなく、インターフェース VPC エンドポイントも提供しています。

S3 のインターフェース VPC エンドポイントでは、 --endpoint-url オプションを指定する必要があり、デフォルトの S3 エンドポイント (your-region.s3.amazonaws.com) にはアクセスできません。デフォルトのエンドポイントを使用するには、 Route 53 Private Hosted Zone が使用できます。

概要

この投稿では、プライベートサブネット内に配置された EC2 インスタンスから S3 にアクセスする手順について説明します。

S3 VPC エンドポイント

VPC エンドポイントなしで S3 にアクセス

次のコマンドを実行して、 S3 VPC エンドポイントなしで S3 にアクセスできないことを確認してください。

$ aws s3 ls --region $YOUR_REGION --cli-read-timeout 1 --cli-connect-timeout 1

Connect timeout on endpoint URL: "https://s3.ap-northeast-1.amazonaws.com/"

S3 インターフェース VPC エンドポイント作成

次のコマンドを実行して、 S3 インターフェース VPC エンドポイントを作成してください。

$ aws ec2 create-vpc-endpoint \
  --vpc-id $YOUR_VPC_ID \
  --vpc-endpoint-type Interface \
  --service-name com.amazonaws.$YOUR_REGION.s3 \
  --subnet-ids $YOUR_PRIVATE_SUBNET_IDS \
  --security-group-ids $YOUR_SECURITY_GROUP_IDS

$ aws ec2 describe-vpc-endpoints \
  --filters Name=service-name,Values=com.amazonaws.$YOUR_REGION.s3 \
  --query "VpcEndpoints[*].DnsEntries"
[
    [
        {
            "DnsName": "*.vpce-xxxxxxxxxxxxxxxxx-xxxxxxxx.s3.ap-northeast-1.vpce.amazonaws.com",
            "HostedZoneId": "xxxxxxxxxxxxxx"
        },
        {
            "DnsName": "*.vpce-xxxxxxxxxxxxxxxxx-xxxxxxxx-ap-northeast-1a.s3.ap-northeast-1.vpce.amazonaws.com",
            "HostedZoneId": "xxxxxxxxxxxxxx"
        }
    ]
]

VPC エンドポイントで S3 にアクセス

次のコマンドを実行して、 S3 VPC エンドポイントで S3 にアクセスできることを確認してください。

$ aws s3 ls \
  --region <YOUR_REGION> \
  --endpoint-url http://vpce-xxxxxxxxxxxxxxxxx-xxxxxxxx.s3.ap-northeast-1.vpce.amazonaws.com
2022-11-26 06:28:36 sample-bucket-of-s3-through-private-network

Route 53 Private Hosted Zone

Route 53 Private Hosted Zone 作成

次のコマンドを実行して、 Route 53 private hosted zone を作成してください。

$ aws route53 create-hosted-zone \
  --name s3.$YOUR_REGION.amazonaws.com \
  --vpc VPCRegion=$YOUR_REGION,VPCId=$YOUR_VPC_ID \
  --caller-reference "$(date)"

DNS Record 追加

以下を参考に、 A (ALIAS) レコードを追加してください。

Create record をクリックしてください。

Record typeA を選択し、 Route traffic toAlias to VPC endpoint を指定してください。

—endpoint-url なしで S3 にアクセス

以下のコマンドを実行して、 --endpoint-url オプションなしで S3 にアクセスできることを確認してください。

aws s3 ls --region ap-northeast-1
2022-11-26 06:28:36 sample-bucket-of-s3-through-private-network
Takahiro Iwasa
(岩佐 孝浩)

Takahiro Iwasa (岩佐 孝浩)

Software Developer at iret, Inc.
主に AWS を利用したクラウドネイティブアプリケーションの設計および開発をしています。 Japan AWS Top Engineers 2020-2023