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

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

岩佐 孝浩
岩佐 孝浩
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

まとめ

ゲートウェイ型ではなくインターフェース型を利用するユースケースの一例としては、オンプレミスと VPC を接続していて、オンプレミスから S3 に接続したい場合が挙げられます。

この投稿が、お役に立てば幸いです。

岩佐 孝浩

岩佐 孝浩

Software Developer at KAKEHASHI Inc.
AWS を活用したクラウドネイティブ・アプリケーションの要件定義・設計・開発に従事。 株式会社カケハシで、処方箋データ収集の新たな基盤の構築に携わっています。 Japan AWS Top Engineers 2020-2023