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

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

在 AWS CloudHSM 密钥存储中创建 KMS 密钥

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

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

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

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

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

有关在 AWS CloudHSM 密钥存储中创建 KMS 密钥的操作的 AWS CloudTrail 日志示例,请参阅 CreateKey

在 AWS CloudHSM 密钥存储中创建 KMS 密钥(控制台)

按照以下过程在 AWS CloudHSM 密钥存储中创建对称加密 KMS 密钥。

注意

不要在别名、描述或标签中包含机密或敏感信息。这些字段可能以纯文本形式出现在 CloudTrail 日志和其他输出中。

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

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

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

  4. 选择 Create key

  5. 选择 Symmetric (对称)

  6. Key usage(密钥用法)中,已为您选择了 Encrypt and decrypt(加密和解密)选项。请勿对其进行更改。

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

  8. 对于密钥材料源,选择 AWS CloudHSM 密钥存储

    您不能在 AWS CloudHSM 密钥存储中创建多区域密钥。

  9. 请选择 Next(下一步)

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

    您选择的AWS CloudHSM密钥库的状态必须为 “已连接”。其关联的 AWS CloudHSM 集群必须处于活动状态且在不同的可用区中包含至少两个活动 HSM。

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

  11. 请选择 Next(下一步)

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

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

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

  14. 请选择 Next(下一步)

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

    注意

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

    IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的 IAM 安全最佳实践

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

  17. 请选择 Next(下一步)

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

    注意

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

    IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的 IAM 安全最佳实践

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

    注意

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

  20. 选择 下一步

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

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

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

提示

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

在 AWS CloudHSM 密钥存储中创建 KMS 密钥(API)

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

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

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

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

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

注意

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

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

下一个示例命令使用该DescribeClusters操作来验证与 (cluster-1a23b4cdefgExampleKeyStore) 关联的AWS 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 AWS CloudHSM 密钥。要在 AWS CloudHSM 密钥存储中创建 KMS 密钥,您必须提供 AWS CloudHSM 密钥存储的自定义密钥存储 ID,并指定 Origin 值为 AWS_CLOUDHSM

该响应包含自定义密钥存储和 AWS 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" ] } }