

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

# 创建外部密钥存储
<a name="create-xks-keystore"></a>

您可以在每个 AWS 账户 和区域中创建一个或多个外部密钥存储库。每个外部密钥存储都必须与外部密钥管理器相关联 AWS，以及用于调解外部密钥管理器之间 AWS KMS 通信的外部密钥存储代理（XKS 代理）。有关更多信息，请参阅 [选择外部密钥存储代理连接选项](choose-xks-connectivity.md)。在开始之前，[请确认您需要外部密钥存储](keystore-external.md#do-i-need-xks)。大多数客户都可以使用由密钥材料支持的 KMS AWS KMS 密钥。

**提示**  
一些外部密钥管理器为创建外部密钥存储提供了更简单的方法。有关详细信息，请参阅外部密钥管理器的文档。

在创建外部密钥存储之前，您需要[汇编先决条件](#xks-requirements)。在创建过程中，您要指定外部密钥存储的属性。最重要的是，您需要指明您的外部密钥存储是 AWS KMS 使用[公共终端节点](choose-xks-connectivity.md#xks-connectivity-public-endpoint)还是 [VPC 终端节点服务](choose-xks-connectivity.md#xks-vpc-connectivity)来连接到其外部密钥存储代理。您还可以指定连接详细信息，包括代理的 URI 端点以及该代理端点中向代理 AWS KMS 发送 API 请求的路径。

**注意事项**
+ KMS 无法 IPv6 与外部密钥存储库进行通信。
+  如果您使用公共终端节点连接，请确保它 AWS KMS 可以使用 HTTPS 连接通过互联网与您的代理进行通信。这包括在外部密钥存储代理上配置 TLS，并确保与代理之间的 AWS KMS 任何防火墙都允许代理上进出端口 443 的 IPv4 流量。在创建具有公共端点连接的外部密钥存储时，通过向外部密钥存储代理发送状态请求来 AWS KMS 测试连接。此测试会验证端点是否可访问，以及外部密钥存储代理是否会接受使用[外部密钥存储代理身份验证凭证](keystore-external.md#concept-xks-credential)签名的请求。如果此测试请求失败，则创建外部密钥存储的操作将失败。
+ 如果使用 VPC 端点服务连接，请确保网络负载均衡器、私有 DNS 名称和 VPC 端点服务配置正确且可运行。如果外部密钥存储代理不在 VPC 中，则需要确保 VPC 终端节点服务可以与外部密钥存储代理通信。 （在将[外部密钥存储库连接到其外部密钥存储](xks-connect-disconnect.md)代理时AWS KMS 测试 VPC 终端节点服务的连接。）
+ AWS KMS 记录 [Amazon CloudWatch 指标和维度](monitoring-cloudwatch.md#kms-metrics)，尤其是外部密钥存储的指标和维度。基于其中一些指标的监控图表显示在每个外部密钥存储的 AWS KMS 控制台中。我们强烈建议您使用这些指标创建监控外部密钥存储的警报。这些警报会在发生性能和操作问题之前提醒您注意相关问题的早期迹象。有关说明，请参阅[监控外部密钥存储](xks-monitoring.md)。
+ 外部密钥存储受[资源限额](resource-limits.md#cks-resource-quota)的限制。在外部密钥存储中使用 KMS 密钥受[请求限额](requests-per-second.md#rps-key-stores)的限制。在设计外部密钥存储实现之前，请查看这些限额。

**注意**  
检查您的配置中是否存在可能使其无法运行的循环依赖关系。  
例如，如果您使用 AWS 资源创建外部密钥存储代理，请确保操作代理不需要通过该代理访问的外部密钥存储中有 KMS 密钥。

所有新的外部密钥存储都在断开连接的状态下创建。在外部密钥存储中创建 KMS 密钥之前，您必须[将其连接到](about-xks-connecting.md)外部密钥存储代理。要更改外部密钥存储的属性，请[编辑外部密钥存储设置](update-xks-keystore.md)。

**Topics**
+ [汇编先决条件](#xks-requirements)
+ [创建新的外部密钥存储](#create-xks)

## 汇编先决条件
<a name="xks-requirements"></a>

在创建外部密钥存储库之前，您需要组装所需的组件，包括用于支持[外部密钥存储的外部密钥管理器和](keystore-external.md#concept-ekm)将 AWS KMS 请求转换为[外部密钥管理器可以理解的格式的外部密钥存储代](keystore-external.md#concept-xks-proxy)理。

所有外部密钥存储都需要以下组件。除了这些组件，您还需要提供组件来支持自己选择的[外部密钥存储代理连接选项](choose-xks-connectivity.md)。

**提示**  
您的外部密钥管理器可能包含其中一些组件，或者可以为您配置这些组件。有关详细信息，请参阅外部密钥管理器的文档。  
如果您在 AWS KMS 控制台中创建外部密钥存储，则可以选择上传基于 JSON 的[代理配置文件，该文件](#proxy-configuration-file)指定代理 [URI 路径和代理](#require-path)[身份验证](keystore-external.md#concept-xks-credential)凭据。一些外部密钥存储代理会为您生成此文件。有关详细信息，请参阅外部密钥存储代理或外部密钥管理器的文档。

### 外部密钥管理器
<a name="require-ekm"></a>

每个外部密钥存储都需要至少一个[外部密钥管理器](keystore-external.md#concept-ekm)实例。这可以是实体或虚拟硬件安全模块（HSM），也可以是密钥管理软件。

您可以使用单个密钥管理器，但我们建议准备至少两个共享加密密钥的相关密钥管理器实例，以便实现冗余配置。外部密钥存储不需要独占使用外部密钥管理器。但是，外部密钥管理器必须有能力处理来自使用外部密钥存储中的 KMS 密钥来保护您的资源的 AWS 服务的预期频率的加密和解密请求。您的外部密钥管理器应配置为每秒最多处理 1800 个请求，并在 250 毫秒的超时限制内响应每个请求。我们建议您将外部密钥管理器放在附近， AWS 区域 以便网络往返时间 (RTT) 为 35 毫秒或更短。

如果外部密钥存储代理允许，则可以更改与外部密钥存储代理关联的外部密钥管理器，但新的外部密钥管理器必须是具有相同密钥材料的备份或快照。如果您与 KMS 密钥关联的外部密钥不再可供外部密钥存储代理使用，则 AWS KMS 无法解密使用 KMS 密钥加密的密文。

外部密钥存储代理必须可以访问外部密钥管理器。如果代理的[GetHealthStatus](keystore-external.md#xks-concepts)响应报告所有外部密钥管理器实例都是`Unavailable`，则所有创建外部密钥存储的尝试都将失败，并显示为[`XksProxyUriUnreachableException`](xks-troubleshooting.md#fix-xks-proxy)。

### 外部密钥存储代理
<a name="require-proxy"></a>

您必须指定符合 [AWS KMS 外部密钥存储代理 API 规范](https://github.com/aws/aws-kms-xksproxy-api-spec/)中设计要求的[外部密钥存储代理](keystore-external.md#concept-xks-proxy)（XKS 代理）。您可以开发或购买外部密钥存储代理，也可以使用外部密钥管理器提供或内置的外部密钥存储代理。 AWS KMS 建议将您的外部密钥存储代理配置为每秒最多处理 1800 个请求，并在每个请求的 250 毫秒超时内做出响应。我们建议您将外部密钥管理器放在附近， AWS 区域 以便网络往返时间 (RTT) 为 35 毫秒或更短。

您可以将外部密钥存储代理用于多个外部密钥存储，但每个外部密钥存储必须在其请求的外部密钥存储代理中具有唯一的 URI 端点和路径。

如果您使用的是 VPC 端点服务连接，则可以在 Amazon VPC 中找到您的外部密钥存储代理，但这不是必需的。您可以将代理定位在外部 AWS（例如私有数据中心），并且只能使用 VPC 终端节点服务与代理通信。

### 代理身份验证凭证
<a name="require-credential"></a>

要创建外部密钥存储，必须指定外部密钥存储代理身份验证凭证（`XksProxyAuthenticationCredential`）。

您必须在外部密钥存储代理 AWS KMS 上为建立[身份验证凭据](keystore-external.md#concept-xks-credential) (`XksProxyAuthenticationCredential`)。 AWS KMS 使用签[名版本 4 (Sigv4) 流程使用外部密钥存储代理身份验证凭据对代理的请求进行签名](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)，从而对代理进行身份验证。您可以在创建外部密钥存储时指定身份验证凭证，并且可以随时[对其进行更改](update-xks-keystore.md)。如果代理要轮换凭证，则务必更新外部密钥存储的凭证值。

代理身份验证凭证有两个部分。您必须为外部密钥存储提供这两部分。
+ 访问密钥 ID：标识秘密访问密钥。您能以明文形式提供此 ID。
+ 秘密访问密钥：凭证的秘密部分。 AWS KMS 在存储凭据之前对凭据中的私有访问密钥进行加密。

 AWS KMS 用于签署外部密钥存储代理请求的 Sigv4 凭据与您账户中任何委托人关联的任何 Sigv4 凭据无关。 AWS Identity and Access Management AWS 不要将任何 IAM SigV4 凭证重复用于外部密钥存储代理。

### 代理连接
<a name="require-connectivity"></a>

要创建外部密钥存储，您必须指定外部密钥存储代理连接选项（`XksProxyConnectivity`）。

AWS KMS 可以使用[公共终端节点](choose-xks-connectivity.md#xks-connectivity-public-endpoint)或 Amazon Virtu [al Private Cloud (Amazon VPC) 终端节点服务](choose-xks-connectivity.md#xks-vpc-connectivity)与您的外部密钥存储代理进行通信。公有端点虽然更易于配置和维护，但可能无法满足每次安装的安全要求。如果您选择 Amazon VPC 端点服务连接选项，则必须创建和维护所需的组件，包括在两个不同可用区内至少有两个子网的 Amazon VPC、具有网络负载均衡器和目标组的 VPC 端点服务，以及 VPC 端点服务的私有 DNS 名称。

您可以为外部密钥存储[更改代理连接选项](update-xks-keystore.md)。不过，您必须确保外部密钥存储中与 KMS 密钥相关的密钥材料持续可用。否则， AWS KMS 无法解密使用这些 KMS 密钥加密的任何密文。

有关确定哪种代理连接选项最适合外部密钥存储的帮助信息，请参阅 [选择外部密钥存储代理连接选项](choose-xks-connectivity.md)。有关创建和配置 VPC 端点服务连接的帮助信息，请参阅 [配置 VPC 端点服务连接](vpc-connectivity.md)。

### 代理 URI 端点
<a name="require-endpoint"></a>

要创建外部密钥存储库，必须指定用于向外部密钥存储代理发送请求的端点 (`XksProxyUriEndpoint`)。 AWS KMS 

协议必须是 HTTPS。 AWS KMS 通过端口 44 IPv4 3 进行通信。不要在代理 URI 端点值中指定端口。
+ [公有端点连接](choose-xks-connectivity.md#xks-connectivity-public-endpoint) – 为外部密钥存储代理指定公开可用的端点。在创建外部密钥存储之前，此端点必须可供访问。
+ [VPC 端点服务连接](choose-xks-connectivity.md#xks-vpc-connectivity) – 指定 `https://`，后接 VPC 端点服务的私有 DNS 名称。

在外部密钥存储代理上配置的 TLS 服务器证书必须与外部密钥存储代理 URI 端点中的域名相匹配，并且由支持外部密钥存储的证书颁发机构颁发。有关列表，请参阅 [Trusted Certificate Authorities](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`。

您可以[更改代理 URI 端点](update-xks-keystore.md)，但请确保外部密钥存储代理有权访问与外部密钥存储中的 KMS 密钥关联的密钥材料。否则， AWS KMS 无法解密使用这些 KMS 密钥加密的任何密文。

**唯一性要求**
+ 合并的代理 URI 端点（`XksProxyUriEndpoint`）和代理 URI 路径（`XksProxyUriPath`）值在 AWS 账户 和区域中必须具备唯一性。
+ 使用公有端点连接的外部密钥存储可以共享相同的代理 URI 端点，前提是这些外部密钥存储具有不同的代理 URI 路径值。
+ 具有公共终端节点连接的外部密钥存储不能使用与任何具有相同 VPC 终端节点服务连接的外部密钥存储相同的代理 URI 终端节点值 AWS 区域，即使密钥存储库位于不同的位置 AWS 账户。
+  每个具有 VPC 端点连接的外部密钥存储都必须有自己的私有 DNS 名称。代理 URI 终端节点（私有 DNS 名称）在 AWS 账户 和区域中必须是唯一的。

### 代理 URI 路径
<a name="require-path"></a>

要创建外部密钥存储库，您必须在外部密钥存储代理中指定[所需代理](keystore-external.md#concept-proxy-apis)的基本路径 APIs。该值必须以开头`/`且必须以/kms/xks/v1 结尾，其中`v1`表示外部密钥存储代理的 AWS KMS API 版本。此路径可以在必要元素之间包含可选前缀，例如 `/example-prefix/kms/xks/v1`。要找到此值，请参阅外部密钥存储代理的文档。

AWS KMS 将代理请求发送到由代理 URI 端点和代理 URI 路径串联所指定的地址。例如，如果代理 URI 端点是，`https://myproxy.xks.example.com`而代理 URI 路径是`/kms/xks/v1`，则将其代理 API 请求 AWS KMS 发送到`https://myproxy.xks.example.com/kms/xks/v1`。

您可以[更改代理 URI 路径](update-xks-keystore.md)，但要确保外部密钥存储代理有权访问与外部密钥存储中的 KMS 密钥关联的密钥材料。否则， AWS KMS 无法解密使用这些 KMS 密钥加密的任何密文。

**唯一性要求**
+ 合并的代理 URI 端点（`XksProxyUriEndpoint`）和代理 URI 路径（`XksProxyUriPath`）值在 AWS 账户 和区域中必须具备唯一性。

### VPC 终端节点服务
<a name="require-vpc-service-name"></a>

指定用于与外部密钥存储代理通信的 Amazon VPC 端点服务的名称。只有使用 VPC 端点服务连接的外部密钥存储才需要此组件。有关为外部密钥存储设置和配置 VPC 端点服务的帮助信息，请参阅 [配置 VPC 端点服务连接](vpc-connectivity.md)。

VPC 端点服务必须具有以下属性：
+ VPC 端点服务可与外部密钥存储位于同一或不同 AWS 账户 中。
  + VPC 终端节点服务必须与外部密钥存储库位于同一 AWS 区域 位置。
  + 如果 VPC 终端节点服务位于其他 VPC 终端节点服务中，则需要提供该服务的 AWS 账户 ID AWS 账户。
+ 其必须有至少连接到两个子网的网络负载均衡器（NLB），每个子网位于不同的可用区中。
+ VPC 终端节点服务的*允许委托人列表*必须包括该区域的 AWS KMS 服务委托人：`cks.kms.<region>.amazonaws.com`，例如`cks.kms.us-east-1.amazonaws.com`。
  + 如果您的 Amazon VPC 终端节点服务归拥有外部密钥存储库 (XKS) 以外 AWS 账户 的其他人所有，则还需要允许 XKS 访问该 VPC 终端节点服务。 AWS 账户 为此，请将 [XKS AWS 账户 ID 列为亚马逊 VPC 终端节点服务的委托人](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)。
+ 其不得要求接受连接请求。
+ 其必须在更高级别的公有域内具有私有 DNS 名称。例如，在 `xks.example.com` 公有域中，私有 DNS 名称可能为 myproxy-private.xks.example.com。

  使用 VPC 端点服务连接的外部密钥存储的私有 DNS 名称，在其 AWS 区域中必须具备唯一性。
+ 私有 DNS 名称域的[域验证状态](vpc-connectivity.md#xks-private-dns)必须为 `verified`。
+ 在外部密钥存储代理上配置的 TLS 服务器证书，必须指定可访问端点的私有 DNS 主机名。

**唯一性要求**
+ 具有 VPC 端点连接的外部密钥存储可以共享 `Amazon VPC`，但每个外部密钥存储必须有自己的 VPC 端点服务和私有 DNS 名称。

### 代理配置文件
<a name="proxy-configuration-file"></a>

*代理配置文件*是基于 JSON 的可选文件，其中包含外部密钥存储的[代理 URI 路径](#require-path)和[代理身份验证凭证](#require-credential)属性的值。在 AWS KMS 控制台中创建或[编辑外部密钥存储](update-xks-keystore.md)时，您可以上传代理配置文件来为外部密钥存储提供配置值。使用此文件可以避免键入和粘贴错误，并确保外部密钥存储中的值与外部密钥存储代理中的值相匹配。

代理配置文件由外部密钥存储代理生成。要了解外部密钥存储代理是否提供代理配置文件，请参阅您的外部密钥存储代理文档。

下面是具有虚拟值的格式正确的代理配置文件示例。

```
{
  "XksProxyUriPath": "/example-prefix/kms/xks/v1",
  "XksProxyAuthenticationCredential": {
    "AccessKeyId": "ABCDE12345670EXAMPLE",
    "RawSecretAccessKey": "0000EXAMPLEFA5FT0mCc3DrGUe2sti527BitkQ0Zr9MO9+vE="
  }
}
```

只有在 AWS KMS 控制台中创建或编辑外部密钥存储时，才能上传代理配置文件。您不能将其与[CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html)或[UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html)操作一起使用，但可以使用代理配置文件中的值来确保参数值正确无误。

## 创建新的外部密钥存储
<a name="create-xks"></a>

准备好必要的先决条件后，可以在 AWS KMS 控制台中或使用[CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html)操作创建新的外部密钥存储。

### 使用控制 AWS KMS 台
<a name="create-keystore-console"></a>

在创建外部密钥存储之前，请[选择代理连接类型](choose-xks-connectivity.md)，并确保已创建和配置了所有[必需组件](#xks-requirements)。如果需要查找任何所需值的帮助信息，请查阅外部密钥存储代理或密钥管理软件的文档。

**注意**  
在中创建外部密钥存储时 AWS 管理控制台，可以上传基于 JSON 的*代理配置文件*，其中包含代理 [URI 路径和代理](#require-path)[身份验证](#require-credential)凭据的值。一些代理会为您生成此文件，但其并非必要项目。

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择 **Custom key stores**（自定义密钥存储）、**External key stores**（外部密钥存储）。

1. 选择 **Create external key store**（创建外部密钥存储）。

1. 为外部密钥存储输入易记名称。该名称在您账户的所有外部密钥存储中必须具备唯一性。
**重要**  
不要在此字段中包含机密或敏感信息。此字段可能会以纯文本形式显示在 CloudTrail 日志和其他输出中。

1. 选择[代理连接](#require-connectivity)类型。

   您的代理连接选择决定了外部密钥存储代理[所需的组件](#xks-requirements)。有关做出此选择的帮助信息，请参阅 [选择外部密钥存储代理连接选项](choose-xks-connectivity.md)。

   1. 如果您的 VPC 端点服务位于不同的 AWS 账户中，请选择**跨账户 VPC 端点服务**。然后在 VPC 终端节点**服务所有者账户 AWS 账户 ID 字段中输入 VPC 终端节点所有者的 ID**。

   1. 选择或输入此外部密钥存储的 [VPC 端点服务](#require-vpc-service-name)的名称。此步骤仅在外部密钥存储代理连接类型为 **VPC 端点服务**时出现。

      VPC 终端节点服务及其 VPCs 必须满足外部密钥存储的要求。有关更多信息，请参阅 [汇编先决条件](#xks-requirements)。

1. 选择或输入此外部密钥存储的 [VPC 端点服务](#require-vpc-service-name)的名称。此步骤仅在外部密钥存储代理连接类型为 **VPC 端点服务**时出现。

   VPC 终端节点服务及其 VPCs 必须满足外部密钥存储的要求。有关更多信息，请参阅 [汇编先决条件](#xks-requirements)。

1. 输入[代理 URI 端点](#require-endpoint)。协议必须是 HTTPS。 AWS KMS 通过端口 44 IPv4 3 进行通信。不要在代理 URI 端点值中指定端口。

   如果 AWS KMS 识别出您在上一步中指定的 VPC 终端节点服务，它将为您填写此字段。

   若使用公有端点连接，请输入公开可用的端点 URI。若使用 VPC 端点连接，输入 `https://`，后接 VPC 端点服务的私有 DNS 名称。

1. 要输入[代理 URI 路径](#require-path)前缀和[代理身份验证凭证](#require-credential)的值，请上传代理配置文件或手动输入值。
   + 如果您有包含[代理 URI 路径](#require-path.title)和[代理身份验证凭证](#require-credential)值的可选[代理配置文件](#proxy-configuration-file)，请选择 **Upload configuration file**（上传配置文件）。然后按照步骤上传该文件。

     上传文件后，控制台会在可编辑字段中显示文件中的值。您可以立即更改值，也可以在创建外部密钥存储后[编辑这些值](update-xks-keystore.md)。

     要显示秘密访问密钥的值，请选择 **Show secret access key**（显示私有访问密钥）。
   + 如果您没有代理配置文件，则可以手动输入代理 URI 路径和代理身份验证凭证值。

     1. 如果没有代理配置文件，您可以手动输入代理 URI。控制台提供所需的**/kms/xks/v1** 值。

        如果[代理 URI 路径](#require-path)包含可选前缀，例如 `/example-prefix/kms/xks/v1` 中的 `example-prefix`，请在 **Proxy URI path prefix**（代理 URI 路径前缀）字段中输入该前缀。如若没有，则将字段留空。

     1. 如果没有代理配置文件，您可以手动输入[代理身份验证凭证](keystore-external.md#concept-xks-credential)。访问密钥 ID 和秘密访问密钥均为必填项。
        + 在 **Proxy credential: Access key ID**（代理凭证：访问密钥 ID）中，输入代理身份验证凭证的访问密钥 ID。访问密钥 ID 标识秘密访问密钥。
        + 在 **Proxy credential: Secret access key**（代理凭证：秘密访问密钥）中，输入代理身份验证凭证的秘密访问密钥。

        要显示秘密访问密钥的值，请选择 **Show secret access key**（显示私有访问密钥）。

        此过程不会设置或更改您在外部密钥存储代理上建立的身份验证凭证。其只是将这些值关联到外部密钥存储。有关设置、更改和轮换代理身份验证凭证的信息，请参阅外部密钥存储代理或密钥管理软件的文档。

        如果您的代理身份验证凭证发生变化，请[编辑外部密钥存储的凭证设置](update-xks-keystore.md)。

1. 选择 **Create external key store**（创建外部密钥存储）。

当该过程成功时，新的外部密钥存储将显示在账户和区域的外部密钥存储列表中。如果该过程失败，则会显示一条错误消息，描述问题并提供有关如何解决该问题的帮助。如果您需要更多帮助，请参阅[CreateKey 外部密钥错误](xks-troubleshooting.md#fix-external-key-create)。

**下一步**：不会自动连接新的外部密钥存储。必须先将外部密钥存储库[连接到其外部密钥存储代理服务器，然后才能在外部密钥存储](xks-connect-disconnect.md)库中进行创建 AWS KMS keys 。

### 使用 AWS KMS API
<a name="create-keystore-api"></a>

您可以使用该[CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html)操作来创建新的外部密钥存储库。如果需要查找所需参数值的帮助信息，请参阅外部密钥存储代理或密钥管理软件的文档。

**提示**  
使用 `CreateCustomKeyStore` 操作时，您无法上传[代理配置文件](#proxy-configuration-file)。不过，您可以使用代理配置文件中的值来确保参数值正确无误。

要创建外部密钥存储，`CreateCustomKeyStore` 操作需要以下参数值。
+ `CustomKeyStoreName` - 外部密钥存储的易记名称，该名称在账户中具备唯一性。
**重要**  
不要在此字段中包含机密或敏感信息。此字段可能会以纯文本形式显示在 CloudTrail 日志和其他输出中。
+ `CustomKeyStoreType` – 指定 `EXTERNAL_KEY_STORE`。
+ [`XksProxyConnectivity`](#require-connectivity) – 指定 `PUBLIC_ENDPOINT` 或 `VPC_ENDPOINT_SERVICE`。
+ [`XksProxyAuthenticationCredential`](keystore-external.md#concept-xks-credential) – 指定访问密钥 ID 和秘密访问密钥。
+ [`XksProxyUriEndpoint`](#require-endpoint) – AWS KMS 用于与外部密钥存储代理通信的端点。
+ [`XksProxyUriPath`](#require-path)— 代理内到代理的路径 APIs。
+ [`XksProxyVpcEndpointServiceName`](#require-vpc-service-name) – 仅当 `XksProxyConnectivity` 值为 `VPC_ENDPOINT_SERVICE` 时才需要。

**注意**  
如果您使用 AWS CLI 版本 1.0，请在指定带有 HTTP 或 HTTPS 值的参数（例如`XksProxyUriEndpoint`参数）之前运行以下命令。  

```
aws configure set cli_follow_urlparam false
```
否则， AWS CLI 版本 1.0 会将参数值替换为在该 URI 地址中找到的内容，从而导致以下错误：  

```
Error parsing parameter '--xks-proxy-uri-endpoint': Unable to retrieve 
https:// : received non 200 status code of 404
```

以下示例使用虚拟值。在运行命令之前，将虚拟值替换为外部密钥存储的有效值。

创建使用公有端点连接的外部密钥存储。

```
$ aws kms create-custom-key-store
        --custom-key-store-name ExampleExternalKeyStorePublic \
        --custom-key-store-type EXTERNAL_KEY_STORE \
        --xks-proxy-connectivity PUBLIC_ENDPOINT \
        --xks-proxy-uri-endpoint https://myproxy.xks.example.com \
        --xks-proxy-uri-path /kms/xks/v1 \
        --xks-proxy-authentication-credential AccessKeyId=<value>,RawSecretAccessKey=<value>
```

创建使用 VPC 端点服务连接的外部密钥存储。

```
$ aws kms create-custom-key-store
        --custom-key-store-name ExampleExternalKeyStoreVPC \
        --custom-key-store-type EXTERNAL_KEY_STORE \
        --xks-proxy-connectivity VPC_ENDPOINT_SERVICE \
        --xks-proxy-vpc-endpoint-service-name com.amazonaws.vpce.us-east-1.vpce-svc-example \
        --xks-proxy-uri-endpoint https://myproxy-private.xks.example.com \
        --xks-proxy-uri-path /kms/xks/v1 \
        --xks-proxy-authentication-credential AccessKeyId=<value>,RawSecretAccessKey=<value>
```

当此操作成功时，`CreateCustomKeyStore` 将返回自定义密钥存储 ID，如以下示例响应中所示。

```
{
    "CustomKeyStoreId": cks-1234567890abcdef0
}
```

如果操作失败，请更正异常指示的错误，然后重试。有关其他帮助，请参阅[排查外部密钥存储的问题](xks-troubleshooting.md)。

**下一步**：要使用外部密钥存储，请[将其连接到外部密钥存储代理](xks-connect-disconnect.md)。