

# AWS PrivateLink for DynamoDB
<a name="privatelink-interface-endpoints"></a>

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

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

インターフェイスエンドポイントの一般的な情報については、「*AWS PrivateLink ガイド*」の「[インターフェイス Amazon VPC エンドポイント (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html)」を参照してください。AWS PrivateLink は Amazon DynamoDB Streams エンドポイントでもサポートされています。詳細については、「[AWS PrivateLink for DynamoDB Streams](privatelink-streams.md)」を参照してください。

**Topics**
+ [Amazon DynamoDB で使用される Amazon VPC エンドポイントのタイプ](#types-of-vpc-endpoints-for-ddb)
+ [AWS PrivateLink for Amazon DynamoDB を使用する場合の考慮事項](#privatelink-considerations)
+ [Amazon VPC エンドポイントの作成](#ddb-creating-vpc)
+ [Amazon DynamoDB インターフェイスエンドポイントへのアクセス](#accessing-ddb-interface-endpoints)
+ [DynamoDB インターフェイスエンドポイントから DynamoDB テーブルおよびコントロール API オペレーションへのアクセス](#accessing-tables-apis-from-interface-endpoints)
+ [オンプレミスの DNS 設定の更新](#updating-on-premises-dns-config)
+ [DynamoDB 用 Amazon VPC エンドポイントポリシーの作成](#creating-vpc-endpoint-policy)
+ [AWS マネジメントコンソール プライベートアクセスでの DynamoDB エンドポイントの使用](#ddb-endpoints-private-access)
+ [AWS PrivateLink for DynamoDB Streams](privatelink-streams.md)
+ [DynamoDB Accelerator (DAX) での AWS PrivateLink の使用](dax-private-link.md)

## Amazon DynamoDB で使用される Amazon VPC エンドポイントのタイプ
<a name="types-of-vpc-endpoints-for-ddb"></a>

Amazon DynamoDB へのアクセスには、ゲートウェイエンドポイント**とインターフェイスエンドポイント** (AWS PrivateLink を使用) の 2 つのタイプの Amazon VPC エンドポイントを使用できます。ゲートウェイエンドポイント**は、AWS ネットワーク経由で Amazon VPC から DynamoDB にアクセスするために、ルートテーブルで指定するゲートウェイです。インターフェイスエンドポイント**は、プライベート IP アドレスを使用して、Amazon VPC 内、オンプレミス、または Amazon VPC ピアリングや AWS Transit Gateway を使用する別の AWS リージョンにある Amazon VPC から DynamoDB にリクエストをルーティングすることにより、ゲートウェイエンドポイントの機能を拡張します。詳細については、「[VPC ピア機能とは](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)」および「[Transit Gateway と VPC ピアリング](https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/transit-gateway-vs-vpc-peering.html)」を参照してください。

インターフェイスエンドポイントは、ゲートウェイエンドポイントと互換性があります。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](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-gateway.html)」を参照してください。

## AWS PrivateLink for Amazon DynamoDB を使用する場合の考慮事項
<a name="privatelink-considerations"></a>

Amazon VPC に関する考慮事項が AWS PrivateLink for Amazon DynamoDB に適用されます。詳細については、*AWS PrivateLink ガイド*の「[インターフェイスエンドポイントの考慮事項](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#vpce-interface-limitations)」と「[AWS PrivateLink クォータ](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-limits-endpoints.html)」を参照してください。また、以下の制約も適用されます。

AWS PrivateLink for Amazon DynamoDB では、以下はサポートされていません。
+ Transport Layer Security (TLS) 1.1
+ プライベートおよびハイブリッドドメインネームシステム (DNS) サービス

**重要**  
DynamoDB エンドポイントの DNS 名 (`dynamodb.region.amazonaws.com` や `*.region.amazonaws.com` など) を上書きしてトラフィックをインターフェイスエンドポイントにルーティングするために、プライベートホストゾーンを作成しないでください。DynamoDB の DNS 設定は、時間の経過とともに変更される可能性があります。  
 カスタム DNS オーバーライドは、これらの変更と互換性がないため、リクエストがインターフェイスエンドポイントではなくパブリック IP アドレス経由で予期せずルーティングされる可能性があります。  
 AWS PrivateLink を介して DynamoDB にアクセスするには、Amazon VPC エンドポイント URL を直接使用するようにクライアントを設定します (例: `https://vpce-1a2b3c4d-5e6f.dynamodb.region.vpce.amazonaws.com`)。

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

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

## Amazon VPC エンドポイントの作成
<a name="ddb-creating-vpc"></a>

Amazon VPC インターフェイスエンドポイントを作成するには、「AWS PrivateLink ガイド」**の「[Create an Amazon VPC endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)」を参照してください。

## Amazon DynamoDB インターフェイスエンドポイントへのアクセス
<a name="accessing-ddb-interface-endpoints"></a>

インターフェイスエンドポイントを作成すると、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` など)。このオプションは、アーキテクチャがアベイラビリティーゾーンを分離する場合に使用できます。例えば、障害を隔離し、リージョン間のデータ転送コストを削減するために使用できます。

**注記**  
最適な信頼性を実現するには、最低 3 つのアベイラビリティーゾーンにサービスをデプロイすることをお勧めします。

## DynamoDB インターフェイスエンドポイントから DynamoDB テーブルおよびコントロール API オペレーションへのアクセス
<a name="accessing-tables-apis-from-interface-endpoints"></a>

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

### AWS CLI の例
<a name="privatelink-ddb-aws-cli-examples"></a>

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

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

```
aws ec2 create-vpc-endpoint \
--region us-east-1 \
--service-name com.amazonaws.us-east-1.dynamodb \
--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 の例
<a name="privatelink-ddb-aws-sdk-examples"></a>

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 を使用して DynamoDB テーブルにアクセスする**  
次の例では、リージョン 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 設定の更新
<a name="updating-on-premises-dns-config"></a>

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

### Amazon VPC 内のゲートウェイエンドポイントまたはインターネットゲートウェイは使用せず、インターフェイスエンドポイントを使用して DynamoDB にアクセスする
<a name="using-interface-endpoints"></a>

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

![\[インターフェイスエンドポイントと AWS PrivateLink を使用した、オンプレミスアプリケーションと Amazon VPC 内のアプリケーションから DynamoDB へのアクセスを示すデータフロー図。\]](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/PrivateLink-interfaceEndpoints.png)


この図表は、以下を示すものです: 
+ オンプレミスネットワークでは、Direct Connect または Site-to-Site VPN を使用して Amazon VPC A に接続します。
+ オンプレミスと Amazon VPC A 内のアプリケーションでは、エンドポイント固有の DNS 名を使用して DynamoDB インターフェイスエンドポイントを介して DynamoDB にアクセスします。
+ オンプレミスのアプリケーションは、Direct Connect (または Site-to-Site VPN) を介して Amazon VPC 内のインターフェイスエンドポイントにデータを送信します。AWS PrivateLink は、AWS ネットワークを経由してデータをインターフェイスエンドポイントから DynamoDB に移動します。
+ Amazon VPC 内のアプリケーションも、インターフェイスエンドポイントにトラフィックを送信します。AWS PrivateLink は、AWS ネットワークを経由してデータをインターフェイスエンドポイントから DynamoDB に移動します。

### ゲートウェイエンドポイントとインターフェイスエンドポイントを同じ Amazon VPC で併用して DynamoDB にアクセスする
<a name="using-gateway-and-interface-endpoints"></a>

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

![\[ゲートウェイエンドポイントとインターフェイスエンドポイントを併用した DynamoDB へのアクセスを示すデータフロー図。\]](http://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/images/PL-Image2-InterfaceAndGatewayEP.png)


この図表は、以下を示すものです: 
+ オンプレミスのアプリケーションは、エンドポイント固有の DNS 名を使用して、Direct Connect (または Site-to-Site VPN) を介して Amazon VPC 内のインターフェイスエンドポイントにデータを送信します。AWS PrivateLink は、AWS ネットワークを経由してデータをインターフェイスエンドポイントから DynamoDB に移動します。
+ Amazon VPC 内のアプリケーションは、デフォルトのリージョン DynamoDB 名を使用し、AWS ネットワークを経由して DynamoDB に接続するゲートウェイエンドポイントにデータを送信します。

ゲートウェイエンドポイントの詳細については、「Amazon VPC ユーザーガイド」**の「[Gateway Amazon VPC endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html)」を参照してください。

## DynamoDB 用 Amazon VPC エンドポイントポリシーの作成
<a name="creating-vpc-endpoint-policy"></a>

Amazon VPC エンドポイントに DynamoDB へのアクセスをコントロールするエンドポイントポリシーをアタッチできます。このポリシーでは、以下の情報を指定します。
+ アクションを実行できる AWS Identity and Access Management (IAM) プリンシパル 
+ 実行可能なアクション 
+ アクションを実行できるリソース 

**Topics**
+ [例: Amazon VPC エンドポイントから特定のテーブルへのアクセスの制限](#privatelink-example-restrict-access-to-bucket)

### 例: Amazon VPC エンドポイントから特定のテーブルへのアクセスの制限
<a name="privatelink-example-restrict-access-to-bucket"></a>

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

------
#### [ JSON ]

****  

```
{
"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:us-east-1:111122223333:table/DOC-EXAMPLE-TABLE",
                   "arn:aws:dynamodb:us-east-1:111122223333:table/DOC-EXAMPLE-TABLE/*"]
    }
  ]
}
```

------

## AWS マネジメントコンソール プライベートアクセスでの DynamoDB エンドポイントの使用
<a name="ddb-endpoints-private-access"></a>

[AWS マネジメントコンソール プライベートアクセス](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/console-private-access.html)の [DynamoDB コンソール](https://console.aws.amazon.com/dynamodb)で VPC エンドポイントを使用する場合は、DynamoDB と DynamoDB Streams の DNS 設定を設定する必要があります。

AWS マネジメントコンソール プライベートアクセスでアクセスできるように DynamoDB を設定するには、次の 2 つの VPC エンドポイントを作成する必要があります。
+ `com.amazonaws.<region>.dynamodb`
+ `com.amazonaws.<region>.dynamodb-streams`

VPC エンドポイントを作成する場合、Route53 コンソールに移動し、リージョンエンドポイント `dynamodb.us-east-1.amazonaws.com` を使用して DynamoDB のプライベートホストゾーンを作成します。

プライベートホストゾーンに次の 2 つのエイリアスレコードを作成します。
+ トラフィックを VPC エンドポイント `com.amazonaws.<region>.dynamodb` にルーティングする `dynamodb.<region>.amazonaws.com`。
+ トラフィックを VPC エンドポイント `com.amazonaws.<region>.dynamodb-streams` にルーティングする `streams.dynamodb.<region>.amazonaws.com`。