

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 配置 VPC 端点服务连接
<a name="vpc-connectivity"></a>

使用本节中的指南创建和配置使用 [VPC 终端节点服务连接](choose-xks-connectivity.md#xks-vpc-connectivity)的外部密钥存储所需的 AWS 资源和相关组件。此连接选项列出的资源是对[所有外部密钥存储所需资源](create-xks-keystore.md#xks-requirements)的补充。创建和配置所需资源后，您可以[创建外部密钥存储](create-xks-keystore.md)。

您可以在 Amazon VPC 中找到您的外部密钥存储代理，也可以在外部找到代理 AWS 并使用您的 VPC 终端节点服务进行通信。

在开始之前，[请确认您需要外部密钥存储](keystore-external.md#do-i-need-xks)。大多数客户都可以使用由密钥材料支持的 KMS AWS KMS 密钥。

**注意**  
VPC 端点服务连接所需的某些元素可能包含在您的外部密钥管理器中。此外，您的软件可能有其他配置要求。在创建和配置本节中的 AWS 资源之前，请查阅代理和密钥管理器文档。

**Topics**
+ [VPC 端点服务连接的要求](#xks-vpce-service-requirements)
+ [步骤 1：创建 Amazon VPC 和子网](#xks-create-vpc)
+ [步骤 2：创建目标组](#xks-target-group)
+ [步骤 3：创建网络负载均衡器](#xks-nlb)
+ [步骤 4：创建 VPC 端点服务](#xks-vpc-svc)
+ [步骤 5：验证私有 DNS 名称域](#xks-private-dns)
+ [步骤 6：授权 AWS KMS 连接 VPC 终端节点服务](#xks-vpc-authorize-kms)

## VPC 端点服务连接的要求
<a name="xks-vpce-service-requirements"></a>

如果您为外部密钥存储选择 VPC 端点服务连接，则需要以下资源。
+ 连接到外部密钥管理器的 Amazon VPC。它必须在两个不同的可用区中至少拥有两个私有[子网](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html)。

  您可以将现有 Amazon VPC 用于外部密钥存储，前提是此 VPC [符合与外部密钥存储一起使用的要求](#xks-vpc-requirements)。多个外部密钥存储可以共享一个 Amazon VPC，但每个外部密钥存储必须有自己的 VPC 端点服务和私有 DNS 名称。
+ [由 AWS PrivateLink提供支持的 Amazon VPC 端点服务](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)具有[网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)和[目标组](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html)。

  端点服务不能要求接受。此外，您必须将 AWS KMS 添加为允许的主体。这 AWS KMS 允许创建接口端点，以便它可以与您的外部密钥存储代理进行通信。
+ VPC 端点服务在其 AWS 区域中的唯一私有 DNS 名称。

  私有 DNS 名称必须是更高级别的公有域的子域。例如，如果私有 DNS 名称为 `myproxy-private.xks.example.com`，则其必须是公有域（例如 `xks.example.com` 或 `example.com`）的子域。

  您必须针对私有 DNS 名称的 DNS 域[验证所有权](#xks-private-dns)。
+ 由[受支持的公有证书颁发机构](https://github.com/aws/aws-kms-xksproxy-api-spec/blob/main/TrustedCertificateAuthorities)为您的外部密钥存储代理颁发的 TLS 证书。

  TLS 证书上的主题通用名称（CN）必须与私有 DNS 名称相匹配。例如，若私有 DNS 名称为 `myproxy-private.xks.example.com`，则 TLS 证书上的 CN 必须为 `myproxy-private.xks.example.com` 或 `*.xks.example.com`。
+ 为了最大限度地减少网络延迟，请在最接近[外部密钥管理器的](keystore-external.md#concept-ekm)[支持 AWS 区域](keystore-external.md#xks-regions)环境中创建 AWS 组件。如果可行，请选择网络往返时间（RTT）不超过 35 毫秒的区域。

有关外部密钥存储的所有要求，请参阅 [Assemble the prerequisites](create-xks-keystore.md#xks-requirements)（汇编先决条件）。

## 步骤 1：创建 Amazon VPC 和子网
<a name="xks-create-vpc"></a>

VPC 端点服务连接需要连接到外部密钥管理器的 Amazon VPC，该管理器至少拥有两个私有子网。您可以创建 Amazon VPC 或使用满足外部密钥存储要求的现有 Amazon VPC。有关创建新 VPC 的帮助，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[创建 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC)。

### Amazon VPC 的要求
<a name="xks-vpc-requirements"></a>

Amazon VPC 端点服务必须具有以下属性才能使用外部密钥存储。
+ 必须与您的外部密钥存储位于[受支持的区域](keystore-external.md#xks-regions)中。
+ 需要至少两个私有子网，每个子网均位于不同的可用区内。
+ Amazon VPC 的私有 IP 地址范围不得与托管[外部密钥管理器](keystore-external.md#concept-ekm)的数据中心的私有 IP 地址范围重叠。
+ 所有组件都必须使用 IPv4。

您可以通过多种方式将 Amazon VPC 连接到外部密钥存储代理。选择能满足性能和安全需求的选项。有关列表，请参阅[将您的 VPC 连接到其他网络](https://docs.aws.amazon.com/vpc/latest/userguide/extend-intro.html)和 [Network-to-Amazon VPC 连接选项](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)。有关详细信息，请参阅 [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/](https://docs.aws.amazon.com/vpn/latest/s2svpn/)。

### 为外部密钥存储创建 Amazon VPC
<a name="xks-vpc-create"></a>

使用下面的说明为外部密钥存储创建 Amazon VPC。仅当您选择 [VPC 端点服务连接](choose-xks-connectivity.md)选项时，才需要 Amazon VPC。您可以使用满足外部密钥存储要求的现有 Amazon VPC。

按照[创建 VPC、子网和其他 VPC 资源](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#create-vpc-and-other-resources)主题中的说明使用以下必需值。对于其他字段，请接受默认值并按要求提供名称。


| Field | Value | 
| --- | --- | 
| IPv4 CIDR 块 | 输入 VPC 的 IP 地址。Amazon VPC 的私有 IP 地址范围不得与托管[外部密钥管理器](keystore-external.md#concept-ekm)的数据中心的私有 IP 地址范围重叠。 | 
| 可用区数量 (AZs) | 2 或更多 | 
| 公有子网的数量 |  不需要任何内容（0）  | 
| 私有子网的数量 | 每个 AZ 一个 | 
| NAT 网关 | 不需要任何内容。 | 
| VPC 端点 | 不需要任何内容。 | 
| 启用 DNS 主机名 | 是 | 
| 启用 DNS 解析 | 是 | 

请务必测试您的 VPC 通信。例如，如果您的外部密钥存储代理不在 Amazon VPC 中，请在 Amazon VPC 中创建 Amazon EC2 实例，验证 Amazon VPC 是否可以与外部密钥存储代理通信。

### 将 VPC 连接到外部密钥管理器
<a name="xks-vpc-to-ekm"></a>

使用 Amazon VPC 支持的任何[网络连接选项](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)将 VPC 连接到托管外部密钥管理器的数据中心。确保 VPC（或外部密钥存储代理，如果在 VPC 中）中的 Amazon EC2 实例可以与数据中心和外部密钥管理器通信。

## 步骤 2：创建目标组
<a name="xks-target-group"></a>

在创建所需的 VPC 端点服务之前，创建其必需的组件、网络负载均衡器（NLB）和目标组。网络负载均衡器（NLB）在多个运行状况良好的目标之间分配请求，其中任何一个目标都可以为请求提供服务。在此步骤中，您将为外部密钥存储代理创建至少具有两台主机的目标组，并将您的 IP 地址注册到目标组。

使用以下必填值，按照[配置目标组](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html#configure-target-group)主题中的说明使用以下必需值。对于其他字段，请接受默认值并按要求提供名称。


| Field | Value | 
| --- | --- | 
| Target type | IP 地址 | 
| 协议 | TCP | 
| 端口： |  443  | 
| IP 地址类型 | IPv4 | 
| VPC | 选择 VPC，您将在其中为外部密钥存储创建 VPC 端点服务。 | 
| 运行状况检查协议和路径 | 运行状况检查协议和路径将与外部密钥存储代理配置不同。请参阅外部密钥管理器或外部密钥存储代理的文档。若要为您的目标组配置运行状况检查，请参阅《网络负载均衡器的弹性负载均衡用户指南》中的[目标组的运行状况检查](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-health-checks.html)。 | 
| Network | 其他私有 IP 地址 | 
| IPv4 地址 | 外部密钥存储代理的私有地址 | 
| 端口 | 443 | 

## 步骤 3：创建网络负载均衡器
<a name="xks-nlb"></a>

网络负载均衡器将网络流量（包括从 AWS KMS 到外部密钥存储代理的请求）分配到配置的目标。

按照[配置负载均衡器和侦听器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html#configure-load-balancer)主题中的说明配置和添加侦听器，并使用以下必需值创建负载均衡器。对于其他字段，请接受默认值并按要求提供名称。


| Field | Value | 
| --- | --- | 
| Scheme | Internal | 
| IP 地址类型 | IPv4 | 
| 网络映射 |  选择 VPC，您将在其中为外部密钥存储创建 VPC 端点服务。  | 
| Mapping | 选择您为 VPC 子网配置的两个可用区（至少两个）。验证子网名称和私有 IP 地址。 | 
| 协议 | TCP | 
| 端口： | 443 | 
| 默认操作：转发至 | 选择网络负载均衡器的[目标组](#xks-target-group)。 | 

## 步骤 4：创建 VPC 端点服务
<a name="xks-vpc-svc"></a>

通常，您创建到服务的端点。但是，当您创建 VPC 终端节点服务时，您就是提供者，并为您的服务 AWS KMS 创建终端节点。对于外部密钥存储，使用您在上一个步骤中创建的网络负载均衡器创建 VPC 端点服务。VPC 终端节点服务可以与您的外部密钥存储库 AWS 账户 相同，也可以位于不同的地方 AWS 账户。

多个外部密钥存储可以共享一个 Amazon VPC，但每个外部密钥存储必须有自己的 VPC 端点服务和私有 DNS 名称。

按照[创建端点服务](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html#create-endpoint-service-nlb)主题中的说明创建具有以下必需值的 VPC 端点服务。对于其他字段，请接受默认值并按要求提供名称。


| Field | Value | 
| --- | --- | 
| 负载均衡器类型 | Network | 
| 可用的负载均衡器 | 选择您在之前的步骤中创建的[网络负载均衡器](#xks-nlb)。如果新的负载均衡器未出现在列表中，请验证其状态是否为活动。负载均衡器状态可能需要几分钟才能从预置中变为活动。 | 
| 需要接受 | False。取消选中复选框。*不需要接受*。 AWS KMS 未经手动接受，无法连接到 VPC 终端节点服务。如果需要接受，则[创建外部密钥存储](create-xks-keystore.md)的尝试会失败，并出现 `XksProxyInvalidConfigurationException` 异常。 | 
| 启用私有 DNS 名称 | 将私有 DNS 名称与服务关联 | 
| 私有 DNS 名称 | 输入在其 AWS 区域中唯一的私有 DNS 名称。私有 DNS 名称必须是更高级别的公有域的子域。例如，如果私有 DNS 名称为 `myproxy-private.xks.example.com`，则其必须是公有域（例如 `xks.example.com` 或 `example.com`）的子域。此私有 DNS 名称必须与在外部密钥存储代理上配置的 TLS 证书中的主题公用名（CN）相匹配。例如，若私有 DNS 名称为 `myproxy-private.xks.example.com`，则 TLS 证书上的 CN 必须为 `myproxy-private.xks.example.com` 或 `*.xks.example.com`。如果证书和私有 DNS 名称不匹配，则将外部密钥存储连接到其外部密钥存储代理的尝试会失败，连接错误代码为 `XKS_PROXY_INVALID_TLS_CONFIGURATION`。有关更多信息，请参阅 [常规配置错误](xks-troubleshooting.md#fix-xks-gen-configuration)。 | 
| 支持的 IP 地址类型 | IPv4 | 

## 步骤 5：验证私有 DNS 名称域
<a name="xks-private-dns"></a>

创建 VPC 端点服务时，其域验证状态为 `pendingVerification`。使用 VPC 端点服务创建外部密钥存储之前，此状态必须为 `verified`。若要验证您是否拥有与私有 DNS 名称关联的域，您必须在公有 DNS 服务器中创建 TXT 记录。

例如，如果您的 VPC 终端节点服务的私有 DNS 名称为`myproxy-private.xks.example.com`，则必须在公共域（例如`xks.example.com`或）中创建 TXT 记录`example.com`，以公有域为准。 AWS PrivateLink 先打开 TXT 记录，`xks.example.com`然后再打开`example.com`。

**提示**  
添加 TXT 记录后，**Domain verification status**（域验证状态）值可能需要几分钟才能从 `pendingVerification` 变为 `verify`。

首先，使用以下任一方法找到域的验证状态。有效值包括 `verified`、`pendingVerification` 和 `failed`。
+ 在 [Amazon VPC 控制台](https://console.aws.amazon.com/vpc)中，选择 **Endpoint services**（端点服务），然后选择您的端点服务。在详细信息窗格中，查看 **Domain verification status**（域验证状态）。
+ 使用 [DescribeVpcEndpointServiceConfigurations](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcEndpointServiceConfigurations.html) 操作。`State` 值在 `ServiceConfigurations.PrivateDnsNameConfiguration.State` 字段中。

如果验证状态不是 `verified`，请按照 [Domain ownership verification](https://docs.aws.amazon.com/vpc/latest/privatelink/manage-dns-names.html#verify-domain-ownership)（域所有权验证）主题中的说明将 TXT 记录添加到域的 DNS 服务器并验证 TXT 记录是否已发布。然后再次检查您的验证状态。

您无需为私有 DNS 域名创建 A 记录。在 AWS KMS 为您的 VPC 终端节点服务创建接口终端节点时， AWS PrivateLink 会自动创建一个托管区域，其中包含所需的 AWS KMS VPC 中私有域名的 A 记录。对于具有 VPC 端点服务连接的外部密钥存储，将[外部密钥存储连接到](xks-connect-disconnect.md)其外部密钥存储代理时，就会发生这种情况。

## 步骤 6：授权 AWS KMS 连接 VPC 终端节点服务
<a name="xks-vpc-authorize-kms"></a>

请参阅以下过程来管理您的 Amazon VPC 端点服务权限。其中的每个步骤都取决于您的外部密钥存储、VPC 端点服务以及 AWS 账户之间的连接和配置。

------
#### [ Same AWS 账户 ]

如果您的 VPC 终端节点服务归您的外部密钥存储库所有，则必须将其添加 AWS KMS 到 VPC 终端节点服务的**允许委托人**列表中。 AWS 账户 这 AWS KMS 允许为您的 VPC 终端节点服务创建接口终端节点。如果 AWS KMS 不是允许的主体，则尝试创建外部密钥存储将失败，但会出现异`XksProxyVpcEndpointServiceNotFoundException`常。

按照《AWS PrivateLink 指南》**中[管理权限](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)主题中的说明进行操作。使用以下必需值。


| Field | Value | 
| --- | --- | 
| AWS KMS ARN | cks.kms.<region>.amazonaws.com例如，`cks.kms.us-east-1.amazonaws.com` | 

------
#### [ Cross AWS 账户 ]

如果您的 VPC 终端节点服务归其他人所有， AWS 账户 则必须将两者 AWS KMS 以及您的账户添加到 “**允许委托人” 列表中。**这允许 AWS KMS 您的外部密钥存储库为您的 VPC 终端节点服务创建接口终端节点。如果 AWS KMS 不是允许的主体，则创建外部密钥存储的尝试将失败，并出现 `XksProxyVpcEndpointServiceNotFoundException` 异常。您需要提供外部密钥存储库所在的 AWS 账户 ARN。

按照《AWS PrivateLink 指南》**中[管理权限](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)主题中的说明进行操作。使用以下必需值。


| Field | Value | 
| --- | --- | 
| AWS KMS ARN | cks.kms.<region>.amazonaws.com例如，`cks.kms.us-east-1.amazonaws.com` | 
| AWS 账户 ARN | arn:aws:iam::111122223333:role/role\$1name例如，`arn:aws:iam::123456789012:role/cks_role` | 

------

**下一步**：[创建外部密钥存储](create-xks-keystore.md)