AWS PrivateLink for DynamoDB - Amazon DynamoDB

AWS PrivateLink for DynamoDB

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

VPC 内のアプリケーションは、パブリック IP アドレスがなくても、DynamoDB インターフェイス VPC エンドポイントと通信して、DynamoDB の操作を実行できます。インターフェイスエンドポイントは、Amazon VPC 内のサブネットからプライベート IP アドレスが割り当てられた 1 つ以上の Elastic Network Interface (ENI) で表されます。インターフェイスエンドポイントを介した DynamoDB へのリクエストが Amazon ネットワーク外に出ることはありません。AWS Direct Connect または AWS Virtual Private Network (AWS VPN) を介して、オンプレミスのアプリケーションから Amazon VPC 内のインターフェイスエンドポイントにアクセスすることもできます。Amazon VPC をオンプレミスネットワークに接続する方法の詳細については、「AWS Direct Connect ユーザーガイド」および「AWS Site-to-Site VPN ユーザーガイド」を参照してください。

インターフェイスエンドポイントの一般的な情報については、「AWS PrivateLink ガイド」インターフェイス Amazon VPC エンドポイント (AWS PrivateLink) に関するセクションを参照してください。

Amazon DynamoDB で使用される Amazon VPC エンドポイントのタイプ

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

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

DynamoDB のゲートウェイエンドポイント

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

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

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

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

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

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

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

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

課金されない

請求される

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

Amazon VPC に関する考慮事項が AWS PrivateLink for Amazon DynamoDB に適用されます。詳細については、AWS PrivateLink ガイドの「インターフェイスエンドポイントの考慮事項」と「AWS PrivateLink クォータ」を参照してください。また、以下の制約も適用されます。

AWS PrivateLink for Amazon DynamoDB では、以下はサポートされていません。

AWS PrivateLink は現在、Amazon DynamoDB Streams エンドポイントではサポートされていません。

有効にする AWS PrivateLink エンドポイントごとに、1 秒あたり最大 5 万件のリクエストを送信できます。

注記

AWS PrivateLink エンドポイントへのネットワーク接続タイムアウトは DynamoDB エラーレスポンスの範囲ではないため、PrivateLink エンドポイントに接続するアプリケーションで適切に処理する必要があります。

Amazon VPC エンドポイントの作成

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

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

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

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

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

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

DynamoDB インターフェイスエンドポイントから DynamoDB テーブルおよびコントロール API オペレーションへのアクセス

DynamoDB インターフェイスエンドポイントを介して DynamoDB テーブルおよびコントロール API オペレーションにアクセスするには、AWS CLI または AWS SDK を使用します。

AWS CLI コマンドを使って DynamoDB インターフェイスエンドポイントを介して DynamoDB テーブルまたは DynamoDB コントロール API オペレーションにアクセスするには、--region および --endpoint-url パラメータを使用します。

例: VPC エンドポイントの作成

aws ec2 create-vpc-endpoint \ --region us-east-1 \ --service-name dynamodb-service-name \ --vpc-id client-vpc-id \ --subnet-ids client-subnet-id \ --vpc-endpoint-type Interface \ --security-group-ids client-sg-id

例: VPC エンドポイントの変更

aws ec2 modify-vpc-endpoint \ --region us-east-1 \ --vpc-endpoint-id client-vpc-endpoint-id \ --policy-document policy-document \ #example optional parameter --add-security-group-ids security-group-ids \ #example optional parameter # any additional parameters needed, see Privatelink documentation for more details

例: エンドポイント URL を使ったテーブルの一覧表示

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

aws dynamodb --region us-east-1 —endpoint https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com list-tables

AWS SDK を使って DynamoDB インターフェイスエンドポイントを介して DynamoDB テーブルまたは DynamoDB コントロール API オペレーションにアクセスするには、SDK を最新バージョンに更新します。次に、エンドポイント URL を使用して DynamoDB インターフェイスエンドポイントを介してテーブルまたは DynamoDB コントロール API オペレーションにアクセスするように、クライアントを設定します。

SDK for Python (Boto3)
例: エンドポイント URL を使用して DynamoDB テーブルにアクセスする

次の例では、リージョン us-east-1 および VPC エンドポイント ID https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com をユーザー自身の情報に置き換えます。

ddb_client = session.client( service_name='dynamodb', region_name='us-east-1', endpoint_url='https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com' )
SDK for Java 1.x
例: エンドポイント URL を使用して DynamoDB テーブルにアクセスする

次の例では、リージョン us-east-1 および VPC エンドポイント ID https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com をユーザー自身の情報に置き換えます。

//client build with endpoint config final AmazonDynamoDB dynamodb = AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration( "https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com", Regions.DEFAULT_REGION.getName() ) ).build();
SDK for Java 2.x
例: エンドポイント URL を使用して S3 バケットにアクセスする

次の例では、リージョン us-east-1 と VPC エンドポイント ID https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com をユーザー自身の情報に置き換えます。

Region region = Region.US_EAST_1; dynamoDbClient = DynamoDbClient.builder().region(region) .endpointOverride(URI.create("https://vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com")) .build()

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

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

Amazon VPC 内のゲートウェイエンドポイントまたはインターネットゲートウェイは使用せず、インターフェイスエンドポイントを使用して DynamoDB にアクセスする

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


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

この図表は、以下を示すものです:

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

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

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

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

ゲートウェイエンドポイントとインターフェイスエンドポイントを同じ Amazon VPC で併用して DynamoDB にアクセスする

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


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

この図表は、以下を示すものです:

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

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

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

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

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

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

  • 実行可能なアクション

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

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

{ "Version": "2012-10-17", "Id": "Policy1216114807515", "Statement": [ { "Sid": "Access-to-specific-table-only", "Principal": "*", "Action": [ "dynamodb:GetItem", "dynamodb:PutItem" ], "Effect": "Allow", "Resource": ["arn:aws:dynamodb:::DOC-EXAMPLE-TABLE", "arn:aws:dynamodb:::DOC-EXAMPLE-TABLE/*"] } ] }