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

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

Route 53のプライベートホストゾーンを使うことで、クライアントは--endpoint-urlを指定せずにVPCエンドポイント経由でS3にアクセスできます。

Takahiro Iwasa
3 min read

S3のインターフェイスVPCエンドポイントを使ってS3にアクセスするには、--endpoint-urlオプションを指定する必要があります。しかし、このオプションを毎回指定する手間を省き、アクセスを簡素化するには、Route 53のプライベートホストゾーンを利用できます。

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やオンプレミスのVPN経由で接続するクライアントは、そのネットワークが同じプライベートゾーンに関連付けられていない限り、この設定の恩恵を受けられません。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

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