インターフェイス VPC エンドポイントと Route 53 で S3 アクセスを簡素化する

インターフェイス VPC エンドポイントと Route 53 で S3 アクセスを簡素化する

Route 53 のプライベートホストゾーンを使い、クライアントから `--endpoint-url` を指定せずに VPC エンドポイント経由で S3 へアクセスします。

Takahiro Iwasa
3 min read

2022 年当時、S3 のインターフェイス VPC エンドポイントを使って S3 にアクセスするには、--endpoint-url オプションの指定が必要です。Route 53 のプライベートホストゾーンを使って標準のリージョナル S3 ホスト名をエンドポイントに割り当てれば、このオプションを省略できます。

S3 VPC エンドポイント

インターフェイス VPC エンドポイントを作成します。

Terminal window
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

エンドポイントが作成されたことを確認し、DNS エントリを取得します。

Terminal window
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 エンドポイントの URL を使って、S3 へのアクセスを確認します。

Important

--region オプションを指定する必要があります。

Terminal window
aws s3 ls \
--region <YOUR_REGION> \
--endpoint-url http://vpce-xxxxxxxxxxxxxxxxx-xxxxxxxx.s3.ap-northeast-1.vpce.amazonaws.com

Route 53 のプライベートホストゾーン

Route 53 のプライベートホストゾーンを使うと、その URL を直接指定する必要がなくなります。

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

Route 53 コンソールで、VPC エンドポイントを指す A(ALIAS) レコードを追加します。

Create record をクリックします。

レコードタイプとして A を、ルーティング先として Alias to VPC endpoint を選択します。

ホストゾーンを設定すると、--endpoint-url オプションを指定せずに S3 へアクセスできます。

Important

--region オプションを指定する必要があります。

Terminal window
aws s3 ls --region ap-northeast-1

まとめ

S3 のインターフェイス VPC エンドポイントと Route 53 のプライベートホストゾーンを組み合わせることで、--endpoint-url を指定せずに aws s3 ls をプライベートエンドポイント経由で実行できます。

s3.$YOUR_REGION.amazonaws.com 用のプライベートホストゾーンを作成し、インターフェイスエンドポイントを指す A(ALIAS) レコードを設定します。関連付けた VPC 内では、標準のリージョナル S3 ホスト名が VPC エンドポイントへ解決されます。カスタムエンドポイントを簡単に指定できないツールや SDK でも、クライアント側のコードを変更せずに利用できます。

ただし、プライベートホストゾーンを参照できるのは、関連付けた VPC に限られます。別の VPC から利用するにはホストゾーンとの関連付けが必要です。オンプレミスから利用する場合は、Route 53 Resolver のエンドポイントとルールなど、適切な DNS 転送経路を用意します。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.