

# 适用于 DynamoDB 的 Amazon PrivateLink
<a name="privatelink-interface-endpoints"></a>

借助适用于 DynamoDB 的 Amazon PrivateLink，您可以在 Virtual Private Cloud（Amazon VPC）中预置*接口 Amazon VPC 端点*（接口端点）。这些端点可从本地（通过 Amazon Direct Connect）或其它 Amazon Web Services 区域（通过 [Amazon VPC 对等连接](https://docs.amazonaws.cn/vpc/latest/peering/what-is-vpc-peering.html)）中的应用程序直接访问。使用 Amazon PrivateLink 和接口端点，您可以简化应用程序与 DynamoDB 之间的私有网络连接。

VPC 中的应用程序无需公有 IP 地址即可与 DynamoDB 接口 VPC 端点进行通信来执行 DynamoDB 操作。接口端点由一个或多个弹性网络接口（ENI）表示，这些接口是从 Amazon VPC 中的子网分配的私有 IP 地址。通过接口端点向 DynamoDB 发出的请求仍留在 Amazon 网络上。您还可以通过 Amazon Direct Connect 从本地部署应用程序访问 Amazon VPC 中的接口端点。有关如何将 Amazon VPC 与本地网络连接的更多信息，请参阅 [Amazon Direct Connect 用户指南](https://docs.amazonaws.cn/directconnect/latest/UserGuide/Welcome.html)。

有关接口端点的一般信息，请参阅《Amazon PrivateLink 指南》**中的[接口 Amazon VPC 端点（Amazon PrivateLink）](https://docs.amazonaws.cn/vpc/latest/privatelink/vpce-interface.html)。Amazon DynamoDB Streams 端点也支持 Amazon PrivateLink。有关更多信息，请参阅 [适用于 DynamoDB Streams 的 Amazon PrivateLink](privatelink-streams.md)。

**Topics**
+ [适用于 Amazon DynamoDB 的 Amazon VPC 端点类型](#types-of-vpc-endpoints-for-ddb)
+ [使用适用于 Amazon DynamoDB 的 Amazon PrivateLink 时的注意事项](#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)
+ [将 DynamoDB 端点与 Amazon Web Services 管理控制台私有访问结合使用](#ddb-endpoints-private-access)
+ [适用于 DynamoDB Streams 的 Amazon PrivateLink](privatelink-streams.md)
+ [使用适用于 DynamoDB Accelerator（DAX）的 Amazon PrivateLink](dax-private-link.md)

## 适用于 Amazon DynamoDB 的 Amazon VPC 端点类型
<a name="types-of-vpc-endpoints-for-ddb"></a>

您可以使用两种类型的 Amazon VPC 端点访问 Amazon DynamoDB：*网关端点*和*接口端点*（使用 Amazon PrivateLink）。*网关端点*是您在路由表中指定的网关，用于通过 Amazon 网络从 Amazon VPC 访问 DynamoDB。*接口端点*通过私有 IP 地址将请求从您的 Amazon VPC 内部、本地或其它 Amazon Web Services 区域中的 Amazon VPC，使用 Amazon VPC 对等连接或 Amazon Transit Gateway 路由到 DynamoDB，从而扩展网关端点的功能。有关更多信息，请参阅 [What is Amazon VPC peering?](https://docs.amazonaws.cn/vpc/latest/peering/what-is-vpc-peering.html) 和 [Transit Gateway 与 Amazon VPC 对等连接](https://docs.amazonaws.cn/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/transit-gateway-vs-vpc-peering.html)。

接口端点与网关端点兼容。如果您在 Amazon VPC 中有现有网关端点，则可以在同一 Amazon VPC 中使用这两种类型的端点。


|  适用于 DynamoDB 的网关端点  |  适用于 DynamoDB 的接口端点  | 
| --- | --- | 
|  在这两种情况下，您的网络流量仍保留在 Amazon 网络中。  | 
|  使用 Amazon DynamoDB 公有 IP 地址  |  使用 Amazon VPC 中的私有 IP 地址访问 Amazon DynamoDB  | 
|  不允许从本地访问  |  允许从本地访问  | 
|  不允许从其他 Amazon Web Services 区域访问  |  允许从另一个 Amazon Web Services 区域中的 Amazon VPC 端点使用 Amazon VPC 对等连接或 Amazon Transit Gateway 进行访问  | 
|  不计费  |  计费  | 

有关网关端点的更多信息，请参阅《Amazon PrivateLink 指南》**中的[网关 Amazon VPC 端点](https://docs.amazonaws.cn//vpc/latest/privatelink/vpce-gateway.html)。

## 使用适用于 Amazon DynamoDB 的 Amazon PrivateLink 时的注意事项
<a name="privatelink-considerations"></a>

适用于 Amazon DynamoDB 的 Amazon PrivateLink 的适用 Amazon VPC 注意事项。有关更多信息，请参阅《Amazon PrivateLink 指南》**中的[接口端点注意事项](https://docs.amazonaws.cn/vpc/latest/privatelink/vpce-interface.html#vpce-interface-limitations)和 [Amazon PrivateLink 限额](https://docs.amazonaws.cn/vpc/latest/privatelink/vpc-limits-endpoints.html)。此外，以下限制将适用：

适用于 Amazon DynamoDB 的 Amazon PrivateLink 不支持以下各项：
+ 传输层安全性协议（TLS）1.1
+ 私有域名系统和混合域名系统（DNS）服务

**重要**  
请勿创建私有托管区来覆盖 DynamoDB 端点 DNS 名称（例如 `dynamodb.region.amazonaws.com` 或 `*.region.amazonaws.com`），以便将流量路由到您的接口端点。DynamoDB DNS 配置可能会随着时间推移而发生变化。  
 自定义 DNS 覆盖与这些更改不兼容，可能导致请求意外通过公有 IP 地址而不是您的接口端点进行路由。  
 要通过 Amazon PrivateLink 访问 DynamoDB，请将您的客户端配置为直接使用 Amazon VPC 端点 URL（例如 `https://vpce-1a2b3c4d-5e6f.dynamodb.region.vpce.amazonaws.com`）。

对于您启用的每个 Amazon PrivateLink 端点，您每秒最多可以提交 5 万个请求。

**注意**  
Amazon PrivateLink 端点的网络连接超时不在 DynamoDB 错误响应的范围内，需要由连接到 PrivateLink 端点的应用程序适当进行处理。

## 创建 Amazon VPC 端点
<a name="ddb-creating-vpc"></a>

要创建 Amazon VPC 接口端点，请参阅《Amazon PrivateLink 指南》**中的[创建 Amazon VPC 端点](https://docs.amazonaws.cn/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)。

## 访问 Amazon DynamoDB 接口端点
<a name="accessing-ddb-interface-endpoints"></a>

创建接口端点时，DynamoDB 会生成两种特定于端点的 DynamoDB DNS 名称：*区域*和*可用区*。
+ *区域* DNS 名称包括唯一的 Amazon VPC 端点 ID、服务标识符、Amazon Web Services 区域和以其命名的 `vpce.amazonaws.com`。例如，对于 Amazon VPC 端点 ID `vpce-1a2b3c4d`，生成的 DNS 名称可能类似于 `vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com`。
+ *区域* DNS 名称包括可用区 – 例如 `vpce-1a2b3c4d-5e6f-us-east-1a.dynamodb.us-east-1.vpce.amazonaws.com`。如果您的架构隔离了可用区，则可以使用此选项。例如，您可以将其用于故障控制或降低区域数据传输成本。

**注意**  
为了实现最佳可靠性，我们建议将您的服务部署在至少三个可用区中。

## 从 DynamoDB 接口端点访问 DynamoDB 表并控制 API 操作
<a name="accessing-tables-apis-from-interface-endpoints"></a>

您可以使用 Amazon CLI 或 Amazon SDK 通过 DynamoDB 接口端点访问 DynamoDB 表并控制 API 操作。

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

要使用 Amazon 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 `vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com` 的 DNS 名称替换为您自己的信息。

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

### Amazon SDK 示例
<a name="privatelink-ddb-aws-sdk-examples"></a>

要在使用 Amazon 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 名称。

### 使用接口端点访问 DynamoDB，无需 Amazon VPC 中的网关端点和互联网网关
<a name="using-interface-endpoints"></a>

Amazon VPC 中的接口端点可以通过 Amazon 网络将 Amazon VPC 内的应用程序和本地应用程序路由到 DynamoDB，如下图所示。

![\[数据流程图，显示了使用接口端点和 Amazon PrivateLink 从本地和 Amazon VPC 内的应用程序对 DynamoDB 的访问。\]](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/PrivateLink-interfaceEndpoints.png)


下图说明了以下内容：
+ 您的本地网络使用 Amazon Direct Connect 连接到 Amazon VPC A。
+ 本地和 Amazon VPC A 中的应用程序使用特定于端点的 DNS 名称通过 DynamoDB 接口端点访问 DynamoDB。
+ 本地应用程序通过 Amazon Direct Connect 将数据发送到 Amazon VPC 中的接口端点。Amazon PrivateLink 通过 Amazon 网络将数据从接口端点移动到 DynamoDB。
+ Amazon VPC 中的应用程序还向接口端点发送通信。Amazon PrivateLink 通过 Amazon 网络将数据从接口端点移动到 DynamoDB。

### 在同一 Amazon VPC 中同时使用网关端点和接口端点来访问 DynamoDB
<a name="using-gateway-and-interface-endpoints"></a>

您可以创建接口端点并将现有网关端点保留在同一 Amazon VPC 中，如下图所示。通过这种方法，您可以允许 Amazon VPC 内的应用程序继续通过网关端点访问 DynamoDB，而无需付费。然后，只有您的本地应用程序才会使用接口端点访问 DynamoDB。要通过这种方式访问 DynamoDB，您必须更新本地应用程序，以使用适用于 DynamoDB 的特定于端点的 DNS 名称。

![\[数据流程图，显示了同时使用网关端点和接口端点访问 DynamoDB 的情况。\]](http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/images/PL-Image2-InterfaceAndGatewayEP.png)


下图说明了以下内容：
+ 本地应用程序使用特定于端点的 DNS 名称通过 Amazon Direct Connect 将数据发送到 Amazon VPC 中的接口端点。Amazon PrivateLink 通过 Amazon 网络将数据从接口端点移动到 DynamoDB。
+ 使用默认的区域 DynamoDB 名称，Amazon VPC 内应用程序会将数据发送到通过 Amazon 网络连接到 DynamoDB 的网关端点。

有关网关端点的更多信息，请参阅《Amazon VPC 用户指南》**中的[网关 Amazon VPC 端点](https://docs.amazonaws.cn/vpc/latest/privatelink/vpce-gateway.html)。

## 为 DynamoDB 创建 Amazon VPC 端点策略
<a name="creating-vpc-endpoint-policy"></a>

您可以为 Amazon VPC 端点附加控制对 DynamoDB 的访问的端点策略。该策略指定以下信息：
+ 可执行操作的 Amazon 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 表的端点策略。如果您的 Amazon VPC 中有使用表的其它 Amazon Web Services 服务，这种策略会非常有用。以下表策略限制为仅可访问 `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/*"]
    }
  ]
}
```

------

## 将 DynamoDB 端点与 Amazon Web Services 管理控制台私有访问结合使用
<a name="ddb-endpoints-private-access"></a>

当您在 [Amazon Web Services 管理控制台私有访问](https://docs.amazonaws.cn/awsconsolehelpdocs/latest/gsg/console-private-access.html)中将 VPC 端点与 [DynamoDB 控制台](https://console.amazonaws.cn/dynamodb)结合使用时，必须为 DynamoDB 和 DynamoDB Streams 设置 DNS 配置。

要将 DynamoDB 配置为可在 Amazon Web Services 管理控制台私有访问中访问，您必须创建以下两个 VPC 端点：
+ `com.amazonaws.<region>.dynamodb`
+ `com.amazonaws.<region>.dynamodb-streams`

创建 VPC 端点时，请导航到 Route53 控制台，然后使用区域端点 `dynamodb.us-east-1.amazonaws.com` 为 DynamoDB 创建私有托管区。

在私有托管区中创建以下两个别名记录：
+ `dynamodb.<region>.amazonaws.com` 将流量路由到 VPC 端点 `com.amazonaws.<region>.dynamodb`。
+ `streams.dynamodb.<region>.amazonaws.com` 将流量路由到 VPC 端点 `com.amazonaws.<region>.dynamodb-streams`。