创建 AWS CloudHSM 密钥存储 - AWS Key Management Service

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

创建 AWS CloudHSM 密钥存储

您可以在账户中创建一个或多个 AWS CloudHSM 密钥存储。每个 AWS CloudHSM 密钥存储均与相同 AWS 账户 和区域中的一个 AWS CloudHSM 集群关联。在创建 AWS CloudHSM 密钥存储之前,您需要汇编先决条件。然后,在使用 AWS CloudHSM 密钥存储之前,您必须连接它和它的 AWS CloudHSM 集群。

注意

如果您尝试创建一个属性值与断开连接的现有 AWS CloudHSM 密钥存储相同的 AWS CloudHSM 密钥存储,AWS KMS 不会创建新的 AWS CloudHSM 密钥存储,也不会引发异常或显示错误。相反,AWS KMS 将副本识别为重试的可能结果,并返回现有 AWS CloudHSM 密钥存储的 ID。

您无需立即连接 AWS CloudHSM 密钥存储。您可以将它保持断开状态,直到您准备好使用它为止。但是,要验证它是否已正确配置,您可能需要连接它查看其连接状态,然后断开它

汇编先决条件

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

在创建 AWS CloudHSM 密钥存储之前,请执行以下操作:

选择一个 AWS CloudHSM 集群

每个 AWS CloudHSM 密钥存储正好与一个 AWS CloudHSM 集群关联。在 AWS CloudHSM 密钥存储中创建 AWS KMS keys 时,AWS KMS 会在 AWS KMS 中创建 KMS 密钥元数据,例如 ID 和 Amazon 资源名称(ARN)。然后,它会在关联集群的 HSM 中创建密钥材料。您可以创建新的 AWS CloudHSM 集群或使用现有的集群。AWS KMS 不需要对集群的独占访问权限。

所选 AWS CloudHSM 集群将与 AWS CloudHSM 密钥存储永久关联。在创建 AWS CloudHSM 密钥存储后,您可以为关联集群更改集群 ID,但您指定的集群必须与原始集群共享备份历史记录。要使用不相关的集群,您需要创建新的 AWS CloudHSM 密钥存储。

您选择的 AWS CloudHSM 集群必须具有以下特征:

  • 集群必须处于活动状态

    您必须创建集群,将其初始化,安装适用于您的平台的 AWS CloudHSM 客户端软件,然后激活该集群。有关详细说明,请参阅《AWS CloudHSM User Guide》中的 Getting started with AWS CloudHSM

  • 集群必须与 AWS CloudHSM 密钥存储位于相同的账户和区域中。您无法将一个区域中的 AWS CloudHSM 密钥存储与另一个区域中的集群相关联。要在多个区域中创建密钥基础设施,必须在每个区域中创建 AWS CloudHSM 密钥存储和集群。

  • 集群不能与同一账户和区域中的其他自定义密钥存储关联。此账户和区域中的每个 AWS CloudHSM 密钥存储都必须与不同的 AWS CloudHSM 集群关联。您无法指定已与自定义密钥存储关联的集群,也无法指定与关联集群共享备份历史记录的集群。共享备份历史记录的集群具有相同的集群证书。要查看集群的集群证书,请使用 AWS CloudHSM 控制台或 DescribeClusters 操作。

    如果您将 AWS CloudHSM 集群备份到不同的区域,则它将被视为一个不同的集群,并且您可以将备份关联到其区域中的自定义密钥存储。但是,两个自定义密钥存储中的 KMS 密钥不可互操作,即使它们具有相同的备用密钥。AWS KMS 会将元数据绑定到加密文字,以确保只能由加密所用 KMS 密钥进行解密。

  • 必须在区域中的至少两个可用区中为集群配置私有子网。由于 AWS CloudHSM 并非在所有可用区中都受支持,因此,我们建议您在该区域的所有可用区中创建私有子网。您无法为现有集群重新配置子网,但可以从备份创建集群(在集群配置中具有不同的子网)。

    重要

    创建 AWS CloudHSM 密钥存储后,不要删除为其 AWS CloudHSM 集群配置的任何私有子网。如果 AWS KMS 未找到集群配置中的所有子网,则尝试连接到自定义密钥存储会失败,并显示 SUBNET_NOT_FOUND 连接错误状态。有关详细信息,请参阅如何修复连接故障

  • 集群的安全组 (cloudhsm-cluster-<cluster-id>-sg) 必须包含允许端口 2223-2225 上的 TCP 流量的入站规则和出站规则。入站规则中的 Source (源) 和出站规则中的 Destination (目标) 必须匹配安全组 ID。在创建集群时,默认情况下会设置这些规则。请勿删除或更改它们。

  • 集群必须在不同的可用区中包含至少两个活动 HSM。要验证 HSM 的数量,请使用 AWS CloudHSM 控制台或 DescribeClusters 操作。如有必要,您可以添加 HSM

查找信任锚点证书

在创建自定义密钥存储时,您必须将 AWS CloudHSM 集群的信任锚点证书上传到 AWS KMS。AWS KMS 需要信任锚点证书才能将 AWS CloudHSM 密钥存储连接到 AWS CloudHSM 集群。

每个活动 AWS CloudHSM 集群均有一个信任锚点证书。在初始化集群时,您将生成此证书,将它保存在 customerCA.crt 文件中,并将它复制到已连接到集群的主机。

为 AWS KMS 创建 kmsuser 加密用户

为了管理您的 AWS CloudHSM 密钥存储,AWS KMS 会登录到选定集群中的 kmsuser 加密用户(CU)账户。在创建您的 AWS CloudHSM 密钥存储之前,您必须创建 kmsuser CU。然后,在创建 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 CLI。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

  1. 按照《AWS CloudHSM 用户指南》开始使用 CloudHSM 命令行界面(CLI)主题中所述的入门步骤进行操作。

  2. 使用 user create 命令创建名为 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 密钥存储

汇编先决条件后,您可以在 AWS KMS 控制台中或使用 CreateCustomKeyStore 操作创建新的 AWS CloudHSM 密钥存储。

在 AWS Management Console 中创建 AWS CloudHSM 密钥存储时,您可以添加并创建先决条件作为工作流的一部分。但是,如果您事先已汇编这些先决条件,则此过程会更快。

  1. 登录到 AWS Management Console,然后通过以下网址打开 AWS Key Management Service(AWS KMS)控制台:https://console.aws.amazon.com/kms

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

  3. 在导航窗格中,选择自定义密钥存储AWS CloudHSM 密钥存储

  4. 选择创建密钥存储

  5. 为自定义密钥存储输入友好名称。该名称在您账户的所有自定义密钥存储中必须具备唯一性。

    重要

    不要在此字段中包含机密或敏感信息。此字段可能会以纯文本形式显示在 CloudTrail 日志和其他输出中。

  6. 为 AWS CloudHSM 密钥存储选择一个 AWS CloudHSM 集群。或者,要创建新的 AWS CloudHSM 集群,请选择 Create an AWS CloudHSM cluster(创建 Amazon CloudHSM 集群)链接。

    该菜单显示您账户和区域中尚未与 AWS CloudHSM 密钥存储关联的 AWS CloudHSM 集群。该集群必须满足要求(与关联自定义密钥存储相关)。

  7. 选择 Choose file(选择文件),然后为选定的 AWS CloudHSM 集群上传信任锚点证书。这是您在初始化集群时创建的 customerCA.crt 文件。

  8. 输入您在选定集群中创建的 kmsuser 加密用户 (CU) 的密码。

  9. 选择创建

当该过程成功时,新的 AWS CloudHSM 密钥存储将显示在账户和区域的 AWS CloudHSM 密钥存储列表中。如果该过程失败,则会显示一条错误消息,描述问题并提供有关如何解决该问题的帮助。如果您需要更多帮助,请参阅对自定义密钥存储进行故障排除

如果您尝试创建一个属性值与断开连接的现有 AWS CloudHSM 密钥存储相同的 AWS CloudHSM 密钥存储,AWS KMS 不会创建新的 AWS CloudHSM 密钥存储,也不会引发异常或显示错误。相反,AWS KMS 将副本识别为重试的可能结果,并返回现有 AWS CloudHSM 密钥存储的 ID。

下一步:不会自动连接新的 AWS CloudHSM 密钥存储。您必须先连接自定义密钥存储与其关联的 AWS CloudHSM 集群,然后才能在 AWS CloudHSM 密钥存储中创建 AWS KMS keys。

您可以使用 CreateCustomKeyStore 操作创建一个新的 AWS CloudHSM 密钥存储,该密钥存储与账户和区域中的 AWS CloudHSM 集群关联。这些示例使用 AWS Command Line Interface (AWS CLI),但您可以使用任何受支持的编程语言。

CreateCustomKeyStore 操作需要以下参数值。

  • CustomKeyStoreName – 自定义密钥存储的友好名称,该名称在账户中是唯一的。

    重要

    不要在此字段中包含机密或敏感信息。此字段可能会以纯文本形式显示在 CloudTrail 日志和其他输出中。

  • CloudHsmClusterId – 满足要求(与 AWS CloudHSM 密钥存储相关)的 AWS CloudHSM 集群的集群 ID。

  • KeyStorePassword – 指定集群中的 kmsuser CU 账户的密码。

  • TrustAnchorCertificate – 您初始化集群时创建的 customerCA.crt 文件的内容。

以下示例使用虚构的集群 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 }

如果操作失败,请更正异常指示的错误,然后重试。有关其他帮助,请参阅对自定义密钥存储进行故障排除

如果您尝试创建一个属性值与断开连接的现有 AWS CloudHSM 密钥存储相同的 AWS CloudHSM 密钥存储,AWS KMS 不会创建新的 AWS CloudHSM 密钥存储,也不会引发异常或显示错误。相反,AWS KMS 将副本识别为重试的可能结果,并返回现有 AWS CloudHSM 密钥存储的 ID。

下一步:要使用 AWS CloudHSM 密钥存储,可将它连接到其 AWS CloudHSM 集群