创建非对称 KMS 密钥 - AWS Key Management Service

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

创建非对称 KMS 密钥

您可以在 AWS KMS 控制台、使用 CreateKeyAPI 或使用AWS CloudFormation 模板创建非对称 KMS 密钥。非对称 KMS 密钥表示公钥和私钥对,可用于加密、签名或派生共享密钥。私钥保留在里面 AWS KMS。要下载公钥以供外部使用 AWS KMS,请参阅下载公有密钥

创建 KMS 密钥来加密您在 AWS 服务中存储或管理的数据时,请使用对称加密 KMS 密钥。 AWS 与集成的服务 AWS KMS 不支持非对称 KMS 密钥。有关如何确定是创建对称 KMS 密钥还是非对称 KMS 密钥的帮助信息,请参阅 选择一种 KMS 密钥类型

有关创建 KMS 密钥所需权限的信息,请参阅 创建 KMS 密钥的权限

创建非对称 KMS 密钥(控制台)

您可以使用创建非对称 AWS KMS keys (KMS 密钥)。 AWS Management Console 每个非对称 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. 要创建非对称 KMS 密钥,请在 Key type(密钥类型)中选择 Asymmetric(非对称)。

    有关如何在 AWS KMS 控制台中创建对称加密 KMS 密钥的信息,请参阅创建对称加密 KMS 密钥(控制台)

  6. 要创建用于公有密钥加密的非对称 KMS 密钥,请在 Key usage(密钥用法)中选择 Encrypt and decrypt(加密和解密)。或者,要创建用于签署消息和验证签名的非对称 KMS 密钥,请在 Key usage(密钥用法)中选择 Sign and verify(签名和验证)。要创建用于派生共享密钥的非对称 KMS 密钥,请在密钥使用中,选择密协议。

    有关选择密钥用法值的帮助信息,请参阅选择密钥用法

  7. 为非对称 KMS 密钥选择规范(密钥规范)。

    通常,选择哪个密钥规范取决于法规、安全或业务要求。也可能受需要加密或签名的消息大小的影响。一般来说,加密密钥越长,对暴力攻击的抵抗力越强。

    有关选择密钥规范的帮助信息,请参阅选择密钥规范

  8. 选择下一步

  9. 为 KMS 密钥键入别名。别名名称不能以 aws/ 开头。该aws/前缀由 Amazon Web Services 保留,用于 AWS 托管式密钥 在您的账户中表示。

    别名是一个友好的名称,可用于在控制台和某些 AWS KMS API 中识别 KMS 密钥。我们建议您选择一个别名,用来指示您计划保护的数据类型或计划与 KMS 密钥搭配使用的应用程序。

    在 AWS Management Console中创建 KMS 密钥时需要别名。使用CreateKey操作时无法指定别名,但可以使用控制台或CreateAlias操作为现有 KMS 密钥创建别名。有关更多信息,请参阅 使用别名

  10. (可选)为 KMS 密钥键入描述。

    输入一个描述,用来说明您计划保护的数据类型或计划与 KMS 密钥配合使用的应用程序。

    现在,除非密钥状态Pending DeletionPending Replica Deletion,否则您可以随时添加描述或更新描述。要添加、更改或删除现有客户托管密钥的描述,请在中编辑描述 AWS Management Console 或使用UpdateKeyDescription操作。

  11. (可选) 键入标签键和一个可选标签值。要向 KMS 密钥添加多个标签,请选择 Add tag(添加标签)。

    向 AWS 资源添加标签时, AWS 会生成一份成本分配报告,其中包含按标签汇总的使用量和成本。标签还可以用来控制对 KMS 密钥的访问。有关轮换 KMS 密钥的信息,请参阅 标记密钥AWS KMS 中的 ABAC

  12. 选择下一步

  13. 选择可管理 KMS 密钥的 IAM 用户和角色。

    注意

    此密钥策略赋予了对此 KMS 密钥的 AWS 账户 完全控制权。此控制权允许账户管理员使用 IAM policy 授予其他主体管理 KMS 密钥的权限。有关更多信息,请参阅 默认密钥策略

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

  14. (可选)要阻止选定 IAM 用户和角色删除此 KMS 密钥,请在页面底部的 Key deletion(密钥删除)部分中,清除 Allow key administrators to delete this key(允许密钥管理员删除此密钥)复选框。

  15. 选择下一步

  16. 选择可将 KMS 密钥用于加密操作的 IAM 用户和角色。

    注意

    此密钥策略赋予了对此 KMS 密钥的 AWS 账户 完全控制权。此控制权允许账户管理员使用 IAM policy 授予其他主体在加密操作中使用 KMS 密钥的权限。有关更多信息,请参阅 默认密钥策略

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

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

    注意

    若要允许外部账户中的主体使用 KMS 密钥,外部账户的管理员必须创建提供这些权限的 IAM policy。有关更多信息,请参阅 允许其他账户中的用户使用 KMS 密钥

  18. 选择 下一步

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

  20. 选择 Finish(完成)以创建 KMS 密钥。

创建非对称 KMS 密钥 (AWS KMS API)

您可以使用该CreateKey操作来创建非对称 AWS KMS key的。这些示例使用 AWS Command Line Interface (AWS CLI),但您可以使用任何受支持的编程语言。

创建非对称 KMS 密钥时,必须指定 KeySpec 参数,该参数决定了所创建的密钥类型。此外,您必须指定 ENCRYPT_DECRYPT、SIGN_VERIFY 或 KEY_AGEMENT 的KeyUsage值。创建 KMS 密钥后,这些属性无法更改。

CreateKey操作不允许您指定别名,但您可以使用该CreateAlias操作为新 KMS 密钥创建别名。

重要

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

以下示例使用 CreateKey 操作,创建一个 4096 位 RSA 密钥的非对称 KMS 密钥,用于公有密钥加密。

$ aws kms create-key --key-spec RSA_4096 --key-usage ENCRYPT_DECRYPT { "KeyMetadata": { "KeyState": "Enabled", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "KeyManager": "CUSTOMER", "Description": "", "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1569973196.214, "MultiRegion": false, "KeySpec": "RSA_4096", "CustomerMasterKeySpec": "RSA_4096", "KeyUsage": "ENCRYPT_DECRYPT", "EncryptionAlgorithms": [ "RSAES_OAEP_SHA_1", "RSAES_OAEP_SHA_256" ], "AWSAccountId": "111122223333", "Origin": "AWS_KMS", "Enabled": true } }

以下示例命令创建一个非对称 KMS 密钥,表示一对用于签名和验证的 ECDSA 密钥。不能创建用于加密和解密的椭圆曲线密钥对。

$ aws kms create-key --key-spec ECC_NIST_P521 --key-usage SIGN_VERIFY { "KeyMetadata": { "KeyState": "Enabled", "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1570824817.837, "Origin": "AWS_KMS", "SigningAlgorithms": [ "ECDSA_SHA_512" ], "Arn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "AWSAccountId": "111122223333", "KeySpec": "ECC_NIST_P521", "CustomerMasterKeySpec": "ECC_NIST_P521", "KeyManager": "CUSTOMER", "Description": "", "Enabled": true, "MultiRegion": false, "KeyUsage": "SIGN_VERIFY" } }

以下示例命令创建一个非对称 KMS 密钥,该密钥表示一对用于派生共享密钥的 ECDH 密钥。不能创建用于加密和解密的椭圆曲线密钥对。

$ aws kms create-key --key-spec ECC_NIST_P256 --key-usage KEY_AGREEMENT { "KeyMetadata": { "AWSAccountId": "111122223333", "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "Arn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": "2023-12-27T19:10:15.063000+00:00", "Enabled": true, "Description": "", "KeyUsage": "KEY_AGREEMENT", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "ECC_NIST_P256", "KeySpec": "ECC_NIST_P256", "KeyAgreementAlgorithms": [ "ECDH" ], "MultiRegion": false } }