

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

# AWS CloudHSM 钥匙库
<a name="keystore-cloudhsm"></a>

密 AWS CloudHSM 钥库是由集[AWS CloudHSM 群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/)支持的[自定义密钥存储库](key-store-overview.md#custom-key-store-overview)。在自定义密钥存储 AWS KMS key 中创建时， AWS KMS 会在您拥有和管理的 AWS CloudHSM 集群中为 KMS 密钥生成和存储不可提取的密钥材料。当您在自定义密钥存储中使用 KMS 密钥时，[加密操作](manage-cmk-keystore.md#use-cmk-keystore)将在集群 HSMs 中执行。此功能结合了的便利性和广泛集 AWS KMS 成，并增加了对 AWS CloudHSM 集群的控制 AWS 账户。

AWS KMS 为创建、使用和管理自定义密钥存储库提供全面的控制台和 API 支持。在自定义密钥存储中使用 KMS 密钥的方式，与使用任何 KMS 密钥相同。例如，您可以使用 KMS 密钥生成数据密钥和加密数据。您还可以将自定义密钥存储库中的 KMS 密钥与支持客户托管密钥的 AWS 服务一起使用。

**我是否需要自定义密钥存储？**

对于大多数用户来说，由 [FIPS 140-3 验证的加密模块](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4884)保护的默认 AWS KMS 密钥库可以满足他们的安全要求。无需添加额外的维护责任层或额外服务的依赖项。

但是，如果您的组织具有以下任何要求，则可能要考虑创建自定义密钥存储：
+ 在单租户 HSM 或您可以直接控制的 HSM 中，您有明确要求保护的密钥。
+ 您需要能够立即从中移除密钥材料 AWS KMS。
+ 您需要能够独立于 AWS KMS 或审核密钥的所有使用情况 AWS CloudTrail。

**自定义密钥存储如何工作？**

每个自定义密钥存储库都与您的集 AWS CloudHSM 群相关联 AWS 账户。当您将自定义密钥库连接到其集群时， AWS KMS 会创建支持该连接的网络基础架构。然后，它使用集群中[专用加密用户的](#concept-kmsuser)凭据登录到集群中的密钥 AWS CloudHSM 客户端。

您可以在中创建和管理您的自定义密钥存储， AWS KMS 并在中创建和管理您的 HSM 集群。 AWS CloudHSM在 AWS KMS 自定义密钥存储 AWS KMS keys 中创建时，可以在中查看和管理 KMS 密钥 AWS KMS。但是，您还可以在 AWS CloudHSM中查看和管理其密钥材料，就像您对集群中的其他密钥执行该操作一样。

![\[在自定义密钥存储中管理 KMS 密钥\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/kms-hsm-view.png)


您可以使用自定义密钥存储库 AWS KMS 中生成的[密钥材料创建对称加密 KMS](create-cmk-keystore.md) 密钥。然后，使用与在密钥库中用于密钥库中的 KMS 密钥相同的方法来查看和管理自定义密钥存储区中的 AWS KMS KMS 密钥。您可以使用 IAM 和密钥策略控制访问，创建标签和别名，启用和禁用 KMS 密钥，以及计划密钥删除。您可以使用 KMS 密钥进行[加密操作](manage-cmk-keystore.md#use-cmk-keystore)，并将其与集成的 AWS 服务一起 AWS KMS使用。

此外，您可以完全控制 AWS CloudHSM 集群，包括创建、删除 HSMs 和管理备份。您可以使用 AWS CloudHSM 客户端和支持的软件库来查看、审计和管理 KMS 密钥的密钥材料。当自定义密钥存储断开连接时， AWS KMS 无法对其进行访问，用户也无法使用自定义密钥存储区中的 KMS 密钥进行加密操作。增加的控制层使自定义密钥存储成为需要它的组织的强大解决方案。

**从何处开始？**

要创建和管理 AWS CloudHSM 密钥库，您可以使用 AWS KMS 和的功能 AWS CloudHSM。

1. 从... 开始 AWS CloudHSM。[创建活动 AWS CloudHSM 集群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/getting-started.html)或选择现有集群。集群在不同的可用区中必须至少有两个 HSMs 处于活动状态。然后，在该集群中为 AWS KMS创建一个[专用加密用户 (CU) 账户](#concept-kmsuser)。

1. 在中 AWS KMS，[创建与所选 AWS CloudHSM 集群关联的自定义密钥库](create-keystore.md)。 AWS KMS 提供了一个完整的管理界面，允许您创建、查看、编辑和删除自定义密钥库。

1. 准备好使用自定义密钥库时，请[将其连接到其关联的 AWS CloudHSM 集群](connect-keystore.md)。 AWS KMS 创建支持连接所需的网络基础架构。之后，它将使用专用加密用户账户凭证登录集群，以便它可以在集群中生成和管理密钥材料。

1. 现在，您可以[在自定义密钥存储中创建对称加密 KMS 密钥](create-cmk-keystore.md)。在创建 KMS 密钥时指定自定义密钥存储。

如果您在任何时候遇到困难，都可以在[对自定义密钥存储进行故障排除](fix-keystore.md)主题中查找帮助。如果您的问题未得到解答，请使用本指南的每页底部的反馈链接或在 [AWS Key Management Service 开发论坛](https://repost.aws/tags/TAMC3vcPOPTF-rPAHZVRj1PQ/aws-key-management-service)上发布问题。

**配额**

AWS KMS 允许每个 AWS 账户 和区域中最多有 [10 个自定义密钥存储库](resource-limits.md)，包括[AWS CloudHSM 密钥存储库](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html)和[外部密钥存储库](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html)，无论它们的连接状态如何。此外，在密钥[存储中使用 KMS 密钥](requests-per-second.md#rps-key-stores)还有 AWS KMS 请求配额。 AWS CloudHSM 

**定价**

有关 AWS KMS 自定义密钥存储库和客户托管密钥在自定义密钥存储库中的成本的信息，请参阅[AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。有关 AWS CloudHSM 集群和成本的信息 HSMs，请参阅[AWS CloudHSM 定价](https://aws.amazon.com/cloudhsm/pricing/)。<a name="cks-regions"></a>

**区域**

AWS KMS 支持除亚太地区（墨尔本）、中国（北京）、中国（宁夏）和欧洲（西班牙）以外的所有 AWS 区域 地区的 AWS CloudHSM 密钥存储。 AWS KMS 

**不支持的功能**

AWS KMS 不支持自定义密钥存储库中的以下功能。
+ [非对称 KMS 密钥](symmetric-asymmetric.md)
+ [HMAC KMS 密钥](hmac.md)
+ [具有导入密钥材料的 KMS 密钥](importing-keys.md)
+ [自动密钥轮换](rotate-keys.md)
+ [多区域密钥](multi-region-keys-overview.md)

## AWS CloudHSM 关键商店概念
<a name="hsm-key-store-concepts"></a>

本主题解释了 AWS CloudHSM 密钥库中使用的一些术语和概念。

### AWS CloudHSM 钥匙库
<a name="concept-hsm-key-store"></a>

*AWS CloudHSM 密钥库*是与您拥有和管理的 AWS CloudHSM 集群关联的[自定义密钥存储库](key-store-overview.md#custom-key-store-overview)。 AWS CloudHSM 集群由 [FIPS 140-2 或 FIPS 140-3](https://docs.aws.amazon.com/cloudhsm/latest/userguide/compliance.html) Level 3 认证的硬件安全模块 (HSMs) 提供支持。

在密钥库中创建 KMS AWS CloudHSM 密钥时， AWS KMS 会在关联的集群中生成 256 位永久性、不可导出的高级加密标准 (AES) 对称密钥。 AWS CloudHSM 这些密钥材料永远不会让你处于 HSMs 未加密状态。当您在密钥存储中使用 KMS AWS CloudHSM 密钥时，加密操作将在集群 HSMs 中执行。

AWS CloudHSM 密钥存储区将便捷而全面的密钥管理界面 AWS KMS 与您的 AWS CloudHSM 集群提供的其他控件相结合 AWS 账户。此集成功能允许您在中创建、管理和使用 KMS 密钥， AWS KMS 同时保持对存储密钥材料的完全控制，包括管理集群和备份。 HSMs HSMs您可以使用 AWS KMS 控制台和 APIs 来管理 AWS CloudHSM 密钥库及其 KMS 密钥。您还可以使用 AWS CloudHSM 控制台、 APIs、客户端软件和关联的软件库来管理关联的群集。

您可以[查看和管理](view-keystore.md)您的 AWS CloudHSM 密钥库，[编辑其属性](update-keystore.md)，以及将其与其关联的 AWS CloudHSM 集群[连接](connect-keystore.md)和[断开连接](disconnect-keystore.md)。如果您需要[删除 AWS CloudHSM 密钥存储库，则](delete-keystore.md#delete-keystore-console)必须首先通过安排删除密钥库中的 KMS 密 AWS CloudHSM 钥并等到宽限期到期来将其删除。删除 AWS CloudHSM 密钥库会从中移除资源 AWS KMS，但不会影响您的 AWS CloudHSM 集群。

### AWS CloudHSM 集群
<a name="concept-cluster"></a>

每个 AWS CloudHSM 密钥库都与一个*AWS CloudHSM 集群*相关联。当您在 AWS CloudHSM 密钥库 AWS KMS key 中创建时， AWS KMS 会在关联的集群中创建其密钥材料。当您在 AWS CloudHSM 密钥存储中使用 KMS 密钥时，将在关联的集群中执行加密操作。

每个 AWS CloudHSM 集群只能与一个 AWS CloudHSM 密钥库相关联。您选择的集群不能与其他 AWS CloudHSM 密钥库相关联，也不能与与其他密 AWS CloudHSM 钥库关联的集群共享备份历史记录。集群必须处于初始化状态且处于活动状态，并且必须与 AWS CloudHSM 密钥库位于同一 AWS 账户 区域中。您可以创建新集群或使用现有集群。 AWS KMS 不需要集群的独占使用。要在密钥库中创建 KMS 密钥，其关联的集群必须至少包含两个处于活动状态的集群 HSMs。 AWS CloudHSM 所有其他操作都只需要一个 HSM。

您在创建 AWS CloudHSM 密钥库时指定 AWS CloudHSM 集群，并且无法对其进行更改。但是，您可以替换与原始集群共享备份历史记录的任何集群。这样，您就可以删除该集群（如有必要），然后将它替换为从其备份之一创建的集群。您可以完全控制关联的 AWS CloudHSM 集群，因此您可以管理用户和密钥、创建和删除 HSMs以及使用和管理备份。

当您准备好使用 AWS CloudHSM 密钥库时，可以将其连接到其关联的 AWS CloudHSM 集群。您可以随时连接和断开自定义密钥存储。连接自定义密钥存储后，您可以创建和使用其 KMS 密钥。断开连接后，您可以查看和管理 AWS CloudHSM 密钥库及其 KMS 密钥。但是您不能创建新的 KMS 密钥或使用密钥存储区中的 KMS 密 AWS CloudHSM 钥进行加密操作。

### `kmsuser` 加密用户
<a name="concept-kmsuser"></a>

要代表您创建和管理关联 AWS CloudHSM 集群中的密钥材料，请在名为的集群中 AWS KMS 使用专用*AWS CloudHSM [加密用户](https://docs.aws.amazon.com/cloudhsm/latest/userguide/hsm-users.html#crypto-user) (CU)* `kmsuser`。`kmsuser`CU 是一个标准 CU 帐户，可自动与集群 HSMs 中的所有用户同步，并保存在集群备份中。

在创建 AWS CloudHSM 密钥库之前，请使用 CloudHSM CLI 中的[https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-user-cloudhsm-cli.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-user-cloudhsm-cli.html)命令在 AWS CloudHSM 集群中创建 C [`kmsuser`U 账户](create-keystore.md#before-keystore)。然后，[在创建 AWS CloudHSM 密钥库](create-keystore.md)时，将`kmsuser`帐户密码提供给 AWS KMS。[连接自定义密钥存储](connect-keystore.md)库时，以 `kmsuser` CU 的身份 AWS KMS 登录集群并轮换其密码。 AWS KMS 在安全存储`kmsuser`密码之前对其进行加密。轮换密码时，新密码也会以相同的方式加密和存储。

AWS KMS `kmsuser`只要 AWS CloudHSM 密钥库已连接，就会保持登录状态。您不应将此 CU 账户用于其他目的。但是，您保留对 `kmsuser` CU 账户的最终控制权。您可以随时[查找 `kmsuser` 拥有的密钥](find-key-material.md)。必要时，您可以[将自定义密钥存储断开连接](disconnect-keystore.md)，更改 `kmsuser` 密码，[以 `kmsuser` 身份登录到集群](fix-keystore.md#fix-login-as-kmsuser)，以及查看和管理 `kmsuser` 拥有的密钥。

有关创建 `kmsuser` CU 账户的说明，请参阅[创建 `kmsuser` 加密用户](create-keystore.md#before-keystore)。

### 密钥库中的 KMS AWS CloudHSM 密钥
<a name="concept-cmk-key-store"></a>

您可以使用 AWS KMS 或 AWS KMS API 在 AWS CloudHSM 密钥库 AWS KMS keys 中创建。您将使用对任何 KMS 密钥使用的同一方法。唯一的区别是，您必须识别 AWS CloudHSM 密钥库并指定密钥材料的来源是 AWS CloudHSM 集群。

在[密钥存储中创建 KMS AWS CloudHSM 密钥时，在中](create-cmk-keystore.md) AWS KMS 创建 KMS 密钥，它会在关联的集群中 AWS KMS 生成 256 位、永久性、不可导出的高级加密标准 (AES) 对称密钥材料。当您在加密操作中使用 AWS KMS 密钥时，该操作将使用基于集群的 AES 密钥在 AWS CloudHSM 集群中执行。尽管 AWS CloudHSM 支持不同类型的对称和非对称密钥，但密钥库仅支持 AES 对称加密 AWS CloudHSM 密钥。

您可以在 AWS KMS 控制台的密钥库中查看 KMS 密钥，并使用控制台选项显示自定义密钥存储 ID。 AWS CloudHSM 您还可以使用该[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)操作来查找 AWS CloudHSM 密钥库 ID 和 AWS CloudHSM 集群 ID。

密钥存储中的 KMS 密 AWS CloudHSM 钥的工作方式与中的任何 KMS 密钥相同 AWS KMS。授权用户需要相同的权限来使用和管理 KMS 密钥。您可以使用相同的控制台过程和 API 操作来查看和管理密钥库中的 KMS 密钥。 AWS CloudHSM 这包括启用和禁用 KMS 密钥、创建和使用标签和别名以及设置和更改 IAM 和密钥策略。您可以将密钥存储区中的 KMS 密 AWS CloudHSM 钥用于加密操作，并将其与支持使用客户托管密钥的[集成 AWS 服务](service-integration.md)一起使用。但是，您无法启用[自动密钥轮换或将密钥](rotate-keys.md)[材料导入密钥](importing-keys.md)存储区的 KMS AWS CloudHSM 密钥中。

您还可以使用相同的过程来[计划删除](deleting-keys.md#delete-cmk-keystore)密钥库中的 KMS AWS CloudHSM 密钥。等待期到期后，从 KMS 中 AWS KMS 删除 KMS 密钥。然后，它会尽最大努力从关联的 AWS CloudHSM 集群中删除 KMS 密钥的密钥材料。但是，您可能需要从集群及其备份中手动[删除孤立密钥材料](fix-keystore.md#fix-keystore-orphaned-key)。

# 控制对 AWS CloudHSM 密钥库的访问权限
<a name="authorize-key-store"></a>

您可以使用 IAM 策略来控制对 AWS CloudHSM 密钥库和 AWS CloudHSM 集群的访问权限。您可以使用密钥策略、IAM 策略和授权来控制对 AWS CloudHSM 密钥库 AWS KMS keys 中的的访问权限。我们建议您仅向用户、组和角色提供他们可能执行的任务所需的权限。

要支持您的 AWS CloudHSM 密钥存储， AWS KMS 需要获得有关您的 AWS CloudHSM 集群信息的权限。它还需要权限才能创建将您的 AWS CloudHSM 密钥库连接到其 AWS CloudHSM 集群的网络基础架构。要获得这些权限， AWS KMS 请在 AWS 账户中创建**AWSServiceRoleForKeyManagementServiceCustomKeyStores**服务相关角色。有关更多信息，请参阅 [授权 AWS KMS 管理 AWS CloudHSM 和 Amazon EC2 资源](authorize-kms.md)。

在设计 AWS CloudHSM 密钥库时，请确保使用和管理密钥库的委托人仅拥有他们所需的权限。以下列表描述了 AWS CloudHSM 密钥库管理员和用户所需的最低权限。
+ 创建和管理您的 AWS CloudHSM 密钥库的委托人需要以下权限才能使用 AWS CloudHSM 密钥存储库 API 操作。
  + `cloudhsm:DescribeClusters`
  + `kms:CreateCustomKeyStore`
  + `kms:ConnectCustomKeyStore`
  + `kms:DeleteCustomKeyStore`
  + `kms:DescribeCustomKeyStores`
  + `kms:DisconnectCustomKeyStore`
  + `kms:UpdateCustomKeyStore`
  + `iam:CreateServiceLinkedRole`
+ 创建和管理与您的 AWS CloudHSM 密钥库关联的 AWS CloudHSM 集群的委托人需要获得创建和初始化 AWS CloudHSM 集群的权限。这包括创建或使用亚马逊虚拟私有云 (VPC)、创建子网和创建亚马逊实例的权限。 EC2他们可能还需要创建 HSMs、删除和管理备份。有关所需权限的列表，请参阅《AWS CloudHSM User Guide》**中的 [Identity and access management for AWS CloudHSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/identity-access-management.html)。
+  AWS KMS keys 在您的 AWS CloudHSM 密钥存储中创建和管理的委托人需要与[在中创建和管理任何 KMS 密钥的 AWS KMS用户相同的权限](create-keys.md#create-key-permissions)。[密钥存储中 KMS 密钥的默认 AWS CloudHSM 密钥策略](key-policy-default.md)与中 KMS 密钥的默认密钥策略相同 AWS KMS。[基于属性的访问控制](abac.md) (ABAC) 使用标签和别名来控制对 KMS 密钥的访问，也对密钥存储中的 KMS 密钥有效。 AWS CloudHSM 
+ [使用密钥存储区中的 KMS 密钥进行[加密操作](manage-cmk-keystore.md#use-cmk-keystore)的委托人需要获得权限才能使用 KMS 密钥执行加密操作，例如 KMS: decrypt。 AWS CloudHSM](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)您可以在密钥策略或 IAM policy 中提供这些权限。但是，他们不需要任何其他权限即可在密钥库中使用 KMS AWS CloudHSM 密钥。

# 创建密 AWS CloudHSM 钥库
<a name="create-keystore"></a>

您可以在自己的账户中创建一个或多个 AWS CloudHSM 密钥库。每个 AWS CloudHSM 密钥库都与同一个 AWS 账户 和区域中的一个 AWS CloudHSM 集群相关联。在创建 AWS CloudHSM 密钥存储之前，您需要[汇编先决条件](#before-keystore)。然后，在使用 AWS CloudHSM 密钥库之前，必须[将其连接到](connect-keystore.md)其 AWS CloudHSM 集群。

**注意**  
KMS 无法 IPv6 与 AWS CloudHSM 密钥存储库进行通信。  
如果您尝试创建与现有*已断开连接*的 AWS CloudHSM 密钥存储具有相同属性值的 AWS CloudHSM 密钥存储库，则 AWS KMS 不会创建新的 AWS CloudHSM 密钥存储，也不会引发异常或显示错误。相反，它会将重复 AWS KMS 识别为重试可能产生的结果，并返回现有 AWS CloudHSM 密钥库的 ID。  
您不必立即连接 AWS CloudHSM 密钥库。您可以将它保持断开状态，直到您准备好使用它为止。但是，要验证它是否已正确配置，您可能需要[连接它](connect-keystore.md)，[查看其连接状态](view-keystore.md)，然后[断开它](disconnect-keystore.md)。

**Topics**
+ [汇编先决条件](#before-keystore)
+ [创建新的 AWS CloudHSM 密钥库](#create-hsm-keystore)

## 汇编先决条件
<a name="before-keystore"></a>

每个 AWS CloudHSM 密钥库都由一个 AWS CloudHSM 集群提供支持。要创建 AWS CloudHSM 密钥存储库，必须指定尚未与其他密钥库关联的活动 AWS CloudHSM 集群。您还需要在集群中创建一个专用的加密用户 (CU) HSMs ，该用户 AWS KMS 可用于代表您创建和管理密钥。

在创建 AWS CloudHSM 密钥库之前，请执行以下操作：

**选择一个 AWS CloudHSM 集群**  
每个 AWS CloudHSM 密钥库[恰好与一个 AWS CloudHSM 集群相关联](keystore-cloudhsm.md#concept-cluster)。当您在 AWS CloudHSM 密钥存储 AWS KMS keys 中创建时， AWS KMS 会在中创建 KMS 密钥元数据，例如 ID 和 Amazon 资源名称 (ARN)。 AWS KMS然后，它会在关联集群 HSMs 中创建密钥材料。您可以[创建新 AWS CloudHSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/getting-started.html)集群或使用现有集群。 AWS KMS 不需要对集群的独占访问权限。  
您选择的 AWS CloudHSM 集群与 AWS CloudHSM 密钥库永久关联。创建 AWS CloudHSM 密钥库后，您可以[更改关联集群的集群 ID](update-keystore.md)，但您指定的集群必须与原始集群共享备份历史记录。要使用不相关的集群，您需要创建一个新的 AWS CloudHSM 密钥库。  
您选择的 AWS CloudHSM 集群必须具有以下特征：  
+ **集群必须处于活动状态**。

  您必须创建集群，对其进行初始化，安装适用于您的平台的 AWS CloudHSM 客户端软件，然后激活集群。有关详细说明，请参阅《AWS CloudHSM User Guide》**中的 [Getting started with AWS CloudHSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/getting-started.html)。
+ **未启用双向 TLS（mTLS）。**

  KMS 不支持将 mTLS 用于集群。务必不要启用此设置。
+ **集群必须与 AWS CloudHSM 密钥库位于同一个账户和区域**中。您不能将一个区域中的 AWS CloudHSM 密钥存储库与另一个区域的集群相关联。要在多个区域创建密钥基础设施，您必须在每个区域中创建 AWS CloudHSM 密钥存储和集群。
+ **集群不能与同一账户和区域中的其他自定义密钥存储关联**。账户和区域中的每个 AWS CloudHSM 密钥存储区都必须与不同的集 AWS CloudHSM 群相关联。您无法指定已与自定义密钥存储关联的集群，也无法指定与关联集群共享备份历史记录的集群。共享备份历史记录的集群具有相同的集群证书。要查看集群的集群证书，请使用 AWS CloudHSM 控制台或[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。

  如果您[将 AWS CloudHSM 集群备份到不同的区域](https://docs.aws.amazon.com/cloudhsm/latest/userguide/copy-backup-to-region.html)，则它将被视为一个不同的集群，并且您可以将备份关联到其区域中的自定义密钥存储。但是，两个自定义密钥存储库中的 KMS 密钥不可互操作，即使它们具有相同的支持密钥。 AWS KMS 将元数据绑定到密文，因此只能通过加密密文的 KMS 密钥对其进行解密。
+ 必须在区域中的**至少两个可用区**中为集群配置[私有子网](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-subnets.html)。由于 AWS CloudHSM 并非所有可用区都支持私有子网，因此我们建议您在该区域的所有可用区中创建私有子网。您无法为现有集群重新配置子网，但可以[从备份创建集群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)（在集群配置中具有不同的子网）。
**重要**  
创建 AWS CloudHSM 密钥库后，请勿删除为其 AWS CloudHSM 集群配置的任何私有子网。如果在群集配置中找 AWS KMS 不到所有子网，则尝试[连接到自定义密钥库会](connect-keystore.md)失败，并显示`SUBNET_NOT_FOUND`连接错误状态。有关更多信息，请参阅 [如何修复连接故障](fix-keystore.md#fix-keystore-failed)。
+ [集群的安全组](https://docs.aws.amazon.com/cloudhsm/latest/userguide/configure-sg.html) (`cloudhsm-cluster-<cluster-id>-sg`) 必须包含允许端口 2223-2225 上的 TCP 流量的入站规则和出站规则。 IPv4入站规则中的 **Source (源)** 和出站规则中的 **Destination (目标)** 必须匹配安全组 ID。在创建集群时，默认情况下会设置这些规则。请勿删除或更改它们。
+ **集群必须至少包含两个 HSMs处于**不同可用区域的活动集群。要验证数量 HSMs，请使用 AWS CloudHSM 控制台或[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。如有必要，您可以[添加 HSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/add-remove-hsm.html#add-hsm)。

**查找信任锚点证书**  
创建自定义密钥存储库时，必须将 AWS CloudHSM 集群的信任锚证书上传到 AWS KMS。 AWS KMS 需要信任锚证书才能将 AWS CloudHSM 密钥库连接到其关联的 AWS CloudHSM 集群。  
每个活动 AWS CloudHSM 集群都有一个*信任锚证书*。在[初始化集群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/initialize-cluster.html#sign-csr)时，您将生成此证书，将它保存在 `customerCA.crt` 文件中，并将它复制到已连接到集群的主机。

**为创建`kmsuser`加密用户 AWS KMS**  <a name="kmsuser-concept"></a>
要管理您的 AWS CloudHSM 密钥存储，请 AWS KMS 登录选定集群中的[`kmsuser`加密用户](keystore-cloudhsm.md#concept-kmsuser) (CU) 账户。在创建 AWS CloudHSM 密钥库之前，必须创建 C `kmsuser` U。然后，在创建 AWS CloudHSM 密钥库时，您需要为提供密码 AWS KMS。`kmsuser`每当您将 AWS CloudHSM 密钥库连接到其关联 AWS CloudHSM 集群时，都要以身份 AWS KMS 登录`kmsuser`并轮换密码 `kmsuser`   
在创建 `kmsuser` CU 时，请勿指定 `2FA` 选项。如果这样做，则 AWS KMS 无法登录，您的 AWS CloudHSM 密钥库也无法连接到此 AWS CloudHSM 集群。一旦指定 2FA，便无法撤消它。相反，您必须删除 CU 并重新创建它。
**注意**  
以下过程使用 AWS CloudHSM 客户端 SDK 5 命令行工具 [CloudHSM C](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html) LI。CloudHSM CLI 将 `key-handle` 替换为 `key-reference`。  
2025 年 1 月 1 日， AWS CloudHSM 将终止对客户端 SDK 3 命令行工具、CloudHSM 管理实用程序 (CMU) 和密钥管理实用程序 (KMU) 的支持。有关客户端 SDK 3 命令行工具和客户端 SDK 5 命令行工具之间区别的更多信息，请参阅《AWS CloudHSM 用户指南》**中的[从客户端 SDK 3 CMU 和 KMU 迁移到客户端 SDK 5 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-migrate-from-kmu-cmu.html)。

1. 按照《AWS CloudHSM 用户指南》**的[开始使用 CloudHSM 命令行界面（CLI）](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-getting-started.html)主题中所述的入门步骤进行操作。

1. 使用 [https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-user-cloudhsm-cli.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-user-cloudhsm-cli.html) 命令创建名为 `kmsuser` 的 CU。

   密码必须由 7 到 32 个字母数字字符组成。它区分大小写，并且不能包含任何特殊字符。

   以下示例命令创建了一个 `kmsuser` CU。

   ```
   aws-cloudhsm > user create --username kmsuser --role crypto-user
   Enter password:
   Confirm password:
   {
    "error_code": 0,
    "data": {
      "username": "kmsuser",
      "role": "crypto-user"
    }
   }
   ```

## 创建新的 AWS CloudHSM 密钥库
<a name="create-hsm-keystore"></a>

[组装完先决条件](#before-keystore)后，可以在 AWS KMS 控制台中或使用[CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html)操作创建新的 AWS CloudHSM 密钥存储库。

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

在中创建 AWS CloudHSM 密钥库时 AWS 管理控制台，可以在工作流程中添加和创建[先决条件](#before-keystore)。但是，如果您事先已汇编这些先决条件，则此过程会更快。

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

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

1. 在导航窗格中，选择**自定义密钥存储**、**AWS CloudHSM 密钥存储**。

1. 选择**创建密钥存储**。

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

1. 为 AWS CloudHSM 密钥库选择[一个 AWS CloudHSM 集群](keystore-cloudhsm.md#concept-cluster)。或者，要创建新 AWS CloudHSM 集群，请选择**创建 AWS CloudHSM 集群**链接。

   该菜单显示您的账户和地区中尚未与 AWS CloudHSM 密钥库关联的 AWS CloudHSM 集群。该集群必须[满足要求](#before-keystore)（与关联自定义密钥存储相关）。

1. 选择 **“选择文件”**，然后上传所选 AWS CloudHSM 集群的信任锚证书。这是您在[初始化集群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/initialize-cluster.html#sign-csr)时创建的 `customerCA.crt` 文件。

1. 输入您在选定集群中创建的 [`kmsuser` 加密用户](keystore-cloudhsm.md#concept-kmsuser) (CU) 的密码。

1. 选择**创建**。

该过程成功后，新的 AWS CloudHSM 密钥库将出现在账户和地区的 AWS CloudHSM 密钥存储列表中。如果该过程失败，则会显示一条错误消息，描述问题并提供有关如何解决该问题的帮助。如果您需要更多帮助，请参阅[对自定义密钥存储进行故障排除](fix-keystore.md)。

如果您尝试创建与现有*已断开连接*的 AWS CloudHSM 密钥存储具有相同属性值的 AWS CloudHSM 密钥存储库，则 AWS KMS 不会创建新的 AWS CloudHSM 密钥存储，也不会引发异常或显示错误。相反，它会将重复 AWS KMS 识别为重试可能产生的结果，并返回现有 AWS CloudHSM 密钥库的 ID。

**下一步**：新的 AWS CloudHSM 密钥库不会自动连接。在 AWS CloudHSM 密钥库 AWS KMS keys 中创建之前，必须先将[自定义密钥库连接到](connect-keystore.md)其关联的 AWS CloudHSM 集群。

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

您可以使用该[CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html)操作来创建与账户和区域中的 AWS CloudHSM 集群关联的新 AWS CloudHSM 密钥库。这些示例使用 AWS Command Line Interface (AWS CLI)，但您可以使用任何受支持的编程语言。

`CreateCustomKeyStore` 操作需要以下参数值。
+ CustomKeyStoreName — 自定义密钥库的友好名称，在账户中是唯一的。
**重要**  
不要在此字段中包含机密或敏感信息。此字段可能会以纯文本形式显示在 CloudTrail 日志和其他输出中。
+ CloudHsmClusterId — [满足 AWS CloudHSM 密钥存储要求的 AWS CloudHSM 集群的](#before-keystore)集群 ID。
+ KeyStorePassword — 指定集群中 `kmsuser` CU 账户的密码。
+ TrustAnchorCertificate — 您在[初始化集群时创建的`customerCA.crt`](https://docs.aws.amazon.com/cloudhsm/latest/userguide/initialize-cluster.html)文件的内容。

以下示例使用虚构的集群 ID。在运行命令之前，请将其替换为有效的集群 ID。

```
$ aws kms create-custom-key-store
        --custom-key-store-name ExampleCloudHSMKeyStore \
        --cloud-hsm-cluster-id cluster-1a23b4cdefg \
        --key-store-password kmsPswd \
        --trust-anchor-certificate <certificate-goes-here>
```

如果您使用的是 AWS CLI，则可以指定信任锚证书文件而不是其内容。在下面的示例中，`customerCA.crt` 文件位于根目录中。

```
$ aws kms create-custom-key-store
        --custom-key-store-name ExampleCloudHSMKeyStore \
        --cloud-hsm-cluster-id cluster-1a23b4cdefg \
        --key-store-password kmsPswd \
        --trust-anchor-certificate file://customerCA.crt
```

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

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

如果操作失败，请更正异常指示的错误，然后重试。有关其他帮助，请参阅[对自定义密钥存储进行故障排除](fix-keystore.md)。

如果您尝试创建与现有*已断开连接*的 AWS CloudHSM 密钥存储具有相同属性值的 AWS CloudHSM 密钥存储库，则 AWS KMS 不会创建新的 AWS CloudHSM 密钥存储，也不会引发异常或显示错误。相反，它会将重复 AWS KMS 识别为重试可能产生的结果，并返回现有 AWS CloudHSM 密钥库的 ID。

**下一步**：要使用 AWS CloudHSM 密钥库，请[将其连接到其 AWS CloudHSM 集群](connect-keystore.md)。

# 查看密 AWS CloudHSM 钥库
<a name="view-keystore"></a>

您可以使用 AWS KMS 控制台或[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作查看每个账户和区域中的 AWS CloudHSM 密钥存储区。

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

在中查看 AWS CloudHSM 密钥存储库时 AWS 管理控制台，可以看到以下内容：
+ 自定义密钥存储名称和 ID
+ 关联 AWS CloudHSM 集群的 ID
+ 集群 HSMs 中的数量
+ 当前连接状态

连接**状态（状态**）值为 “**已断开连接**” 表示自定义密钥库是新的，从未连接过，或者是故意与[其 AWS CloudHSM 集群断开连接](disconnect-keystore.md)。但是，如果您尝试在连接的自定义密钥存储中使用 KMS 密钥失败，则可能表明自定义密钥存储或其 AWS CloudHSM 集群存在问题。有关帮助信息，请参阅 [如何修复失败的 KMS 密钥](fix-keystore.md#fix-cmk-failed)。

要查看给定账户和区域中的 AWS CloudHSM 密钥存储，请按以下步骤操作。

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

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

1. 在导航窗格中，选择**自定义密钥存储**、**AWS CloudHSM 密钥存储**。

要自定义显示，请单击显示在 **Create key store (创建密钥存储)** 按钮下方的齿轮图标。

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

要查看您的 AWS CloudHSM 密钥存储库，请使用[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作。默认情况下，此操作将返回账户和区域中的所有自定义密钥存储。不过，您可以使用 `CustomKeyStoreId` 或 `CustomKeyStoreName` 参数（但不能同时使用两者）将输出限制到特定的自定义密钥存储。对于 AWS CloudHSM 密钥存储，输出包括自定义密钥库 ID 和名称、自定义密钥库类型、关联 AWS CloudHSM 集群的 ID 以及连接状态。如果连接状态指示错误，则输出还包含描述错误原因的错误代码。

本部分中的示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。

例如，以下命令返回账户和区域中的所有自定义密钥存储。您可以使用 `Limit` 和 `Marker` 参数来浏览输出中的自定义密钥存储。

```
$ aws kms describe-custom-key-stores
```

以下示例命令使用 `CustomKeyStoreName` 参数以仅获取具有 `ExampleCloudHSMKeyStore` 友好名称的自定义密钥存储。您可以在每个命令中使用 `CustomKeyStoreName` 或 `CustomKeyStoreId` 参数（但不能同时使用二者）。

以下示例输出表示已连接到其 AWS CloudHSM 集群的 AWS CloudHSM 密钥库。

**注意**  
该`CustomKeyStoreType`字段已添加到`DescribeCustomKeyStores`响应中，以区分 AWS CloudHSM 密钥存储库和外部密钥存储。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleCloudHSMKeyStore
{
   "CustomKeyStores": [ 
      { 
         "CloudHsmClusterId": "cluster-1a23b4cdefg",
         "ConnectionState": "CONNECTED",
         "CreationDate": "1.499288695918E9",
         "CustomKeyStoreId": "cks-1234567890abcdef0",
         "CustomKeyStoreName": "ExampleCloudHSMKeyStore",
         "CustomKeyStoreType": "AWS_CLOUDHSM",
         "TrustAnchorCertificate": "<certificate appears here>"
      }
   ]
}
```

如果为`ConnectionState`，`Disconnected`则表示自定义密钥库从未连接过，或者它被故意与[其 AWS CloudHSM 集群断开连接](disconnect-keystore.md)。但是，如果尝试在连接的密钥存储中使用 KMS AWS CloudHSM 密钥失败，则可能表示 AWS CloudHSM 密钥存储或其 AWS CloudHSM 集群存在问题。有关帮助信息，请参阅 [如何修复失败的 KMS 密钥](fix-keystore.md#fix-cmk-failed)。

如果自定义密钥存储的 `ConnectionState` 为 `FAILED`，则 `DescribeCustomKeyStores` 响应包含一个说明错误原因的 `ConnectionErrorCode` 元素。

例如，在以下输出中，`INVALID_CREDENTIALS` 值指示自定义密钥存储连接因 [`kmsuser` 密码无效](fix-keystore.md#fix-keystore-password)而导致失败。有关此连接失败及其他连接错误失败的帮助，请参阅[对自定义密钥存储进行故障排除](fix-keystore.md)。

```
$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0
{
   "CustomKeyStores": [ 
      { 
         "CloudHsmClusterId": "cluster-1a23b4cdefg",
         "ConnectionErrorCode": "INVALID_CREDENTIALS",
         "ConnectionState": "FAILED",
         "CustomKeyStoreId": "cks-1234567890abcdef0",
         "CustomKeyStoreName": "ExampleCloudHSMKeyStore",
         "CustomKeyStoreType": "AWS_CLOUDHSM",
         "CreationDate": "1.499288695918E9",
         "TrustAnchorCertificate": "<certificate appears here>"
      }
   ]
}
```

**了解更多：**
+ [查看外部密钥存储](view-xks-keystore.md)
+ [识别密钥库中的 KMS AWS CloudHSM 密钥](identify-key-types.md#identify-key-hsm-keystore)
+ [使用记录 AWS KMS API 调用 AWS CloudTrail](logging-using-cloudtrail.md)

# 编辑 AWS CloudHSM 密钥库设置
<a name="update-keystore"></a>

您可以更改现有 AWS CloudHSM 密钥库的设置。自定义密钥库必须断开其 AWS CloudHSM 集群的连接。

要编辑 AWS CloudHSM 密钥库设置，请执行以下操作：

1. [断开自定义密钥存储](disconnect-keystore.md)与其 AWS CloudHSM 集群的连接。

   当自定义密钥存储断开连接时，您无法在自定义密钥存储库中创建 AWS KMS keys （KMS 密钥），也无法将其包含的 KMS 密钥用于[加密操作](manage-cmk-keystore.md#use-cmk-keystore)。

1. 编辑一个或多个 AWS CloudHSM 密钥库设置。

   您可以在自定义密钥存储中编辑以下设置：  
自定义密钥存储的友好名称。  
输入新的友好名称。在您的所有自定义密钥存储库中，新名称必须是唯一的 AWS 账户。  
不要在此字段中包含机密或敏感信息。此字段可能会以纯文本形式显示在 CloudTrail 日志和其他输出中。  
关联集群的 AWS CloudHSM 集群 ID。  
编辑此值可将相关 AWS CloudHSM 群集替换为原始群集。如果自定义密钥存储的集群损坏或被删除，则可以使用此功能修复其 AWS CloudHSM 集群。  
指定一个与原始 AWS CloudHSM 集群共享备份历史记录并[满足与自定义密钥存储关联要求](create-keystore.md#before-keystore)的集群，包括两个 HSMs 在不同可用区域中处于活动状态的集群。共享备份历史记录的集群具有相同的集群证书。要查看集群的集群证书，请使用[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。您无法使用编辑功能来将自定义密钥存储与不相关的 AWS CloudHSM 集群相关联。  
[`kmsuser` 加密用户](keystore-cloudhsm.md#concept-kmsuser) (CU) 的当前密码。  
告诉 AWS KMS 集 AWS CloudHSM 群中 `kmsuser` CU 的当前密码。此操作不会更改 AWS CloudHSM 集群中 `kmsuser` CU 的密码。  
如果您更改 AWS CloudHSM 集群中 `kmsuser` CU 的密码，请使用此功能告知 AWS KMS 新`kmsuser`密码。否则， AWS KMS 将无法登录集群并且所有将自定义密钥存储连接到集群的尝试都将失败。

1. [重新连接自定义密钥存储](connect-keystore.md)至其 AWS CloudHSM 集群。

## 编辑您的密钥存储设置
<a name="edit-keystore-settings"></a>

您可以在 AWS KMS 控制台中或使用[UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html)操作来编辑 AWS CloudHSM 密钥库设置。

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

编辑 AWS CloudHSM 密钥库时，可以更改任何或任意可配置值。

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

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

1. 在导航窗格中，选择**自定义密钥存储**、**AWS CloudHSM 密钥存储**。

1. 选择要编辑的 AWS CloudHSM 密钥库所在的行。

   如果**连接状态**列中的值不是**已断开连接**，则必须先断开自定义密钥存储，然后才能对其进行编辑。[从 **Key store actions**（密钥存储操作）菜单中选择 **Disconnect**（断开连接）。]

   当 AWS CloudHSM 密钥存储断开连接时，您可以管理密 AWS CloudHSM 钥存储及其 KMS 密钥，但不能在密钥存储中创建或使用 KMS 密钥。 AWS CloudHSM 

1. 从 **Key store actions**（密钥存储操作）菜单中选择 **Edit**（编辑）。

1. 执行以下一项或多项操作。
   + 为自定义密钥存储键入新的友好名称。
   + 键入相关集群的 AWS CloudHSM 集群 ID。
   + 键入关联 AWS CloudHSM 集群中`kmsuser`加密用户的当前密码。

1. 选择**保存**。

   在此过程成功后，将显示一条消息，描述您编辑的设置。如果此过程失败，则会显示一条错误消息，描述问题并提供有关如何解决问题的帮助。如果您需要更多帮助，请参阅[对自定义密钥存储进行故障排除](fix-keystore.md)。

1. [重新连接自定义密钥存储。](connect-keystore.md)

   要使用 AWS CloudHSM 密钥库，必须在编辑后将其重新连接。您可以让 AWS CloudHSM 密钥存储保留断开状态。但是，当它断开连接时，您无法在密钥存储中创建 KMS 密钥，也无法在[加密操作](manage-cmk-keystore.md#use-cmk-keystore)中使用密 AWS CloudHSM 钥存储中的 KMS 密钥。 AWS CloudHSM 

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

要更改 AWS CloudHSM 密钥库的属性，请使用[UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html)操作。您可以在同一命令中更改自定义密钥存储的多个属性。如果操作成功，则 AWS KMS 返回一个 HTTP 200 响应和一个没有属性的 JSON 对象。要验证更改是否有效，请使用[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作。

本部分中的示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。

首先使用[DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisconnectCustomKeyStore.html)[断开自定义密钥存储库](disconnect-keystore.md)与其 AWS CloudHSM 集群的连接。将示例自定义密钥存储 ID cks-1234567890abcdef0 替换为实际 ID。

```
$ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
```

第一个示例用于[UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html)将 AWS CloudHSM 密钥库的友好名称更改为`DevelopmentKeys`。该命令使用`CustomKeyStoreId`参数来标识 AWS CloudHSM 密钥库，`CustomKeyStoreName`使用参数指定自定义密钥库的新名称。

```
$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --new-custom-key-store-name DevelopmentKeys
```

以下示例将与 AWS CloudHSM 密钥库关联的集群更改为同一集群的另一个备份。该命令使用`CustomKeyStoreId`参数来标识 AWS CloudHSM 密钥库，使用`CloudHsmClusterId`参数来指定新的集群 ID。

```
$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --cloud-hsm-cluster-id cluster-1a23b4cdefg
```

以下示例 AWS KMS 说明当前`kmsuser`密码为`ExamplePassword`。该命令使用`CustomKeyStoreId`参数来标识 AWS CloudHSM 密钥库，使用`KeyStorePassword`参数来指定当前密码。

```
$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --key-store-password ExamplePassword
```

最后一个命令将 AWS CloudHSM 密钥库重新连接到其 AWS CloudHSM 集群。您可以将自定义密钥存储保留断开状态，但必须先连接它，然后才能创建新的 KMS 密钥或使用现有 KMS 密钥来进行[加密操作](manage-cmk-keystore.md#use-cmk-keystore)。将示例自定义密钥存储 ID 替换为实际 ID。

```
$ aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
```

# Connect AWS CloudHSM 密钥库
<a name="connect-keystore"></a>

新的 AWS CloudHSM 密钥库未连接。您需要先将其连接到其关联的 AWS CloudHSM 集群，然后才能 AWS KMS keys 在 AWS CloudHSM 密钥库中创建和使用。您可以随时连接和断开 AWS CloudHSM 密钥库的连接，并[查看其连接状态](view-keystore.md#view-keystore-console)。

您无需连接 AWS CloudHSM 密钥库。您可以将 AWS CloudHSM 密钥库无限期地置于断开连接状态，并且仅在需要使用时才连接密钥库。但是，您可能希望定期测试连接以验证设置是否正确以及自定义密钥存储是否可以连接。

**注意**  
AWS CloudHSM 只有当密钥库从未`DISCONNECTED`连接过或您明确断开连接时，密钥库才会处于连接状态。如果您的 AWS CloudHSM 密钥库连接状态为，`CONNECTED`但您在使用它时遇到问题，请确保其关联的 AWS CloudHSM 集群处于活动状态并且至少包含一个处于活动状态的集群 HSMs。如需帮助解决连接失败问题，请参阅 [对自定义密钥存储进行故障排除](fix-keystore.md)。

当您连接 AWS CloudHSM 密钥库时，会 AWS KMS 找到关联的 AWS CloudHSM 集群，连接到该集群，以[`kmsuser`加密用户](keystore-cloudhsm.md#concept-kmsuser) (CU) 的身份登录 AWS CloudHSM 客户端，然后轮换`kmsuser`密码。 AWS KMS 只要 AWS CloudHSM 密钥库已连接，就会一直登录到 AWS CloudHSM 客户端。

要建立连接，请在集[群的虚拟私有云 (VPC) `kms-<custom key store ID>` 中 AWS KMS 创建一个名为的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。该安全组只有一条规则，允许来自集群安全组的入站流量。 AWS KMS 还会在集群的私有子[网的每个可用区中创建一个 elastic network inter](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html) face (ENI)。 AWS KMS 将 ENIs 添加到集群`kms-<cluster ID>`的安全组和安全组。每个 ENI 的描述都是 `KMS managed ENI for cluster <cluster-ID>`。

连接过程可能需要较长时间才能完成；最多 20 分钟。

在连接 AWS CloudHSM 密钥库之前，请验证其是否符合要求。
+ 其关联的 AWS CloudHSM 群集必须包含至少一个活动的 HSM。要查找集群 HSMs 中的数量，请在 AWS CloudHSM 控制台中查看集群或使用[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。如有必要，您可以[添加 HSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/add-remove-hsm.html)。
+ 集群必须有一个[`kmsuser`加密用户](create-keystore.md#kmsuser-concept) (CU) 帐户，但是当您连接 AWS CloudHSM 密钥库时，该 CU 无法登录到集群。要获取有关注销的帮助，请参阅 [如何注销并重新连接](fix-keystore.md#login-kmsuser-2)。
+  AWS CloudHSM 密钥库的连接状态不能为`DISCONNECTING`或`FAILED`。要查看连接状态，请使用 AWS KMS 控制台或[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)响应。如果连接状态为 `FAILED`，请断开自定义密钥存储，修复问题，然后连接它。

如需帮助解决连接失败问题，请参阅 [如何修复连接故障](fix-keystore.md#fix-keystore-failed)。

连接 AWS CloudHSM 密钥库后，您可以在其中[创建 KMS 密钥并在[加密操作](manage-cmk-keystore.md#use-cmk-keystore)中](create-cmk-keystore.md)使用现有的 KMS 密钥。

## 连接并重新连接到您的 AWS CloudHSM 密钥库
<a name="connect-hsm-keystore"></a>

您可以在 AWS KMS 控制台中或使用[ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html)操作来连接或重新连接您的 AWS CloudHSM 密钥存储库。

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

要连接中的 AWS CloudHSM 密钥存储库 AWS 管理控制台，请先从**自定义 AWS CloudHSM 密钥存储库页面中选择密钥存储库**。连接过程可能最多需要 20 分钟才能完成。

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

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

1. 在导航窗格中，选择**自定义密钥存储**、**AWS CloudHSM 密钥存储**。

1. 选择要连接的 AWS CloudHSM 密钥库所在行。

   如果 AWS CloudHSM 密钥库的连接状态为 “**失败**”，则必须先[断开自定义密钥库](disconnect-keystore.md#disconnect-keystore-console)的连接，然后再进行连接。

1. 从 **Key store actions**（密钥存储操作）菜单中选择 **Connect**（连接）。

AWS KMS 开始连接您的自定义密钥存储库的过程。它将查找关联的 AWS CloudHSM 集群，构建所需的网络基础设施，连接到网络基础设施，以 `kmsuser` CU 身份登录到 AWS CloudHSM 集群，然后轮换 `kmsuser` 密码。当操作完成时，连接状态将变为**已连接**。

如果操作失败，则会出现一条描述失败原因的错误消息。在尝试再次连接之前，请[查看 AWS CloudHSM 密钥库的连接状态](view-keystore.md)。如果状态为**失败**，则必须先[断开自定义密钥存储](disconnect-keystore.md#disconnect-keystore-console)，然后再次连接。如果您需要帮助，请参阅[对自定义密钥存储进行故障排除](fix-keystore.md)。

**下一步：**[在密钥库中创建 KMS AWS CloudHSM 密钥](create-cmk-keystore.md)。

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

要连接已断开连接的 AWS CloudHSM 密钥库，请使用[ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html)操作。关联的 AWS CloudHSM 集群必须至少包含一个活动的 HSM，并且连接状态不能为。`FAILED`

连接过程需要较长时间才能完成；最多 20 分钟。除非该过程迅速失败，否则 操作将返回 HTTP 200 响应和无属性的 JSON 对象。但是，此初始响应不指示连接是否成功。要确定自定义密钥库的连接状态，请参阅[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)响应。

本部分中的示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。

要识别 AWS CloudHSM 密钥库，请使用其自定义密钥库 ID。您可以在控制台的**自定义密钥存储**页面上找到 ID，也可以使用不带参数的[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作来找到 ID。在运行此示例之前，请将示例 ID 替换为有效的 ID。

```
$ aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
```

要验证 AWS CloudHSM 密钥库是否已连接，请使用[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作。默认情况下，此操作将返回您的账户和区域中的所有自定义密钥存储。但您可以使用 `CustomKeyStoreId` 或 `CustomKeyStoreName` 参数（但不能同时使用两者）将响应限制到特定自定义密钥存储。`ConnectionState` 值 `CONNECTED` 表示自定义密钥存储已连接到其 AWS CloudHSM 集群。

**注意**  
该`CustomKeyStoreType`字段已添加到`DescribeCustomKeyStores`响应中，以区分 AWS CloudHSM 密钥存储库和外部密钥存储。

```
$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0
{
   "CustomKeyStores": [
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleCloudHSMKeyStore",
      "CloudHsmClusterId": "cluster-1a23b4cdefg",
      "CustomKeyStoreType": "AWS_CLOUDHSM",
      "TrustAnchorCertificate": "<certificate string appears here>",
      "CreationDate": "1.499288695918E9",
      "ConnectionState": "CONNECTED"
   ],
}
```

如果 `ConnectionState` 值为 FAILED，`ConnectionErrorCode` 元素将指示失败的原因。在这种情况下，在您的账户中找 AWS KMS 不到具有 AWS CloudHSM 集群 ID 的集群`cluster-1a23b4cdefg`。如果您删除了该集群，则可以[从原始集群的备份还原它](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)，然后[编辑自定义密钥存储的集群 ID](update-keystore.md)。有关响应连接错误代码的帮助信息，请参阅 [如何修复连接故障](fix-keystore.md#fix-keystore-failed)。

```
$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0
{
   "CustomKeyStores": [
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleKeyStore",
      "CloudHsmClusterId": "cluster-1a23b4cdefg",
      "CustomKeyStoreType": "AWS_CLOUDHSM",
      "TrustAnchorCertificate": "<certificate string appears here>",
      "CreationDate": "1.499288695918E9",
      "ConnectionState": "FAILED"
      "ConnectionErrorCode": "CLUSTER_NOT_FOUND"
   ],
}
```

# 断开密 AWS CloudHSM 钥库的连接
<a name="disconnect-keystore"></a>

当您断开 AWS CloudHSM 密钥存储库的连接时，会 AWS KMS 注销 AWS CloudHSM 客户端，断开与关联 AWS CloudHSM 群集的连接，并移除它为支持该连接而创建的网络基础架构。

当 AWS CloudHSM 密钥存储断开连接时，您可以管理密 AWS CloudHSM 钥存储及其 KMS 密钥，但不能在密钥存储中创建或使用 KMS 密钥。 AWS CloudHSM 密钥存储的连接状态为 `DISCONNECTED`，自定义密钥存储中的 KMS 密钥的[密钥状态](key-state.md)为 `Unavailable`，除非它们是 `PendingDeletion`。您可以随时重新连接 AWS CloudHSM 密钥库。

**注意**  
AWS CloudHSM 只有当密钥库从未`DISCONNECTED`连接过或您明确断开连接时，密钥库才会处于连接状态。如果您的 AWS CloudHSM 密钥库连接状态为，`CONNECTED`但您在使用它时遇到问题，请确保其关联的 AWS CloudHSM 集群处于活动状态并且至少包含一个处于活动状态的集群 HSMs。如需帮助解决连接失败问题，请参阅 [对自定义密钥存储进行故障排除](fix-keystore.md)。

当您断开自定义密钥存储时，密钥存储中的 KMS 密钥立即变得不可用（视最终一致性而定）。不过，在再次使用 KMS 密钥（例如解密数据密钥）之前，使用受 KMS 密钥保护的[数据密钥](data-keys.md)加密的资源不会受到影响。此问题会影响 AWS 服务，因为许多服务使用数据密钥来保护您的资源。有关更多信息，请参阅 [不可用的 KMS 密钥如何影响数据密钥](unusable-kms-keys.md)。

**注意**  
虽然自定义密钥存储已断开连接，但在自定义密钥存储中创建 KMS 密钥或在加密操作中使用现有 KMS 密钥的所有尝试都将失败。此操作可以阻止用户存储和访问敏感数据。

为了更好地估计断开自定义密钥存储的影响，请在自定义密钥存储中[标识 KMS 密钥](find-cmk-in-keystore.md)，并[确定其过去的使用情况](deleting-keys-determining-usage.md)。

您可能会出于以下原因断开 AWS CloudHSM 密钥存储的连接：
+ **轮换 `kmsuser` 密码。**每当 AWS KMS 连接到 AWS CloudHSM 集群时，它就会更改 `kmsuser` 密码。要强制轮换密码，只需断开并重新连接。
+ **审计集 AWS CloudHSM 群中 KMS 密钥的密钥材料**。当您断开自定义密钥存储库的 AWS KMS 连接时，请注销 AWS CloudHSM 客户端中的[`kmsuser`加密用户](keystore-cloudhsm.md#concept-kmsuser)帐户。这样，您便能以 `kmsuser` CU 身份登录到集群并审核和管理 KMS 密钥的密钥材料。
+ 在 AWS CloudHSM 密钥存储中**立即禁用所有 KMS 密钥**。您可以使用 AWS 管理控制台 或[DisableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html)操作[禁用和重新启用密 AWS CloudHSM 钥](enabling-keys.md)存储中的 KMS 密钥。这些操作会快速完成，但它们一次只针对一个 KMS 密钥。断开 AWS CloudHSM 密钥存储库的连接会立即将密钥存储区中所有 KMS 密钥的密钥状态更改为`Unavailable`，从而阻止它们用于任何加密操作。 AWS CloudHSM 
+ **修复失败的连接尝试**。如果尝试连接 AWS CloudHSM 密钥库失败（自定义密钥库的连接状态为`FAILED`），则必须先断开 AWS CloudHSM 密钥库的连接，然后再尝试重新连接。

## 断开 AWS CloudHSM 密钥库的连接
<a name="disconnect-hsm-keystore"></a>

您可以在 AWS KMS 控制台中断开 AWS CloudHSM 密钥存储的连接，也可以使用该[DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisconnectCustomKeyStore.html)操作断开密钥存储的连接。

### 使用 AWS KMS 控制台断开连接
<a name="disconnect-keystore-console"></a>

要断开 AWS KMS 控制台中已连接的 AWS CloudHSM 密钥存储区的连接，请先从 “**自定义 AWS CloudHSM 密钥存储” 页面中选择密钥存储库**。

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

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

1. 在导航窗格中，选择**自定义密钥存储**、**AWS CloudHSM 密钥存储**。

1. 选择要断开连接的外部密钥存储的行。

1. 从 **Key store actions**（密钥存储操作）菜单中选择 **Disconnect**（断开连接）。

当操作完成时，连接状态将从**正在断开**变为**已断开连接**。如果操作失败，则会出现一条错误消息，描述问题并提供有关如何修复它的帮助。如果您需要更多帮助，请参阅[对自定义密钥存储进行故障排除](fix-keystore.md)。

### 使用 AWS KMS API 断开连接
<a name="disconnect-keystore-api"></a>

要断开连接的 AWS CloudHSM 密钥存储库，请使用[DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisconnectCustomKeyStore.html)操作。如果操作成功，则 AWS KMS 返回一个 HTTP 200 响应和一个没有属性的 JSON 对象。

本部分中的示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。

此示例断开 AWS CloudHSM 密钥库的连接。在运行此示例之前，请将示例 ID 替换为有效的 ID。

```
$ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
```

要验证 AWS CloudHSM 密钥存储是否已断开连接，请使用[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作。默认情况下，此操作将返回您的账户和区域中的所有自定义密钥存储。但您可以使用 `CustomKeyStoreId` 和 `CustomKeyStoreName` 参数（但不能同时使用两者）将响应限制到特定自定义密钥存储。的`ConnectionState`值`DISCONNECTED`表示此示例 AWS CloudHSM 密钥存储未连接到其 AWS CloudHSM 集群。

```
$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0
{
   "CustomKeyStores": [
      "CloudHsmClusterId": "cluster-1a23b4cdefg",
      "ConnectionState": "DISCONNECTED",
      "CreationDate": "1.499288695918E9",
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleKeyStore",
      "CustomKeyStoreType": "AWS_CLOUDHSM",
      "TrustAnchorCertificate": "<certificate string appears here>"
   ],
}
```

# 删除密 AWS CloudHSM 钥库
<a name="delete-keystore"></a>

删除 AWS CloudHSM 密钥库时， AWS KMS 会从 KMS 中删除有关该 AWS CloudHSM 密钥存储的所有元数据，包括有关其与 AWS CloudHSM 集群关联的信息。此操作不会影响集 AWS CloudHSM 群 HSMs、其或其用户。您可以创建与同一 AWS CloudHSM 集群关联的新 AWS CloudHSM 密钥库，但无法撤消删除操作。

您只能删除与其 AWS CloudHSM 集群断开连接且不包含任何 AWS CloudHSM 密钥存储的密钥库 AWS KMS keys。在删除自定义密钥存储之前，请执行以下操作。
+ 验证您是否永远不需要将密钥存储中的任何 KMS 密钥用于任何[加密操作](manage-cmk-keystore.md#use-cmk-keystore)。然后从密钥存储中执行所有 KMS 密钥的[计划删除](deleting-keys.md#delete-cmk-keystore)。有关在密钥库中查找 KMS 密 AWS CloudHSM 钥的帮助，请参阅[在密钥库中查找 KMS AWS CloudHSM 密钥](find-cmk-in-keystore.md)。
+ 确认已删除所有 KMS 密钥。要查看密钥库中的 KMS AWS CloudHSM 密钥，请参阅[识别密钥库中的 KMS AWS CloudHSM 密钥](identify-key-types.md#identify-key-hsm-keystore)。
+ [断开 AWS CloudHSM 密钥库](disconnect-keystore.md)与其集 AWS CloudHSM 群的连接。

与其删除 AWS CloudHSM 密钥库，不如考虑[将其与关联 AWS CloudHSM 集群断开连接](disconnect-keystore.md)。当 AWS CloudHSM 密钥库断开连接时，您可以管理 AWS CloudHSM 密钥库及其密钥库 AWS KMS keys。但是您不能在密钥库中创建或使用 KMS AWS CloudHSM 密钥。您可以随时重新连接 AWS CloudHSM 密钥库。

## 删除您的 AWS CloudHSM 密钥库
<a name="delete-hsm-keystore"></a>

您可以在 AWS KMS 控制台中或使用[DeleteCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteCustomKeyStore.html)操作来删除您的 AWS CloudHSM 密钥库。

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

要删除中的 AWS CloudHSM 密钥存储库 AWS 管理控制台，请先从**自定义 AWS CloudHSM 密钥存储库页面中选择密钥存储库**。

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

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

1. 在导航窗格中，选择**自定义密钥存储**、**AWS CloudHSM 密钥存储**。

1. 找到代表您要删除的 AWS CloudHSM 密钥库的行。如果 AWS CloudHSM 密钥库的 “**连接” 状态**不是 “**已断开连接**”，则必须先[断开 AWS CloudHSM 密钥库的](disconnect-keystore.md)连接，然后才能将其删除。

1. 从 **Key store actions**（密钥存储操作）菜单中选择 **Delete**（删除）。

操作完成后，将显示一条成功消息，并且 AWS CloudHSM 密钥库不再出现在密钥库列表中。如果操作失败，则会显示一条错误消息，描述问题并提供有关如何解决该问题的帮助。如果您需要更多帮助，请参阅[对自定义密钥存储进行故障排除](fix-keystore.md)。

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

要删除密 AWS CloudHSM 钥库，请使用[DeleteCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteCustomKeyStore.html)操作。如果操作成功，则 AWS KMS 返回一个 HTTP 200 响应和一个没有属性的 JSON 对象。

首先，请验证 AWS CloudHSM 密钥库中是否不包含任何密钥 AWS KMS keys。您无法删除包含 KMS 密钥的自定义密钥存储。第一个示例命令使用[ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)和[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)在 AWS CloudHSM 密钥库 AWS KMS keys 中使用示例*cks-1234567890abcdef0*自定义密钥库 ID 进行搜索。在此情况下，该命令不会返回任何 KMS 密钥。如果是，请使用该[ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html)操作安排每个 KMS 密钥的删除。

------
#### [ Bash ]

```
for key in $(aws kms list-keys --query 'Keys[*].KeyId' --output text) ; 
do aws kms describe-key --key-id $key | 
grep '"CustomKeyStoreId": "cks-1234567890abcdef0"' --context 100; done
```

------
#### [ PowerShell ]

```
PS C:\> Get-KMSKeyList | Get-KMSKey | where CustomKeyStoreId -eq 'cks-1234567890abcdef0'
```

------

接下来，断开 AWS CloudHSM 密钥库的连接。此示例命令使用[DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisconnectCustomKeyStore.html)操作断开 AWS CloudHSM 密钥库与其 AWS CloudHSM 集群的连接。在运行此命令之前，请将示例自定义密钥存储 ID 替换为有效 ID。

------
#### [ Bash ]

```
$ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
```

------
#### [ PowerShell ]

```
PS C:\> Disconnect-KMSCustomKeyStore -CustomKeyStoreId cks-1234567890abcdef0
```

------

断开自定义密钥库的连接后，您可以使用[DeleteCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteCustomKeyStore.html)操作将其删除。

------
#### [ Bash ]

```
$ aws kms delete-custom-key-store --custom-key-store-id cks-1234567890abcdef0
```

------
#### [ PowerShell ]

```
PS C:\> Remove-KMSCustomKeyStore -CustomKeyStoreId cks-1234567890abcdef0
```

------

# 对自定义密钥存储进行故障排除
<a name="fix-keystore"></a>

AWS CloudHSM 密钥存储库旨在提供可用性和弹性。但是，为了保持 AWS CloudHSM 密钥库的正常运行，可能需要修复一些错误情况。

**Topics**
+ [如何修复不可用的 KMS 密钥](#fix-unavailable-cmks)
+ [如何修复失败的 KMS 密钥](#fix-cmk-failed)
+ [如何修复连接故障](#fix-keystore-failed)
+ [如何响应加密操作失败](#fix-keystore-communication)
+ [如何修复无效的 `kmsuser` 凭证](#fix-keystore-password)
+ [如何删除孤立密钥材料](#fix-keystore-orphaned-key)
+ [如何恢复 KMS 密钥的已删除密钥材料](#fix-keystore-recover-backing-key)
+ [如何以 `kmsuser` 身份登录](#fix-login-as-kmsuser)

## 如何修复不可用的 KMS 密钥
<a name="fix-unavailable-cmks"></a>

密[钥库 AWS KMS keys 中的密 AWS CloudHSM 钥状态](key-state.md)通常为`Enabled`。与所有 KMS 密钥一样，当您在密钥存储中禁用 KMS 密钥或安排将其删除时，密钥状态会发生变化。 AWS CloudHSM 但是，与其他 KMS 密钥不同，自定义密钥存储中的 KMS 密钥还可具有[密钥状态](key-state.md) `Unavailable`。

密钥状态 `Unavailable` 表示 KMS 密钥位于被故意[断开连接](disconnect-keystore.md)的自定义密钥存储中，并且尝试重新连接该集群（如果有）失败。当某个 KMS 密钥不可用时，您可以查看和管理该 KMS 密钥，但不能将其用于[加密操作](manage-cmk-keystore.md#use-cmk-keystore)。

要查找 KMS 密钥的密钥状态，请在 **Customer managed keys**（客户托管密钥）页面上，查看 KMS 密钥的 **Status**（状态）字段。或者，使用[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)操作并查看响应中的`KeyState`元素。有关更多信息，请参阅 [识别和查看密钥](viewing-keys.md)。

已断开的自定义密钥存储中的 KMS 密钥的密钥状态将为 `Unavailable` 或 `PendingDeletion`。计划从自定义密钥存储中删除的 KMS 密钥的密钥状态为 `Pending Deletion`，即使自定义密钥存储已断开连接也是如此。这使您可以取消计划的密钥删除而无需重新连接自定义密钥存储。

要修复不可用的 KMS 密钥，请[重新连接自定义密钥存储](disconnect-keystore.md)。重新连接自定义密钥存储后，自定义密钥存储中的 KMS 密钥的密钥状态将自动还原到之前的状态，例如 `Enabled` 或 `Disabled`。待删除的 KMS 密钥将保持 `PendingDeletion` 状态。但是，当问题仍然存在时，[启用和禁用不可用的 KMS 密钥](enabling-keys.md)不会更改其密钥状态。仅当密钥变得可用时，启用或禁用操作才会生效。

如需帮助解决失败的连接，请参阅[如何修复连接故障](#fix-keystore-failed)。

## 如何修复失败的 KMS 密钥
<a name="fix-cmk-failed"></a>

在密钥存储中 AWS CloudHSM 创建和使用 KMS 密钥时出现问题可能是由于您的密 AWS CloudHSM 钥存储库、其关联的 AWS CloudHSM 集群、KMS 密钥或其密钥材料出现问题所致。

当 AWS CloudHSM 密钥存储与其 AWS CloudHSM 集群断开连接时，自定义密钥存储中 KMS 密钥的密钥状态为`Unavailable`。所有在已断开连接的密钥存储中创建 KMS AWS CloudHSM 密钥的请求都会返回`CustomKeyStoreInvalidStateException`异常。所有加密、解密、重新加密或生成数据密钥的请求都将返回 `KMSInvalidStateException` 异常。要修复此问题，[请重新连接 AWS CloudHSM 密钥库](connect-keystore.md)。

但是，即使密钥存储库中的密钥状态为`Enabled`且 AWS CloudHSM 密钥存储的连接状态为，您尝试使用密钥存储库中的 KMS 密 AWS CloudHSM 钥进行[加密操作](manage-cmk-keystore.md#use-cmk-keystore)也`Connected`可能会失败。这可能由以下任一情况导致。
+ KMS 密钥的密钥材料可能已从关联的 AWS CloudHSM 集群中删除。要进行调查，请[查找 KMS 密钥的密钥材料的密钥 ID](find-handle-for-cmk-id.md)，并在必要时尝试[恢复密钥材料](#fix-keystore-recover-backing-key)。
+ 所有 HSMs 内容均已从与 AWS CloudHSM 密钥库关联的 AWS CloudHSM 集群中删除。要在加密操作中使用密 AWS CloudHSM 钥存储中的 KMS 密钥，其 AWS CloudHSM 集群必须包含至少一个活动的 HSM。要验证 AWS CloudHSM 集群 HSMs 中的数量和状态，[请使用 AWS CloudHSM 控制台](https://docs.aws.amazon.com/cloudhsm/latest/userguide/add-remove-hsm.html)或[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。要向集群添加 HSM，请使用 AWS CloudHSM 控制台或[CreateHsm](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_CreateHsm.html)操作。
+ 与 AWS CloudHSM 密钥库关联的 AWS CloudHSM 集群已删除。要修复该问题，请[从与原始集群相关的备份创建一个集群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)，例如原始集群的备份或用于创建原始集群的备份。然后，在自定义密钥存储设置中[编辑集群 ID](update-keystore.md)。有关说明，请参阅[如何恢复 KMS 密钥的已删除密钥材料](#fix-keystore-recover-backing-key)。
+ 与自定义密钥库关联的 AWS CloudHSM 集群没有任何可用的 PKCS \$111 会话。这种情况通常发生在高突发流量期间，此时需要额外的会话来服务流量。要响应带有关 PKCS \$111 会话的错误消息的 `KMSInternalException`，请退后并重试该请求。

## 如何修复连接故障
<a name="fix-keystore-failed"></a>

如果您尝试将[AWS CloudHSM 密钥库连接到](connect-keystore.md)其 AWS CloudHSM 集群，但操作失败，则 AWS CloudHSM 密钥库的连接状态将更改为`FAILED`。要查找 AWS CloudHSM 密钥库的连接状态，请使用 AWS KMS 控制台或[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作。

另外，由于容易检测到集群配置错误，一些连接尝试会很快失败。在这种情况下，连接状态仍为 `DISCONNECTED`。这些失败将返回错误消息或[例外](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html#API_ConnectCustomKeyStore_Errors)来说明尝试失败的原因。查看异常描述和[集群要求](create-keystore.md#before-keystore)，修复问题，必要时[更新 AWS CloudHSM 密钥库](update-keystore.md)，然后尝试重新连接。

当连接状态为时`FAILED`，运行[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作并查看响应中的`ConnectionErrorCode`元素。

**注意**  
当 AWS CloudHSM 密钥库的连接状态为时`FAILED`，必须先[断开 AWS CloudHSM 密钥库的连接](disconnect-keystore.md)，然后才能尝试重新连接。您无法将密 AWS CloudHSM 钥库与`FAILED`连接状态相连接。
+ `CLUSTER_NOT_FOUND`表示找 AWS KMS 不到具有指定 AWS CloudHSM 集群 ID 的集群。这可能是因为向 API 操作提供了错误的集群 ID，或者集群被删除而不是被替换。要修复此错误，请验证集群 ID，例如使用 AWS CloudHSM 控制台或[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。如果集群已被删除，请[从源的最新备份创建一个集群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)。然后，[断开 AWS CloudHSM 密钥存储](disconnect-keystore.md)的连接，[编辑 AWS CloudHSM 密钥库](update-keystore.md)集群 ID 设置，然后将[AWS CloudHSM 密钥库重新连接到](connect-keystore.md)集群。
+ `INSUFFICIENT_CLOUDHSM_HSMS`表示关联的 AWS CloudHSM 群集不包含任何群集 HSMs。要连接，集群必须至少具有一个 HSM。要查找集群 HSMs 中的数量，请使用[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。要解决此错误，请[添加至少一个 HSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-hsm.html) 到集群。如果您添加多个 HSMs，最好在不同的可用区中创建它们。
+ `INSUFFICIENT_FREE_ADDRESSES_IN_SUBNET`表示 AWS KMS 无法将 AWS CloudHSM 密钥库连接到其 AWS CloudHSM 集群，因为至少有一个[与该集群关联的私有子网](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-subnets.html)没有任何可用的 IP 地址。 AWS CloudHSM 密钥库连接需要在每个关联的私有子网中有一个空闲的 IP 地址，但最好使用两个。

  您[无法将 IP 地址](https://aws.amazon.com/premiumsupport/knowledge-center/vpc-ip-address-range/)（CIDR 块）添加到现有子网。如有可能，请移动或删除在子网中使用 IP 地址的其他资源，例如未使用的 EC2 实例或弹性网络接口。否则，您可以使用[具有[更多可用地址空间](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-sizing)的新私有子网或现有私有子网使用 AWS CloudHSM 群集的最新备份创建](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)集群。然后，要将新集群与您的 AWS CloudHSM 密钥存储关联，[请断开自定义密钥存储](disconnect-keystore.md)的连接，将 AWS CloudHSM 密钥存储的[集群 ID 更改](update-keystore.md)为新集群的 ID，然后尝试重新连接。
**提示**  
为避免[重置`kmsuser`密码](#fix-keystore-password)，请使用 AWS CloudHSM 群集的最新备份。
+ `INTERNAL_ERROR`表示由于内部错误而 AWS KMS 无法完成请求。重试请求。对于`ConnectCustomKeyStore`请求，请先断开 AWS CloudHSM 密钥库的连接，然后再尝试重新连接。
+ `INVALID_CREDENTIALS`表示 AWS KMS 无法登录关联的 AWS CloudHSM 集群，因为其`kmsuser`账户密码不正确。如需帮助解决此错误，请参阅[如何修复无效的 `kmsuser` 凭证](#fix-keystore-password)。
+ `NETWORK_ERRORS` 通常表示暂时性网络问题。[断开 AWS CloudHSM 密钥库](disconnect-keystore.md)的连接，等待几分钟，然后再次尝试连接。
+ `SUBNET_NOT_FOUND`表示 AWS CloudHSM 群集配置中至少有一个子网已被删除。如果在群集配置中找 AWS KMS 不到所有子网，则尝试将 AWS CloudHSM 密钥库连接到 AWS CloudHSM 集群失败。

  要修复此错误[，请使用同一集群的最新备份创建](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html) AWS CloudHSM 集群。（此过程使用 VPC 和私有子网创建新的集群配置。） 验证新集群是否满足[自定义密钥存储的要求](create-keystore.md#before-keystore)，并记下新集群 ID。然后，要将新集群与您的 AWS CloudHSM 密钥存储关联，[请断开自定义密钥存储](disconnect-keystore.md)的连接，将 AWS CloudHSM 密钥存储的[集群 ID 更改](update-keystore.md)为新集群的 ID，然后尝试重新连接。
**提示**  
为避免[重置`kmsuser`密码](#fix-keystore-password)，请使用 AWS CloudHSM 群集的最新备份。
+ `USER_LOCKED_OUT` 表示 [`kmsuser` 加密用户 (CU) 账户](keystore-cloudhsm.md#concept-kmsuser)无法访问关联的 AWS CloudHSM 集群，因为失败的密码尝试过多。如需帮助解决此错误，请参阅[如何修复无效的 `kmsuser` 凭证](#fix-keystore-password)。

  要修复此错误，[请断开 AWS CloudHSM 密钥存储的连接](disconnect-keystore.md)，然后在 CloudHSM CLI 中使用[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html)命令来更改帐户密码。`kmsuser`然后，[编辑自定义密钥存储的 `kmsuser` 密码设置](update-keystore.md)并重试连接。如需帮助，请使用[如何修复无效的 `kmsuser` 凭证](#fix-keystore-password)主题中所述的过程。
+ `USER_LOGGED_IN`表示 `kmsuser` CU 账户已登录到关联的 AWS CloudHSM 集群。这样可以 AWS KMS 防止轮换`kmsuser`账户密码和登录集群。要修复此错误，请从集群中注销 `kmsuser` CU。如果您更改了登录集群的`kmsuser`密码，则还必须更新密钥库的密 AWS CloudHSM 钥库密码值。有关帮助信息，请参阅 [如何注销并重新连接](#login-kmsuser-2)。
+ `USER_NOT_FOUND`表示在关联的 AWS CloudHSM 集群中找 AWS KMS 不到 `kmsuser` CU 账户。要修复此错误，[请在集群中创建一个 `kmsuser` CU 账户](create-keystore.md#kmsuser-concept)，然后[更新密钥库的 AWS CloudHSM 密钥库密码值](update-keystore.md)。有关帮助信息，请参阅 [如何修复无效的 `kmsuser` 凭证](#fix-keystore-password)。

## 如何响应加密操作失败
<a name="fix-keystore-communication"></a>

在自定义密钥存储中使用 KMS 密钥的加密操作可能会失败，并显示 `KMSInvalidStateException`。以下错误消息可能附带 `KMSInvalidStateException`。


|  | 
| --- |
| KMS 无法与您的 CloudHSM 集群进行通信。这可能是暂时的网络问题。如果您反复看到此错误，请验证 AWS CloudHSM 集群 VPC 的网络 ACLs 和安全组规则是否正确。 | 
+ 虽然它是 HTTPS 400 错误，但它可能是由于暂时的网络问题引起的。要进行响应，首先重试请求。但是，如果继续失败，请检查网络组件的配置。此错误很可能是由于网络组件（例如阻止传出流量的防火墙规则或 VPC 安全组规则）的错误配置引起的。例如，KMS 无法通过 AWS CloudHSM 集群进行通信 IPv6。有关先决条件的详细信息，请参阅[创建密 AWS CloudHSM 钥库](create-keystore.md)。


|  | 
| --- |
| KMS 无法与您的 AWS CloudHSM 集群通信，因为 kmsuser 已被锁定。如果您反复看到此错误，请断开 AWS CloudHSM 密钥存储并重置 kmsuser 帐户密码。更新自定义密钥存储的 kmsuser 密码，然后重试请求。 | 
+ 此错误消息表示 [`kmsuser` 加密用户（CU）账户](keystore-cloudhsm.md#concept-kmsuser)无法访问关联的 AWS CloudHSM 集群，因为失败的密码尝试过多。如需帮助解决此错误，请参阅[如何断开和登录](#login-kmsuser-1)。

## 如何修复无效的 `kmsuser` 凭证
<a name="fix-keystore-password"></a>

[连接 AWS CloudHSM 密钥库](connect-keystore.md)时，以[`kmsuser`加密用户](keystore-cloudhsm.md#concept-kmsuser) (CU) 的身份 AWS KMS 登录到关联的 AWS CloudHSM 集群。它会一直保持登录状态，直到 AWS CloudHSM 密钥存储断开连接。[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 响应显示 `ConnectionState` 值 `FAILED` 以及 `ConnectionErrorCode` 值 `INVALID_CREDENTIALS`，如以下示例中所示。

如果您断开 AWS CloudHSM 密钥存储的连接并更改了`kmsuser`密码，则 AWS KMS 无法使用 `kmsuser` CU 账户的凭据登录 AWS CloudHSM 集群。因此，所有连接 AWS CloudHSM 密钥库的尝试都失败了。`DescribeCustomKeyStores` 响应显示 `ConnectionState` 值 `FAILED` 以及 `ConnectionErrorCode` 值 `INVALID_CREDENTIALS`，如以下示例中所示。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore
{
   "CustomKeyStores": [
      "CloudHsmClusterId": "cluster-1a23b4cdefg",
      "ConnectionErrorCode": "INVALID_CREDENTIALS"
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleKeyStore",
      "TrustAnchorCertificate": "<certificate string appears here>",
      "CreationDate": "1.499288695918E9",
      "ConnectionState": "FAILED"
   ],
}
```

此外，在使用不正确的密码登录到集群的尝试失败五次后， AWS CloudHSM 将锁定用户账户。要登录到集群，您必须更改账户密码。

如果在尝试以 `kmsuser` CU 身份登录集群时 AWS KMS 收到锁定响应，则连接 AWS CloudHSM 密钥库的请求将失败。[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)响应中包含`ConnectionState`的`ConnectionErrorCode`值为`FAILED`，值为`USER_LOCKED_OUT`，如以下示例所示。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore
{
   "CustomKeyStores": [
      "CloudHsmClusterId": "cluster-1a23b4cdefg",
      "ConnectionErrorCode": "USER_LOCKED_OUT"
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleKeyStore",
      "TrustAnchorCertificate": "<certificate string appears here>",
      "CreationDate": "1.499288695918E9",
      "ConnectionState": "FAILED"
   ],
}
```

要修复上述任一状况，请使用以下过程。

1. [断开 AWS CloudHSM 密钥库的](disconnect-keystore.md)连接。

1. 运行[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作并查看响应中`ConnectionErrorCode`元素的值。
   + 如果 `ConnectionErrorCode` 值为 `INVALID_CREDENTIALS`，请确定 `kmsuser` 账户的当前密码。必要时，请使用 CloudHSM CLI 中的 [https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html) 命令将密码设置为已知值。
   + 如果 `ConnectionErrorCode` 值是 `USER_LOCKED_OUT`，您必须使用 CloudHSM CLI 中的 [https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html) 命令更改 `kmsuser` 密码。

1. [编辑 `kmsuser` 密码设置](update-keystore.md)，使其与当前集群中的 `kmsuser` 密码匹配。此操作将告知 AWS KMS 要用来登录到集群的密码。它不会更改集群中的 `kmsuser` 密码。

1. [连接自定义密钥存储](connect-keystore.md)。

## 如何删除孤立密钥材料
<a name="fix-keystore-orphaned-key"></a>

计划从密钥库中删除 KMS AWS CloudHSM 密钥后，您可能需要从关联的 AWS CloudHSM 集群中手动删除相应的密钥材料。

在密钥存储中创建 KMS AWS CloudHSM 密钥时， AWS KMS 会在中创建 KMS 密钥元数据， AWS KMS 并在关联的 AWS CloudHSM 集群中生成密钥材料。当您计划删除密钥存储中的 KMS 密 AWS CloudHSM 钥时，等待期过后， AWS KMS 会删除 KMS 密钥元数据。然后 AWS KMS 尽最大努力从 AWS CloudHSM 集群中删除相应的密钥材料。如果 AWS KMS 无法访问集群，例如当集群与 AWS CloudHSM 密钥库断开连接或`kmsuser`密码更改时，尝试可能会失败。 AWS KMS 不会尝试从群集备份中删除密钥材料。

AWS KMS 在 AWS CloudTrail 日志`DeleteKey`的事件条目中报告其尝试从集群中删除密钥材料的结果。它会在 `additionalEventData` 元素的 `backingKeysDeletionStatus` 元素中显示，如以下示例条目所示。该条目还包括 KMS 密钥 ARN、 AWS CloudHSM 集群 ID 和密钥材料的 ID (`backing-key-id`)。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "accountId": "111122223333",
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2021-12-10T14:23:51Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DeleteKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": null,
    "responseElements":  {
        "keyId":"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "additionalEventData": {
        "customKeyStoreId": "cks-1234567890abcdef0",
        "clusterId": "cluster-1a23b4cdefg",
        "backingKeys": "[{\"backingKeyId\":\"backing-key-id\"}]",
        "backingKeysDeletionStatus": "[{\"backingKeyId\":\"backing-key-id\",\"deletionStatus\":\"FAILURE\"}]"
    },
    "eventID": "c21f1f47-f52b-4ffe-bff0-6d994403cf40",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:eu-west-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsServiceEvent",
    "recipientAccountId": "111122223333",
    "managementEvent": true,
    "eventCategory": "Management"
}
```

**注意**  
以下过程使用 AWS CloudHSM 客户端 SDK 5 命令行工具 [CloudHSM C](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html) LI。CloudHSM CLI 将 `key-handle` 替换为 `key-reference`。  
2025 年 1 月 1 日， AWS CloudHSM 将终止对客户端 SDK 3 命令行工具、CloudHSM 管理实用程序 (CMU) 和密钥管理实用程序 (KMU) 的支持。有关客户端 SDK 3 命令行工具和客户端 SDK 5 命令行工具之间区别的更多信息，请参阅《AWS CloudHSM 用户指南》**中的[从客户端 SDK 3 CMU 和 KMU 迁移到客户端 SDK 5 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-migrate-from-kmu-cmu.html)。

以下过程演示如何从关联的 AWS CloudHSM 集群中删除孤立的密钥材料。

1. 如果 AWS CloudHSM 密钥库尚未断开连接，请断开密钥库的连接，然后[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-login.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-login.html)，如中所述[如何断开和登录](#login-kmsuser-1)。
**注意**  
虽然自定义密钥存储已断开连接，但在自定义密钥存储中创建 KMS 密钥或在加密操作中使用现有 KMS 密钥的所有尝试都将失败。此操作可以阻止用户存储和访问敏感数据。

1. 使用 CloudHSM CLI 中的密[钥删除](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-key-delete.html)命令 HSMs 从集群中删除密钥。

   密钥存储中使用 KMS 密钥进行加密操作的所有 CloudTrail 日志条目都包含一个带有`customKeyStoreId`和`backingKey`的`additionalEventData`字段。 AWS CloudHSM `backingKeyId` 字段中返回的值是 CloudHSM 密钥 `id` 属性。我们建议通过筛选**密钥删除**操作`id`来删除您在 CloudTrail 日志中标识的孤立密钥材料。

   AWS CloudHSM 将该`backingKeyId`值识别为十六进制值。要按 `id` 筛选，必须在 `backingKeyId` 前面加上 `Ox`。例如，如果 CloudTrail 日志`backingKeyId`中的是`1a2b3c45678abcdef`，则可以按此进行筛选`0x1a2b3c45678abcdef`。

   以下示例从您的集群 HSMs 中删除密钥。已`backing-key-id`在 CloudTrail 日志条目中列出。在运行此命令之前，请将示例 `backing-key-id` 替换为您账户中的有效密钥 ID。

   ```
   aws-cloudhsm key delete --filter attr.id="0x<backing-key-id>"
   {
     "error_code": 0,
     "data": {
       "message": "Key deleted successfully"
     }
   }
   ```

1. 注销并重新连接 AWS CloudHSM 密钥库，如中所述。[如何注销并重新连接](#login-kmsuser-2)

## 如何恢复 KMS 密钥的已删除密钥材料
<a name="fix-keystore-recover-backing-key"></a>

如果删除的密钥材料，则 KMS 密钥将无法使用，并且无法解密在 KMS 密钥下加密的所有密文。 AWS KMS key 如果从关联的 AWS CloudHSM 集群中删除密钥存储区中 KMS AWS CloudHSM 密钥的密钥材料，则可能会发生这种情况。但是，可以恢复该密钥材料。

在密钥存储中创建 AWS KMS key （KMS AWS CloudHSM 密钥）时， AWS KMS 登录到关联的 AWS CloudHSM 集群并为 KMS 密钥创建密钥材料。它还会将密码更改为只有它知道的值，并且只要 AWS CloudHSM 密钥库已连接，它就会保持登录状态。由于只有密钥所有者（即创建密钥的 CU）才能删除密钥，因此不太可能 HSMs 意外删除密钥。

但是，如果从集群 HSMs 中删除 KMS 密钥的密钥材料，KMS 密钥的密钥状态最终会更改为`UNAVAILABLE`。如果您尝试使用 KMS 密钥进行加密操作，该操作将失败并出现 `KMSInvalidStateException` 异常。最重要的是，在 KMS 密钥下加密的任何数据都无法解密。

在某些情况下，您可以通过[从包含密钥材料的备份创建集群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)来恢复已删除的密钥材料。仅当在密钥存在且未被删除的情况下创建了一个备份时，此策略才有效。

使用以下过程恢复密钥材料。

1. 查找包含密钥材料的集群备份。备份还必须包含支持集群及其加密数据所需的所有用户和密钥。

   使用[DescribeBackups](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeBackups.html)操作列出集群的备份。然后，使用备份时间戳帮助您选择一个备份。要将输出限制为与 AWS CloudHSM 密钥库关联的集群，请使用`Filters`参数，如以下示例所示。

   ```
   $ aws cloudhsmv2 describe-backups --filters clusterIds=<cluster ID>
   {
       "Backups": [
           {
               "ClusterId": "cluster-1a23b4cdefg",
               "BackupId": "backup-9g87f6edcba",
               "CreateTimestamp": 1536667238.328,
               "BackupState": "READY"
           },
                ...
       ]
   }
   ```

1. [从所选备份创建集群](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)。验证备份是否包含已删除的密钥以及集群所需的其他用户和密钥。

1. [断开 AWS CloudHSM 密钥库](disconnect-keystore.md)的连接，以便您可以编辑其属性。

1. [编辑 AWS CloudHSM 密钥库的集群 ID](update-keystore.md)。输入您从备份创建的集群的集群 ID。由于该集群与原始集群共享备份历史记录，新集群 ID 应该是有效的。

1. [重新连接 AWS CloudHSM 密钥库](connect-keystore.md)。

## 如何以 `kmsuser` 身份登录
<a name="fix-login-as-kmsuser"></a>

要在 AWS CloudHSM 集群中为密钥存储创建和管理 AWS CloudHSM 密钥材料，请 AWS KMS 使用[`kmsuser`加密用户 (CU) 账户](keystore-cloudhsm.md#concept-kmsuser)。您在集群[中创建 `kmsuser` CU 账户](create-keystore.md#before-keystore)，并在创建 AWS CloudHSM 密钥库 AWS KMS 时提供其密码。

通常， AWS KMS 管理`kmsuser`账户。但是，对于某些任务，您需要断开 AWS CloudHSM 密钥存储的连接，以 `kmsuser` CU 身份登录集群，然后使用 C [loudHSM 命令行界面 (C](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html) LI)。

**注意**  
虽然自定义密钥存储已断开连接，但在自定义密钥存储中创建 KMS 密钥或在加密操作中使用现有 KMS 密钥的所有尝试都将失败。此操作可以阻止用户存储和访问敏感数据。

本主题介绍如何[断开 AWS CloudHSM 密钥库的连接并以身份登录](#login-kmsuser-1)`kmsuser`、运行 AWS CloudHSM 命令行工具，以及如何[注销和重新连接 AWS CloudHSM 密钥库](#login-kmsuser-2)。

**Topics**
+ [如何断开和登录](#login-kmsuser-1)
+ [如何注销并重新连接](#login-kmsuser-2)

### 如何断开和登录
<a name="login-kmsuser-1"></a>

每当需要以 `kmsuser` 加密用户身份登录到关联的集群时，请使用以下过程。

**注意**  
以下过程使用 AWS CloudHSM 客户端 SDK 5 命令行工具 [CloudHSM C](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html) LI。CloudHSM CLI 将 `key-handle` 替换为 `key-reference`。  
2025 年 1 月 1 日， AWS CloudHSM 将终止对客户端 SDK 3 命令行工具、CloudHSM 管理实用程序 (CMU) 和密钥管理实用程序 (KMU) 的支持。有关客户端 SDK 3 命令行工具和客户端 SDK 5 命令行工具之间区别的更多信息，请参阅《AWS CloudHSM 用户指南》**中的[从客户端 SDK 3 CMU 和 KMU 迁移到客户端 SDK 5 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-migrate-from-kmu-cmu.html)。

1. 如果 AWS CloudHSM 密钥存储尚未断开连接，请断开其连接。您可以使用 AWS KMS 控制台或 AWS KMS API。

   连接 AWS CloudHSM 密钥后 AWS KMS ，将以身份登录`kmsuser`。这将防止您以 `kmsuser` 身份登录或更改 `kmsuser` 密码。

   例如，此命令用于断开示例密钥存储的连接。[DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisconnectCustomKeyStore.html)将示例 AWS CloudHSM 密钥库 ID 替换为有效的密钥库 ID。

   ```
   $ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
   ```

1. 使用 **login** 命令并以管理员身份登录。使用《AWS CloudHSM 用户指南》**的[使用 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-getting-started.html#w17aac19c11c13b7) 部分中描述的步骤。

   ```
   aws-cloudhsm > login --username admin --role admin
             Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "admin",
       "role": "admin"
     }
   }
   ```

1. 使用 CloudHSM CLI 中的[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html)命令将账户密码更改为你知道`kmsuser`的密码。 （连接 AWS CloudHSM 密钥库时AWS KMS 轮换密码。） 密码必须由 7 到 32 个字母数字字符组成。它区分大小写，并且不能包含任何特殊字符。

1. 使用您设置的密码以 `kmsuser` 身份登录。有关详细说明，请参阅《AWS CloudHSM 用户指南》**中的[使用 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-getting-started.html#w17aac19c11c13b7) 部分。

   ```
   aws-cloudhsm > login --username kmsuser --role crypto-user
             Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "kmsuser",
       "role": "crypto-user"
     }
   }
   ```

### 如何注销并重新连接
<a name="login-kmsuser-2"></a>

每次需要以 `kmsuser` 加密用户身份注销并重新连接密钥存储时，请按以下步骤操作。

**注意**  
以下过程使用 AWS CloudHSM 客户端 SDK 5 命令行工具 [CloudHSM C](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html) LI。CloudHSM CLI 将 `key-handle` 替换为 `key-reference`。  
2025 年 1 月 1 日， AWS CloudHSM 将终止对客户端 SDK 3 命令行工具、CloudHSM 管理实用程序 (CMU) 和密钥管理实用程序 (KMU) 的支持。有关客户端 SDK 3 命令行工具和客户端 SDK 5 命令行工具之间区别的更多信息，请参阅《AWS CloudHSM 用户指南》**中的[从客户端 SDK 3 CMU 和 KMU 迁移到客户端 SDK 5 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-migrate-from-kmu-cmu.html)。

1. 执行任务，然后使用 CloudHSM CLI 中的 [https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-logout.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-logout.html) 命令注销。如果您不注销，重新连接 AWS CloudHSM 密钥库的尝试将失败。

   ```
   aws-cloudhsm  logout
   {
     "error_code": 0,
     "data": "Logout successful"
   }
   ```

1. 为自定义密钥存储[编辑 `kmsuser` 密码设置](update-keystore.md)。

   这 AWS KMS 会告诉集群`kmsuser`中的当前密码。如果您省略此步骤， AWS KMS 将无法以身份登录集群`kmsuser`，并且所有重新连接您的自定义密钥存储的尝试都将失败。您可以使用 AWS KMS 控制台或[UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html)操作的`KeyStorePassword`参数。

   例如，此命令 AWS KMS 告诉当前密码是`tempPassword`。将示例密码替换为实际密码。

   ```
   $ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --key-store-password tempPassword
   ```

1. 将 AWS KMS 密钥库重新连接到其 AWS CloudHSM 集群。将示例 AWS CloudHSM 密钥库 ID 替换为有效的密钥库 ID。在连接过程中，将`kmsuser`密码 AWS KMS 更改为只有它知道的值。

   [ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html)操作很快就会恢复，但连接过程可能需要很长时间。初始响应不指示连接过程是否成功。

   ```
   $ aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
   ```

1. 使用该[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作验证 AWS CloudHSM 密钥库是否已连接。将示例 AWS CloudHSM 密钥库 ID 替换为有效的密钥库 ID。

   在此示例中，连接状态字段显示 AWS CloudHSM 密钥库现已连接。

   ```
   $ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0
   {
      "CustomKeyStores": [
         "CustomKeyStoreId": "cks-1234567890abcdef0",
         "CustomKeyStoreName": "ExampleKeyStore",
         "CloudHsmClusterId": "cluster-1a23b4cdefg",
         "TrustAnchorCertificate": "<certificate string appears here>",
         "CreationDate": "1.499288695918E9",
         "ConnectionState": "CONNECTED"
      ],
   }
   ```