Amazon S3 の場合は AWS PrivateLink - Amazon Simple Storage Service

Amazon S3 の場合は AWS PrivateLink

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

インターフェイスエンドポイントは、VPC 内のサブネットからプライベート IP アドレスが割り当てられた 1 つ以上の Elastic Network Interface (ENI) で表されます。インターフェイスエンドポイントを介した Amazon S3 へのリクエストは、Amazon ネットワークに残ります。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 へのアクセスには、ゲートウェイエンドポイントインターフェイスエンドポイント (AWS PrivateLink を使用) の 2 つのタイプの VPC エンドポイントを使用できます。ゲートウェイエンドポイントは、AWS ネットワーク経由で VPC から Amazon S3 にアクセスするために、ルートテーブルで指定するゲートウェイです。インターフェイスエンドポイントは、プライベート IP アドレスを使用して、VPC 内、オンプレミス、または VPC ピアリングや AWS リージョン を使用する別の AWS Transit Gateway にある VPC から Amazon S3 にリクエストをルーティングすることにより、ゲートウェイエンドポイントの機能を拡張します。詳細については、「VPC ピア機能とは」および「Transit Gateway vs VPC peering」(Transit Gateway と VPC ピアリング) を参照してください。

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

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

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

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

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

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

同じ Amazon S3 DNS 名を使用する

エンドポイント固有の Amazon S3 DNS 名を要求する

オンプレミスからのアクセスを許可しない

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

別の 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 では、以下はサポートされていません。

VPC エンドポイントの作成

VPC インターフェイスエンドポイントを作成するには、AWS PrivateLink ガイドの「VPC エンドポイントの作成」を参照してください。

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

インターフェイスエンドポイントを作成すると、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 ドメインから解決できます。

プライベート DNS

VPC インターフェイスエンドポイント用のプライベート DNS オプションを使用すると、VPC エンドポイント経由の S3 トラフィックのルーティングが簡単になり、アプリケーションで使用できる最も低コストのネットワークパスを活用できます。プライベート DNS オプションを使用すると、インターフェイスエンドポイントのエンドポイント固有の DNS 名を使用するように S3 クライアントを更新したり、DNS インフラストラクチャを管理したりすることなく、Regional S3 トラフィックをルーティングできます。プライベート DNS 名を有効にすると、Regional S3 DNS クエリは次のエンドポイントの AWS PrivateLink のプライベート IP アドレスに解決されます。

  • Regional バケットエンドポイント (例: s3.us-east-1.amazonaws.com)

  • 制御エンドポイント (例: s3-control.us-east-1.amazonaws.com)

  • アクセスポイントエンドポイント (例: s3-accesspoint.us-east-1.amazonaws.com)

VPC にゲートウェイエンドポイントがある場合は、VPC 内リクエストを既存の S3 ゲートウェイエンドポイントに、オンプレミスリクエストをインターフェイスエンドポイントに自動的にルーティングできます。このアプローチでは、VPC 内のトラフィックに課金されないゲートウェイエンドポイントを使用することで、ネットワークコストを最適化できます。オンプレミスアプリケーションは、インバウンドリゾルバーエンドポイントを利用して AWS PrivateLink を使用できます。Amazon は、「Route 53 Resolver」と呼ばれる VPC 用の DNS サーバーを提供しています。インバウンド Resolver エンドポイントは、DNS クエリをオンプレミスネットワークから Route 53 Resolver に転送します。

重要

[インバウンドエンドポイントでのみプライベート DNS を有効にする] を使用するときに最も低コストのネットワークパスを利用するには、ゲートウェイエンドポイントが VPC に存在している必要があります。ゲートウェイエンドポイントが存在すると、[インバウンドエンドポイントでのみプライベート DNS を有効にする] オプションが選択されている場合でも、VPC 内のトラフィックは常に AWS プライベートネットワーク経由でルーティングされます。[インバウンドエンドポイントでのみプライベート DNS を有効にする] オプションが選択されている間は、このゲートウェイエンドポイントを維持する必要があります。ゲートウェイエンドポイントを削除する場合は、まず [インバウンドエンドポイントでのみプライベート DNS を有効にする] をオフにする必要があります。

既存のインターフェイスエンドポイントを [インバウンドエンドポイントでのみプライベート DNS を有効にする] に更新する場合は、まず VPC に S3 ゲートウェイエンドポイントがあることを確認します。ゲートウェイエンドポイントとプライベート DNS 名の管理の詳細については、AWS PrivateLink ガイドの「ゲートウェイ VPC エンドポイント」と「VPC エンドポイントサービスの DNS 名を管理する」をそれぞれ参照してください。

[インバウンドエンドポイントでのみプライベート DNS を有効にする] オプションは、ゲートウェイエンドポイントをサポートするサービスでのみ使用できます。

[インバウンドエンドポイントでのみプライベート DNS を有効にする] を使用する VPC エンドポイントの作成の詳細については、AWS PrivateLink ガイドのの「VPC エンドポイントの作成」を参照してください。

Amazon VPC コンソールの使用

コンソールには、[DNS 名を有効にする][インバウンドエンドポイントに対してのみプライベート DNS を有効にする] の 2 つのオプションがあります。[DNS 名を有効にする] は、AWS PrivateLink でサポートされているオプションです。[DNS 名を有効にする] オプションを使用すると、デフォルトのパブリックエンドポイント DNS 名にリクエストを送信しながら、Amazon S3 への Amazon のプライベート接続を使用できます。このオプションを有効にすると、お客様はアプリケーションで使用できる最も低コストのネットワークパスを利用できます。

Amazon S3 の既存または新しい VPC インターフェイスエンドポイントでプライベート DNS 名を有効にすると、デフォルトで [インバウンドエンドポイントに対してのみプライベート DNS を有効にする] オプションが選択されます。このオプションを選択すると、アプリケーションはオンプレミストラフィックのインターフェイスエンドポイントのみを使用します。この VPC 内トラフィックは、低コストのゲートウェイエンドポイントを自動的に使用します。または、[インバウンドエンドポイントのみプライベート DNS を有効にする] をオフにして、すべての S3 リクエストをインターフェイスエンドポイントにルーティングすることもできます。

AWS CLI の使用

PrivateDnsOnlyForInboundResolverEndpoint の値を指定しない場合は、デフォルトで true になります。ただし、VPC は設定を適用する前に、VPC にゲートウェイエンドポイントが存在することを確認します。ゲートウェイエンドポイントが VPC に存在する場合、呼び出しは成功します。そうでない場合は、以下のエラーメッセージが表示されます。

PrivateDnsOnlyForInboundResolverEndpoint を true に設定するには、VPC vpce_id にサービスのゲートウェイエンドポイントが必要です。

新しい VPC インターフェイスエンドポイントの場合

private-dns-enabled および dns-options 属性を使用して、コマンドラインからプライベート DNS を有効にします。dns-options 属性の PrivateDnsOnlyForInboundResolverEndpoint オプションは true に設定する必要があります。user input placeholders を、ユーザー自身の情報に置き換えます。

aws ec2 create-vpc-endpoint \ --region us-east-1 \ --service-name s3-service-name \ --vpc-id client-vpc-id \ --subnet-ids client-subnet-id \ --vpc-endpoint-type Interface \ --private-dns-enabled \ --ip-address-type ip-address-type \ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=true \ --security-group-ids client-sg-id

既存の VPC エンドポイントの場合

既存の VPC エンドポイントにプライベート DNS を使用する場合は、以下のコマンド例を使用して、user input placeholders を独自の情報に置き換えます。

aws ec2 modify-vpc-endpoint \ --region us-east-1 \ --vpc-endpoint-id client-vpc-id \ --private-dns-enabled \ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=false

既存の VPC エンドポイントを更新して Inbound Resolver のプライベート DNS のみを有効にする場合は、次の例を使用して、サンプル値を独自の値に置き換えてください。

aws ec2 modify-vpc-endpoint \ --region us-east-1 \ --vpc-endpoint-id client-vpc-id \ --private-dns-enabled \ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=true

S3 インターフェイスエンドポイントからバケット、アクセスポイント、および Amazon S3 コントロール API オペレーションにアクセスする

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

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


        VPC コンソールの [詳細] タブ。

DNS 名を使用してリソースにアクセスする場合は、* を適切な値に置き換えてください。* の代わりに使用する適切な値は次のとおりです。

  • bucket

  • accesspoint

  • control

例えば、バケットにアクセスするには、次のような DNS 名を使用します。

bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com

DNS 名を使用してバケット、アクセスポイント、Amazon S3 Control API オペレーションにアクセスする方法の例については、AWS CLI の例 および AWS SDK の例 の以下のセクションを参照してください。

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

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

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

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

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

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

  • 方法 1 — アクセスポイントエンドポイントでアクセスポイントの Amazon リソースネーム (ARN) を使用する

    ARN us-east-1:123456789012:accesspoint/accesspointexamplename、リージョン 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/accesspointexamplename --region us-east-1 --endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com

    コマンドを正常に実行できない場合は、AWS CLI を最新バージョンに更新してからやり直してください。更新手順について詳細は、AWS Command Line Interface ユーザーガイドの「AWS CLI の最新バージョンをインストールまたは更新」を参照してください。

  • 方法 2 — リージョンバケットエンドポイントでアクセスポイントのエイリアスを使用する

    次の例では、アクセスポイントエイリアス accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias、リージョン us-east-1、および VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com をユーザー自身の情報に置き換えます。

    aws s3api list-objects-v2 --bucket accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias --region us-east-1 --endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
  • 方法 3 — アクセスポイントのエイリアスをアクセスポイントエンドポイントで使用する

    まず、バケットをホスト名の一部として含む S3 エンドポイントを作成するには、aws s3api が使用するアドレス指定スタイルを virtual に設定します。AWS configure の詳細については、AWS Command Line Interface ユーザーガイドの「設定ファイルと認証情報ファイルの設定」を参照してください。

    aws configure set default.s3.addressing_style virtual

    次に、次の例では、アクセスポイントのエイリアス accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias、リージョン us-east-1、VPC エンドポイント ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com をユーザー自身の情報に置き換えます。アクセスポイントエイリアスの詳細については、「S3 バケットアクセスポイントでのバケット形式のエイリアスの使用」を参照してください。

    aws s3api list-objects-v2 --bucket accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias --region 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、およびアカウント 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

AWS SDK を使用する際に S3 インターフェイス エンドポイントを介して S3 バケット、S3 アクセスポイント、または Amazon S3 コントロール API オペレーションにアクセスするには、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 を使用して Amazon 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 を使用して Amazon 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 を使用して Amazon 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 にアクセスします。この方法で Amazon 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 エンドポイントからの特定のバケットへのアクセスを制限することもできます。次の例は、バケットまたはエンドポイントへのアクセスを制限するポリシーを示しています。

特定の Amazon S3 バケットへのアクセスのみを制限するエンドポイントポリシーを作成できます。このタイプのポリシーは、VPC で S3 バケットを使用する他の 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 アカウント、111122223333 が所有するリソースへのアクセスを制限するポリシーを作成します。

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

アクセスされるリソースの AWS アカウント ID を指定するには、IAM ポリシーで aws:ResourceAccount キーまたは s3:ResourceAccount キーを使用できます。ただし、一部の AWS のサービス は AWS マネージドバケットへのアクセスに依存していることに注意してください。したがって、IAM ポリシーで aws:ResourceAccount キーまたは s3:ResourceAccount キーを使用することは、これらのリソースへのアクセスにも影響する可能性があります。

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

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

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

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

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

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