

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

# 外部密钥存储中的 KMS 密钥
<a name="keystore-external-key-manage"></a>

若要在外部密钥存储中创建、查看、管理、使用和计划删除 KMS 密钥，您使用的过程与用于其他 KMS 密钥的过程非常相似。但是，在外部密钥存储中创建 KMS 密钥时，您需要指定[外部密钥存储](keystore-external.md#concept-external-key-store)和[外部密钥](keystore-external.md#concept-external-key)。在外部密钥存储中使用 KMS 密钥时，外部密钥管理器将使用指定的外部密钥执行[加密和解密操作](keystore-external.md#xks-how-it-works)。

Amazon KMS 无法在您的外部密钥管理器中创建、查看、更新或删除任何加密密钥。 Amazon KMS 永远不要直接访问您的外部密钥管理器或任何外部密钥。所有加密操作请求均由您的[外部密钥存储代理](keystore-external.md#concept-xks-proxy)调解。若要在外部密钥存储中使用 KMS 密钥，必须先将托管 KMS 密钥的外部密钥存储[连接](xks-connect-disconnect.md)到其外部密钥存储代理。

**支持的功能**  
除了此部分中讨论的过程之外，您还可以使用外部密钥存储中的 KMS 密钥执行下列操作：  
+ 使用[密钥策略](key-policies.md)、[IAM policy](iam-policies.md) 和[授权](grants.md)以控制对 KMS 密钥的访问。
+ [启用和禁用](enabling-keys.md) KMS 密钥。这些操作不会影响外部密钥管理器中的外部密钥。
+ 分配[标签](tagging-keys.md)并创建[别名](kms-alias.md)，然后使用[基于属性的访问权限控制](abac.md)（ABAC）授予对 KMS 密钥的访问权限。
+ 使用 KMS 密钥执行以下加密操作：
  + [Encrypt](https://docs.amazonaws.cn/kms/latest/APIReference/API_Encrypt.html)
  + [Decrypt](https://docs.amazonaws.cn/kms/latest/APIReference/API_Decrypt.html)
  + [GenerateDataKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKey.html)
  + [GenerateDataKeyWithoutPlaintext](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
  + [ReEncrypt](https://docs.amazonaws.cn/kms/latest/APIReference/API_ReEncrypt.html)

  自定义密钥存储库*不*支持生成非对称数据密钥对[GenerateDataKeyPair](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyPair.html)和[GenerateDataKeyPairWithoutPlaintext](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)的操作。
+ 将 KMS 密钥和[与 Amazon KMS集成的Amazon Web Services 服务](https://www.amazonaws.cn/kms/features/#AWS_Service_Integration) 结合使用并支持[客户托管密钥](concepts.md#customer-mgn-key)。

**不支持的功能**  
+ 外部密钥存储仅支持[对称加密 KMS 密钥](symm-asymm-choose-key-spec.md#symmetric-cmks)。您无法在外部密钥存储中创建 HMAC KMS 密钥或非对称 KMS 密钥。
+ [GenerateDataKeyPair](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyPair.html)外部[GenerateDataKeyPairWithoutPlaintext](https://docs.amazonaws.cn/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)密钥存储库中的 KMS 密钥不支持和。
+ 您不能使用[AWS::KMS::Key Amazon CloudFormation 模板](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html)在外部密钥存储中创建外部密钥存储或 KMS 密钥。
+ 外部密钥存储不支持[多区域密钥](multi-region-keys-overview.md)。
+ 外部密钥存储不支持拥有[导入密钥材料](importing-keys.md)的 KMS 密钥。
+ 外部密钥存储中的 KMS 密钥不支持[自动密钥轮换](rotate-keys.md)。

**在外部密钥存储中使用 KMS 密钥**  
在请求中使用 KMS 密钥时，请通过[密钥 ID、密钥 ARN、别名或别名 ARN](concepts.md#key-id) 识别 KMS 密钥。您无需指定外部密钥存储。响应包含为任何对称加密 KMS 密钥返回的相同字段。但是，在外部密钥存储中使用 KMS 密钥时，外部密钥管理器将使用与 KMS 密钥关联的外部密钥执行加密和解密操作。  
[为确保由外部密钥存储库中的 KMS 密钥加密的密文至少与使用标准 KMS 密钥加密的任何密文一样安全， Amazon KMS 请使用双重加密。](keystore-external.md#concept-double-encryption)首先 Amazon KMS 使用 Amazon KMS 密钥材料对数据进行加密。然后，外部密钥管理器使用 KMS 密钥的外部密钥对其进行加密。若要解密双重加密的加密文字，首先由外部密钥管理器使用 KMS 密钥的外部密钥解密加密文字。然后 Amazon KMS 使用 KMS 密钥的密 Amazon KMS 钥材料对其进行解密。  
要做到这一点，必须满足以下条件。  
+ KMS 密钥的[密钥状态](key-state.md)必须为 `Enabled`。要查找密钥**状态**，请参阅[Amazon KMS 控制台](finding-keys.md#viewing-console-details)上客户托管密钥的状态`KeyState`字段或[DescribeKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_DescribeKey.html)响应中的字段。
+ 托管 KMS 密钥的外部密钥存储必须连接到其[外部密钥存储代理](keystore-external.md#concept-xks-proxy)，也就是说，外部密钥存储的[连接状态](xks-connect-disconnect.md#xks-connection-state)必须为 `CONNECTED`。

  您可以在 Amazon KMS 控制台的**外部密钥存储**页面或[DescribeCustomKeyStores](https://docs.amazonaws.cn/kms/latest/APIReference/API_DescribeCustomKeyStores.html)响应中查看连接状态。外部密钥存储的连接状态也显示在 Amazon KMS 控制台中 KMS 密钥的详细信息页面上。在详细信息页面上，选择 **Cryptographic configuration**（加密配置）选项卡，然后查看 **Custom key store**（自定义密钥存储）部分中的 **Connection state**（连接状态）字段。

  如果连接状态为 `DISCONNECTED`，则必须先将其连接。如果连接状态为 `FAILED`，则必须解决问题，断开外部密钥存储的连接，再将其连接。有关说明，请参阅[连接和断开外部密钥存储](xks-connect-disconnect.md)。
+ 外部密钥存储代理必须能够找到外部密钥。
+ 必须启用外部密钥并且必须执行加密和解密操作。

  外部密钥的状态独立于 KMS 密钥，并且不受 KMS 密钥的[密钥状态](key-state.md)变化影响，包括启用和禁用 KMS 密钥。同样，禁用或删除外部密钥不会更改 KMS 密钥的密钥状态，但使用关联的 KMS 密钥执行的加密操作将失败。
如果不满足这些条件，则加密操作将失败并 Amazon KMS 返回`KMSInvalidStateException`异常。您可能需要[重新连接外部密钥存储](xks-connect-disconnect.md)或使用外部密钥管理器工具来重新配置或修复外部密钥。有关其他帮助，请参阅[排查外部密钥存储的问题](xks-troubleshooting.md)。  
在外部密钥存储中使用 KMS 密钥时，请注意每个外部密钥存储中的 KMS 密钥针对加密操作共享[自定义密钥存储请求限额](requests-per-second.md#rps-key-stores)。如果超过配额，则 Amazon KMS 返回 a `ThrottlingException`。有关自定义密钥存储请求限额的详细信息，请参阅 [自定义密钥存储请求限额](requests-per-second.md#rps-key-stores)。

**了解详情**  
+ 要了解有关外部密钥存储的更多信息，请参阅 [外部密钥存储](keystore-external.md)。
+ 要了解有关外部密钥存储中密钥材料的更多信息，请参阅 [外部密钥](keystore-external.md#concept-external-key)。
+ 要在外部密钥存储中创建 KMS 密钥，请参阅 [在外部密钥存储中创建 KMS 密钥](create-xks-keys.md)。
+ 要识别和查看外部密钥存储中的 KMS 密钥，请参阅 [识别外部密钥存储中的 KMS 密钥](identify-key-types.md#view-xks-key)。
+ 要了解删除外部密钥存储中的 KMS 密钥的特殊注意事项，请参阅[从外部密钥存储中删除 KMS 密钥](deleting-keys.md#delete-xks-key)。