在自定义密钥存储中创建 KMS 密钥 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

在自定义密钥存储中创建 KMS 密钥

在创建自定义密钥存储后,您可以在密钥存储中创建 Amazon KMS keys。它们必须为具有 Amazon KMS 生成的密钥材料的对称 KMS 密钥。您不能创建非对称 KMS 密钥或带导入的密钥材料的 KMS 密钥,也不能在自定义密钥存储中使用对称 KMS 密钥来生成非对称数据密钥对。

在自定义密钥存储中使用和管理 KMS 密钥的方式,与在 Amazon KMS 中使用和管理的任何 KMS 密钥相同。例如,您可以执行以下任一操作:

  • 使用 KMS 密钥进行加密操作

  • 在 KMS 密钥上设置 IAM 和密钥策略。

  • 创建与 KMS 密钥关联的别名。

  • 将标签附加到 KMS 密钥。

  • 启用和禁用 KMS 密钥。

  • 计划 KMS 密钥的删除。

要在自定义密钥存储中创建 KMS 密钥,自定义密钥存储必须连接到其关联的 Amazon CloudHSM 集群,并且集群必须包含不同可用区中的至少两个活动 HSM。要查找 HSM 的连接状态和数量,请查看 Amazon Web Services Management Console 中的自定义密钥存储页面。在使用 API 操作时,请使用 DescribeCustomKeyStores 操作来验证自定义密钥存储是否已连接。使用 Amazon CloudHSM DescribeClusters 操作获取集群中的活动 HSM 数及其可用区。

在自定义密钥存储中创建 KMS 密钥时,Amazon KMS 会在 Amazon KMS 中创建 KMS 密钥。但是,它会在关联的 Amazon CloudHSM 集群中为 KMS 密钥创建密钥材料。具体而言,Amazon KMS 作为您创建的 kmsuser CU 登录到集群。然后,它在集群中创建持久的、不可提取的 256 位高级加密标准 (AES) 对称密钥。Amazon KMS 将密钥标签属性的值(仅在集群中可见)设置为 KMS 密钥的 Amazon Resource Name (ARN)。

当命令成功时,新 KMS 密钥的密钥状态Enabled,其源为 AWS_CLOUDHSM。创建任何 KMS 密钥后便无法更改其源。当您在控制台中或使用 DescribeKey 操作查看自定义密钥存储中的 KMS 密钥时,您会看到典型属性,例如其密钥 ID、密钥状态和创建日期。但是,您也可以查看自定义密钥存储 ID 和(可选)Amazon CloudHSM 集群 ID。有关详细信息,请参阅在自定义密钥存储中查看 KMS 密钥

如果您在自定义密钥存储中创建 KMS 密钥的尝试失败,请查看错误消息以帮助您确定原因。它可能表示未连接自定义密钥存储 (CustomKeyStoreInvalidStateException) 或关联的 Amazon CloudHSM 集群没有此操作所需的两个活动 HSM (CloudHsmClusterInvalidConfigurationException)。有关帮助信息,请参阅对自定义密钥存储进行故障排除

在自定义密钥存储中创建 KMS 密钥(控制台)

使用以下过程在自定义密钥存储中创建 Amazon KMS key。

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

  2. 要更改 Amazon 区域,请使用页面右上角的 Region selector (区域选择器)。

  3. 在导航窗格中,选择客户托管密钥

  4. 选择 Create key

  5. 选择 Symmetric (对称)

    无法在自定义密钥存储中创建非对称 KMS 密钥。

  6. 选择 Advanced options (高级选项)

  7. 对于 Key material origin (密钥材料源),选择 Custom key store (CloudHSM) (自定义密钥存储 (CloudHSM))

  8. 选择 Next (下一步)

  9. 为新 KMS 密钥选择自定义密钥存储。要创建新的自定义密钥存储,请选择 Create custom key store (创建自定义密钥存储)

    您选择的自定义密钥存储的状态必须为 CONNECTED。其关联的 Amazon CloudHSM 集群必须处于活动状态且在不同的可用区中包含至少两个活动 HSM。

    有关连接自定义密钥存储的帮助,请参阅连接和断开自定义密钥存储。有关添加 HSM 的帮助,请参阅 Amazon CloudHSM 用户指南中的添加 HSM

  10. 选择 Next (下一步)

  11. 为 KMS 密钥键入别名和可选的描述。

  12. (可选)。在 Add Tags(添加标签)页面上,添加标识或分类 KMS 密钥的标签。

    在将标签添加到 Amazon 资源时,Amazon 可生成成本分配报告,其中按标签汇总了使用情况和成本。标签还可以用来控制对 KMS 密钥的访问。有关轮换 KMS 密钥的信息,请参阅 标记密钥将 ABAC 用于 Amazon KMS

  13. 选择 Next (下一步)

  14. Key Administrators(密钥管理员)部分中,选择可管理 KMS 密钥的 IAM 用户和角色。有关更多信息,请参阅允许密钥管理员管理 KMS 密钥

    注意

    IAM 策略可以向其他 IAM 用户和角色授予使用 KMS 密钥的权限。

  15. (可选)要阻止这些密钥管理员删除此 KMS 密钥,请清除页面底部与 Allow key administrators to delete this key(允许密钥管理员删除此密钥)对应的框。

  16. 选择 Next (下一步)

  17. This account(此账户)部分中,选择此 Amazon Web Services 账户 中可以在加密操作中使用 KMS 密钥的 IAM 用户和角色。有关更多信息,请参阅允许密钥用户使用 KMS 密钥

    注意

    IAM 策略可以向其他 IAM 用户和角色授予使用 KMS 密钥的权限。

  18. (可选)您可以允许其他 Amazon Web Services 账户 将此 KMS 密钥用于加密操作。为此,请在页面底部的 Other Amazon Web Services 账户 (其他 Amazon Web Services 账户)部分中,选择 Add another Amazon Web Services 账户 (添加另一个 Amazon Web Services 账户)并输入外部账户的 Amazon Web Services 账户 ID。要添加多个外部账户,请重复此步骤。

    注意

    其他 Amazon Web Services 账户 的管理员还必须为其用户创建 IAM 策略,以允许访问此 KMS 密钥。有关更多信息,请参阅允许其他账户中的用户使用 KMS 密钥

  19. 选择 Next (下一步)

  20. 检视您选择的密钥设置。您仍然可以返回并更改所有设置。

  21. 完成后,选择 Finish(完成)以创建密钥。

该过程成功后,显示屏将在您选择的自定义密钥存储中显示新 KMS 密钥。当您选择新 KMS 密钥的名称或别名时,其详细信息页面会显示 KMS 密钥的源 (CloudHSM)、自定义密钥存储的名称和 ID 以及 Amazon CloudHSM 集群的 ID。如果此过程失败,则会出现一条描述失败的错误消息。

提示

要更轻松地识别自定义密钥存储中的 KMS 密钥,请在 Customer managed keys(客户托管密钥)页面上,将 Custom key store ID(自定义密钥存储 ID)列添加到显示中。单击右上角的齿轮图标并选择 Custom key store ID (自定义密钥存储 ID)

在自定义密钥存储中创建 KMS 密钥 (API)

要在自定义密钥存储中创建新的 Amazon KMS key(KMS 密钥),请使用 CreateKey 操作。使用 CustomKeyStoreId 参数识别自定义密钥存储并指定 OriginAWS_CLOUDHSM

您可能还需要使用 Policy 参数指定密钥策略。您可以随时更改密钥策略 (PutKeyPolicy) 并添加可选元素,例如描述标签

本部分中的示例使用 Amazon Command Line Interface (Amazon CLI),但您可以使用任何受支持的编程语言。

在以下示例中,首先调用 DescribeCustomKeyStores 操作以验证自定义密钥存储是否已连接到其关联的 Amazon CloudHSM 集群。默认情况下,此操作将返回您的账户和区域中的所有自定义密钥存储。要仅描述特定的自定义密钥存储,请使用 CustomKeyStoreIdCustomKeyStoreName 参数(而不是同时使用两者)。

在运行此命令之前,请将示例自定义密钥存储 ID 替换为有效的 ID。

$ 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" ], }

下一条示例命令使用 DescribeClusters 操作验证与 ExampleKeyStore (cluster-1a23b4cdefg) 关联的 Amazon CloudHSM 集群是否具有至少两个活动 HSM。如果集群的 HSM 少于两个,则 CreateKey 操作将失败。

$ aws cloudhsmv2 describe-clusters { "Clusters": [ { "SubnetMapping": { ... }, "CreateTimestamp": 1507133412.351, "ClusterId": "cluster-1a23b4cdefg", "SecurityGroup": "sg-865af2fb", "HsmType": "hsm1.medium", "VpcId": "vpc-1a2b3c4d", "BackupPolicy": "DEFAULT", "Certificates": { "ClusterCertificate": "-----BEGIN CERTIFICATE-----\...\n-----END CERTIFICATE-----\n" }, "Hsms": [ { "AvailabilityZone": "us-west-2a", "EniIp": "10.0.1.11", "ClusterId": "cluster-1a23b4cdefg", "EniId": "eni-ea8647e1", "StateMessage": "HSM created.", "SubnetId": "subnet-a6b10bd1", "HsmId": "hsm-abcdefghijk", "State": "ACTIVE" }, { "AvailabilityZone": "us-west-2b", "EniIp": "10.0.0.2", "ClusterId": "cluster-1a23b4cdefg", "EniId": "eni-ea8647e1", "StateMessage": "HSM created.", "SubnetId": "subnet-b6b10bd2", "HsmId": "hsm-zyxwvutsrqp", "State": "ACTIVE" }, ], "State": "ACTIVE" } ] }

此示例命令使用 CreateKey 操作在自定义密钥存储中创建 KMS 密钥。要在自定义密钥存储中创建 KMS 密钥,您必须提供自定义密钥存储名称的 ID,并指定 OriginAWS_CLOUDHSM

该响应包含自定义密钥存储和 Amazon CloudHSM 集群的 ID。

在运行此命令之前,请将示例自定义密钥存储 ID 替换为有效的 ID。

$ aws kms create-key --origin AWS_CLOUDHSM --custom-key-store-id cks-1234567890abcdef0 { "KeyMetadata": { "AWSAccountId": "111122223333", "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1.499288695918E9, "Description": "Example key", "Enabled": true, "MultiRegion": false, "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "KeyManager": "CUSTOMER", "KeyState": "Enabled", "KeyUsage": "ENCRYPT_DECRYPT", "Origin": "AWS_CLOUDHSM" "CloudHsmClusterId": "cluster-1a23b4cdefg", "CustomKeyStoreId": "cks-1234567890abcdef0" "KeySpec": "SYMMETRIC_DEFAULT", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }