インターフェイス 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 転送経路を用意します。

著者について

Takahiro Iwasa

Takahiro Iwasa

Software Developer

このブログでは、実際のプロジェクトで得たアーキテクチャ、実装、AWSサービス連携に関する技術的な知見を共有しています。