AWS PrivateLink for Amazon S3 - Amazon Simple Storage Service

AWS PrivateLink for Amazon S3

AWS PrivateLink for Amazon S3 を使用すると、インターネット経由で接続するのではなく、仮想プライベートクラウド (VPC) でインターフェイス VPC エンドポイント (インターフェイスエンドポイント) をプロビジョニングできます。これらのエンドポイントは、VPN および AWS Direct Connect 経由でオンプレミスにあるアプリケーション、または VPC ピアリング経由で別の AWS リージョン にあるアプリケーションから直接アクセスできます。

インターフェイスエンドポイントは、VPC 内のサブネットからプライベート IP アドレスが割り当てられた 1 つ以上の Elastic Network Interface (ENI) で表されます。Amazon S3 のインターフェイスエンドポイントに対するリクエストは、Amazon ネットワーク上の Amazon S3 に自動的にルーティングされます。AWS Direct Connect または AWS Virtual Private Network (AWS VPN) を通じて、オンプレミスのアプリケーションから VPC 内のインターフェイスエンドポイントにアクセスすることもできます。VPC をオンプレミスネットワークに接続する方法の詳細については、AWS Direct Connect ユーザーガイドおよび AWS Site-to-Site VPN ユーザーガイドをご参照ください。

インターフェイスエンドポイントの一般的な情報については、 AWS PrivateLink ガイドインターフェイス VPC エンドポイント ( AWS PrivateLink ) をご参照ください。

Amazon S3 の VPC エンドポイントのタイプ

Amazon S3 へのアクセスには、ゲートウェイエンドポイントインターフェイスエンドポイントの 2 つのタイプの VPC エンドポイントを使用できます。ゲートウェイエンドポイントは、AWS ネットワーク経由で VPC から Amazon S3 にアクセスするために、ルートテーブルで指定するゲートウェイです。インターフェースエンドポイントは、プライベート IP アドレスを使用して、VPC 内、オンプレミス、または VPC ピアリングや AWS Transit Gateway を使用する別の AWS リージョン にある VPC から Amazon S3 にリクエストをルーティングすることにより、ゲートウェイエンドポイントの機能を拡張します。詳細については、VPC ピアリングとはおよび Transit Gateway と VPC ピアリングを参照してください。。

インターフェイスエンドポイントは、ゲートウェイエンドポイントと互換性があります。VPC 内に既存のゲートウェイエンドポイントがある場合は、同じ VPC で両方のタイプのエンドポイントを使用できます。

Amazon S3 のゲートウェイエンドポイント

Amazon S3 のインターフェイスエンドポイント

いずれの場合も、ネットワークトラフィックは AWS ネットワーク上に残ります。

Amazon S3 パブリック IP アドレスを使用する

VPC のプライベート IP アドレスを使用して Amazon S3 にアクセスする

オンプレミスからのアクセスを許可する

オンプレミスからのアクセスを許可する

別の AWS リージョン からのアクセスを許可しない

VPC ピアリングまたは AWS Transit Gateway を使用する別の AWS リージョン にある VPC からのアクセスを許可する

課金されない

請求される

ゲートウェイエンドポイントの詳細については、 AWS PrivateLink ガイドゲートウェイ VPC エンドポイントをご参照ください。

VPC 制限は、 AWS PrivateLink for Amazon S3 に適用されます。詳細については、 AWS PrivateLink ガイドインターフェイスエンドポイントのプロパティと制限および AWS PrivateLink クォータを参照してください。また、以下の制約も適用されます。

AWS PrivateLink for Amazon S3 では、以下をサポートしていません。

Amazon S3 インターフェイスエンドポイントへのアクセス

重要

AWS PrivateLink を使用して Amazon S3 にアクセスするには、エンドポイント固有の DNS 名を使用するようにアプリケーションを更新する必要があります

インターフェイスエンドポイントを作成すると、Amazon S3 はエンドポイント固有の 2 つのタイプの S3 DNS 名 (Regional および zonal) を生成します。

  • Regional DNS 名には、一意の VPC エンドポイント ID、サービス識別子、 AWS リージョン 、およびその名前の vpce.amazonaws.com が含まれます。例えば、VPC エンドポイント ID vpce-1a2b3c4d の場合、生成される DNS 名は vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com に似ている場合があります。

  • Zonal DNS 名には、アベイラビリティーゾーンが含まれます (vpce-1a2b3c4d-5e6f-us-east-1a.s3.us-east-1.vpce.amazonaws.com など)。このオプションは、アーキテクチャがアベイラビリティーゾーンを分離する場合に使用できます。例えば、障害を隔離し、リージョン間のデータ転送コストを削減するために使用できます。

エンドポイント固有の S3 DNS 名は、S3 パブリック DNS ドメインから解決できます。

注記

Amazon S3 インターフェイスエンドポイントは、インターフェイスエンドポイントのプライベート DNS 機能をサポートしていませんインターフェイスエンドポイントのプライベート DNS の詳細については、 AWS PrivateLink ガイドを参照してください。

S3 インターフェイスエンドポイントからのバケットおよび S3 アクセスポイントへのアクセス

AWS CLI または AWS SDK を使用して、S3 インターフェイスエンドポイントを介してバケット、S3 アクセスポイント、および S3 コントロール API にアクセスできます。

次の図は、VPC コンソールの [Details] (詳細) タブを示しています。ここでは、VPC エンドポイントの DNS 名を確認できます。この例では、VPC エンドポイント ID (vpce-id)vpce-0e25b8cdd720f900e で、DNS 名vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com です。


        VPC コンソールの [Details] (詳細) タブのスクリーンショット。

エンドポイント固有の DNS 名の表示方法の詳細については、VPC ユーザーガイドの「エンドポイントサービスのプライベート DNS 名設定の表示」をご参照ください。

--region および --endpoint-url パラメータを使用して、S3 インターフェイスエンドポイントを介して S3 バケット、S3 アクセスポイント、または S3 コントロール API にアクセスします。

例: エンドポイント URL を使用したバケット内のオブジェクトのリスト化

次の例では、リージョン us-east-1、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com、およびバケット名 my-bucket を適切な情報に置き換えます。

aws s3 --region us-east-1 --endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com ls s3://my-bucket/

例: エンドポイント URL を使用したアクセスポイントのオブジェクトのリスト化

次の例では、ARN us-east-1:123456789012:accesspoint/test、リージョン us-east-1、および VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com を適切な情報に置き換えます。

aws s3api list-objects-v2 --bucket arn:aws:s3:us-east-1:123456789012:accesspoint/test --region us-east-1 --endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com

例: エンドポイント URL を使用した S3 コントロールでのジョブのリスト化

次の例では、リージョン us-east-1、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com、およびアカウント ID 12345678 を適切な情報に置き換えます。

aws s3control --region us-east-1 --endpoint-url https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com list-jobs --account-id 12345678

SDK を最新バージョンに更新し、S3 インターフェイスエンドポイントを介してバケット、アクセスポイント、または S3 コントロール API にアクセスするためのエンドポイント URL を使用するようにクライアントを設定します。

SDK for Python (Boto3)

例: エンドポイント URL を使用して S3 バケットにアクセスする

次の例では、リージョン us-east-1 および VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com を適切な情報に置き換えます。

s3_client = session.client( service_name='s3', region_name='us-east-1', endpoint_url='https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )

例: エンドポイント URL を使用して S3 アクセスポイントにアクセスする

次の例では、リージョン us-east-1 および VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com を適切な情報に置き換えます。

ap_client = session.client( service_name='s3', region_name='us-east-1', endpoint_url='https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )

例: エンドポイント URL を使用して S3 コントロール API にアクセスする

次の例では、リージョン us-east-1 および VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com を適切な情報に置き換えます。

control_client = session.client( service_name='s3control', region_name='us-east-1', endpoint_url='https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com' )
SDK for Java 1.x

例: エンドポイント URL を使用して S3 バケットにアクセスする

次の例では、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com を適切な情報に置き換えます。

// bucket client final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); List<Bucket> buckets = s3.listBuckets();

例: エンドポイント URL を使用して S3 アクセスポイントにアクセスする

次の例では、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com と ARN us-east-1:123456789012:accesspoint/prod を適切な情報に置き換えます。

// accesspoint client final AmazonS3 s3accesspoint = AmazonS3ClientBuilder.standard().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); ObjectListing objects = s3accesspoint.listObjects("arn:aws:s3:us-east-1:123456789012:accesspoint/prod");

例: エンドポイント URL を使用して S3 コントロール API にアクセスする

次の例では、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com を適切な情報に置き換えます。

// control client final AWSS3Control s3control = AWSS3ControlClient.builder().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build(); final ListJobsResult jobs = s3control.listJobs(new ListJobsRequest());
SDK for Java 2.x

例: エンドポイント URL を使用して S3 バケットにアクセスする

次の例では、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com とリージョン Region.US_EAST_1 を適切な情報に置き換えます。

// bucket client Region region = Region.US_EAST_1; s3Client = S3Client.builder().region(region) .endpointOverride(URI.create("https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

例: エンドポイント URL を使用して S3 アクセスポイントにアクセスする

次の例では、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com とリージョン Region.US_EAST_1 を適切な情報に置き換えます。

// accesspoint client Region region = Region.US_EAST_1; s3Client = S3Client.builder().region(region) .endpointOverride(URI.create("https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

例: エンドポイント URL を使用して S3 コントロール API にアクセスする

次の例では、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com とリージョン Region.US_EAST_1 を適切な情報に置き換えます。

// control client Region region = Region.US_EAST_1; s3ControlClient = S3ControlClient.builder().region(region) .endpointOverride(URI.create("https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com")) .build()

オンプレミスの DNS 設定の更新

エンドポイント固有の DNS 名を使用して Amazon S3 のインターフェイスエンドポイントにアクセスする場合、オンプレミス DNS リゾルバーを更新する必要はありません。パブリック Amazon S3 DNS ドメインからのインターフェイスエンドポイントのプライベート IP アドレスを使用して、エンドポイント固有の DNS 名を解決できます。

Amazon S3 にアクセスするためのインターフェイスエンドポイントの使用 (VPC 内のゲートウェイエンドポイントまたはインターネットゲートウェイの使用なし)

次の図に示すように、VPC 内のインターフェイスエンドポイントは、VPC 内アプリケーションとオンプレミスアプリケーションの両方を Amazon ネットワーク経由で Amazon S3 にルーティングできます。


          データフロー図は、インターフェイスエンドポイントと 
				AWS PrivateLink
			 を使用した、オンプレミスアプリと VPC 内アプリから S3 へのアクセスを示しています。

図は、以下を示しています。

  • オンプレミスネットワークでは、AWS Direct Connect または AWS VPN を使用して VPC A に接続します。

  • オンプレミスと VPC A のアプリケーションでは、エンドポイント固有の DNS 名を使用して S3 インターフェイスエンドポイントを介して Amazon S3 にアクセスします。

  • オンプレミスのアプリケーションは、AWS Direct Connect (または AWS VPN) を介して VPC 内のインターフェイスエンドポイントにデータを送信します。 AWS PrivateLink は、AWS ネットワークを経由してデータをインターフェイスエンドポイントから Amazon S3 に移行します。

  • VPC 内アプリケーションは、インターフェイスエンドポイントにトラフィックの送信も行います。 AWS PrivateLink は、AWS ネットワークを経由してデータをインターフェイスエンドポイントから Amazon S3 に移行します。

Amazon S3 にアクセスするための、ゲートウェイエンドポイントとインターフェイスエンドポイントの同じ VPC における併用

次の図に示すように、インターフェイスエンドポイントを作成し、同じ VPC 内に既存のゲートウェイエンドポイントを保持できます。これにより、VPC 内アプリケーションがゲートウェイエンドポイントを介して Amazon S3 に引き続きアクセスすることを許可します。これについての請求はありません。その後、オンプレミスのアプリケーションだけがインターフェイスエンドポイントを使用して Amazon S3 にアクセスします。この方法で S3 にアクセスするには、Amazon S3 のエンドポイント固有の DNS 名を使用するようにオンプレミスのアプリケーションを更新する必要があります。


            データフロー図は、ゲートウェイエンドポイントとインターフェイスエンドポイントを併用した S3 へのアクセスを示しています。

図は、以下を示しています。

  • オンプレミスのアプリケーションは、エンドポイント固有の DNS 名を使用して、AWS Direct Connect (または AWS VPN) を介して VPC 内のインターフェイスエンドポイントにデータを送信します。 AWS PrivateLink は、AWS ネットワークを経由してデータをインターフェイスエンドポイントから Amazon S3 に移行します。

  • VPC 内アプリケーションは、デフォルトのリージョン Amazon S3 名を使用して、AWS ネットワークを介して Amazon S3 に接続するゲートウェイエンドポイントにデータを送信します。

ゲートウェイエンドポイントの詳細については、VPC ユーザーガイドの「ゲートウェイ VPC エンドポイント」をご参照ください。

Amazon S3 用の VPC エンドポイントポリシーの作成

VPC エンドポイントに Amazon S3 へのアクセスをコントロールするエンドポイントポリシーをアタッチできます。このポリシーでは、以下の情報を指定します。

  • アクションを実行できる AWS Identity and Access Management (IAM) プリンシパル

  • 実行可能なアクション

  • このアクションを実行できるリソース

Amazon S3 バケットポリシーを使用して、バケットポリシーの aws:sourceVpce 条件を使用して、特定の VPC エンドポイントからの特定のバケットへのアクセスを制限することもできます。次の例は、バケットまたはエンドポイントへのアクセスを制限するポリシーを示しています。

重要
  • このセクションで説明している VPC エンドポイントに Amazon S3 のバケットポリシーを適用すると、バケットへのアクセスが意図せずにブロックされる場合があります。特に VPC エンドポイントからの接続に対するバケットのアクセスを制限することを目的としたバケットのアクセス許可により、バケットへのすべての接続がブロックされる場合があります。この問題を修正する方法については、「私のバケットポリシーに間違った VPC または VPC エンドポイント ID が登録されます。ポリシーを修正してバケットにアクセスできるようにするにはどうすれば良いですか?」(AWS Support ナレッジセンター)を参照してください。

  • 次のポリシーの例を使用する前に、VPC エンドポイントの ID をユースケースに応じた値に置き換えてください。そうしないと、バケットにアクセスできません。

  • このポリシーは、コンソールリクエストが指定の VPC エンドポイントを経由していない場合、指定先のバケットへのコンソールアクセスを無効にします。

特定の Amazon S3 バケットへのアクセスのみを制限するエンドポイントポリシーを作成できます。これは、VPC で バケットを使用する他の AWS のサービスがある場合に便利です。次のバケットポリシーは、DOC-EXAMPLE-BUCKET1 へのアクセスのみを制限します。DOC-EXAMPLE-BUCKET1 をバケットの名前に置き換えます。

{ "Version": "2012-10-17", "Id": "Policy1415115909151", "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*"] } ] }

特定の AWS アカウント の S3 バケットへのアクセスのみを制限するポリシーを作成できます。これを使用して、所有していないバケットに VPC 内のクライアントがアクセスできないようにします。次の例では、単一の AWS アカウント ID 111122223333 が所有するリソースへのアクセスを制限するポリシーを作成します。

{ "Statement": [ { "Sid": "Access-to-bucket-in-specific-account-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Deny", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "111122223333" } } } ] }

例: S3 バケットポリシーでの特定の VPC エンドポイントへのアクセスの制限

次の Amazon S3 バケットポリシーは、エンドポイント DOC-EXAMPLE-BUCKET2 からのみ、特定のバケット vpce-1a2b3c4d へのアクセスを許可します。指定されたエンドポイントを使用していない場合、ポリシーによりバケットへのすべてのアクセスが拒否されます。aws:sourceVpce 条件はエンドポイントを指定するために使用され、VPC エンドポイントリソースの Amazon リソースネーム (ARN) を必要とせず、エンドポイント ID のみを指定します。DOC-EXAMPLE-BUCKET2 および vpce-1a2b3c4d を実際のバケット名とエンドポイントに置き換えます。

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET2", "arn:aws:s3:::DOC-EXAMPLE-BUCKET2/*"], "Condition": {"StringNotEquals": {"aws:sourceVpce": "vpce-1a2b3c4d"}} } ] }

ポリシーの例については、VPC ユーザーガイドの「Amazon S3 のエンドポイント」を参照してください。

VPC 接続の詳細については、AWS ホワイトペーパー Amazon Virtual Private Cloud 接続オプションネットワークから VPC への接続オプションを参照してください。