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

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

在外部密钥存储中创建 KMS 密钥

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

与标准 KMS 密钥相比,外部密钥存储中 KMS 密钥的延迟、耐久性和可用性可能较差,因为这些密钥依赖位于 Amazon 外部的组件。在外部密钥存储中创建或使用 KMS 密钥之前,请验证您是否需要具有外部密钥存储属性的密钥。

注意

一些外部密钥管理器为在外部密钥存储中创建 KMS 密钥提供了更简单的方法。有关详细信息,请参阅外部密钥管理器的文档。

若要在外部密钥存储中创建 KMS 密钥,请指定以下内容:

  • 外部密钥存储的 ID。

  • 外部密钥存储(EXTERNAL_KEY_STORE)的密钥材料源

  • 与外部密钥存储关联的外部密钥管理器中现有外部密钥的 ID。此外部密钥用作 KMS 密钥的密钥材料。创建 KMS 密钥后,您无法更改外部密钥 ID。

    Amazon KMS 在请求加密和解密操作时为外部密钥存储代理提供外部密钥 ID。Amazon KMS 无法直接访问您的外部密钥管理器或其任何加密密钥。

除了外部密钥,外部密钥存储中的 KMS 密钥还具有 Amazon KMS 密钥材料。使用 KMS 密钥加密的所有数据首先使用密钥的 Amazon KMS 密钥材料在 Amazon KMS 中加密,再由您的外部密钥管理器使用外部密钥进行加密。这种双重加密过程可确保外部密钥存储中受 KMS 密钥保护的加密文字至少与仅受 Amazon KMS 保护的加密文字一样强大。有关更多信息,请参阅 外部密钥存储的工作原理

CreateKey 操作成功后,新 KMS 密钥的密钥状态Enabled在外部密钥存储中查看 KMS 密钥时,您可以看到典型属性,例如其密钥 ID、密钥规格密钥用法密钥状态以及创建日期。但是您也可以看到外部密钥存储的 ID 和连接状态以及外部密钥的 ID。

如果您在外部密钥存储中创建 KMS 密钥的尝试失败,请查看错误消息以确定原因。错误消息可能表明外部密钥存储未连接(CustomKeyStoreInvalidStateException),您的外部密钥存储代理无法找到具有指定外部密钥 ID(XksKeyNotFoundException)的外部密钥,或者外部密钥已与同一外部密钥存储 XksKeyAlreadyInUseException 中的 KMS 密钥相关联。

.

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

外部密钥存储中 KMS 密钥的要求

若要在外部密钥存储中创建 KMS 密钥,外部密钥存储、KMS 密钥和用作 KMS 密钥外部加密密钥材料的外部密钥需要具有以下属性。

外部密钥存储要求

KMS 密钥要求

创建 KMS 密钥后,您无法更改这些属性。

  • 密钥规范:SYMMETRIC_DEFAULT

  • 密钥用法:ENCRYPT_DECRYPT

  • 密钥材料源:EXTERNAL_KEY_STORE

  • 多区域:FALSE

外部密钥要求

  • 256 位 AES 加密密钥(256 个随机位)。KeySpec 的外部密钥必须是 AES_256

  • 已启用并可供使用。Status 的外部密钥必须是 ENABLED

  • 已配置以进行密钥和解密。KeyUsage 的外部密钥必须包含 ENCRYPTDECRYPT

  • 仅与此 KMS 密钥结合使用。外部密钥存储中的每个 KMS key 都必须与不同的外部密钥关联。

    Amazon KMS 还建议将外部密钥专门用于外部密钥存储。此限制更易于识别和解决密钥问题。

  • 可由外部密钥存储的外部密钥存储代理访问。

    如果外部密钥存储代理无法使用指定的外部密钥 ID 找到密钥,则 CreateKey 操作将失败。

  • 可以处理您使用 Amazon Web Services 产生的预期流量。Amazon KMS 建议准备好外部密钥以每秒处理多达 1800 个请求。

在外部密钥存储中创建 KMS 密钥(控制台)

有两种方法可以在外部密钥存储中创建 KMS 密钥。

  • 方法 1(推荐):选择外部密钥存储,然后在该外部密钥存储中创建 KMS 密钥。

  • 方法 2:创建 KMS 密钥,然后指明该密钥在外部密钥存储中。

如果您使用方法 1,在创建密钥之前选择了外部密钥存储,Amazon KMS 将为您选择所有必需的 KMS 密钥属性并填写外部密钥存储的 ID。此方法可让您避免在创建 KMS 密钥时可能犯的错误。

注意

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

方法 1(推荐):在外部密钥存储中开始

若要使用此方法,请选择您的外部密钥存储,然后创建 KMS 密钥。Amazon KMS 控制台为您选择所有必需属性并填写外部密钥存储的 ID。此方法可让您避免在创建 KMS 密钥时可能犯的许多错误。

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

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

  3. 在导航窗格中,选择 Custom key stores(自定义密钥存储)、External key stores(外部密钥存储)。

  4. 选择外部密钥存储的名称。

  5. 在右上角,选择 Create a KMS key in this key store(在此密钥存储中创建 KMS 密钥)。

    如果连接外部密钥存储,系统将提示您将其连接。如果连接尝试失败,则需要解决问题并连接外部密钥存储,然后才能在其中创建新的 KMS 密钥。

    如果已连接外部密钥存储,您将被重定向到 Customer managed keys(客户托管密钥)页面以创建密钥。已为您选择了必需的 Key configuration(密钥配置)值。此外,外部密钥存储的自定义密钥存储 ID 已填写,但您可以对其进行更改。

  6. 外部密钥管理器中输入外部密钥的密钥 ID。此外部密钥必须满足与 KMS 密钥一起使用的要求。创建 KMS 密钥后,您无法更改此值。

    如果外部密钥有多个 ID,请输入外部密钥存储代理用于识别外部密钥的密钥 ID。

  7. 请确认您打算在指定的外部密钥存储中创建 KMS 密钥。

  8. 请选择 Next(下一步)

    此过程的其余步骤与创建标准 KMS 密钥的步骤相同。

  9. 为 KMS 密钥键入别名(必需)和描述(可选)。

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

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

  11. 请选择 Next(下一步)

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

    注意

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

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

  13. (可选)要阻止这些密钥管理员删除此 KMS 密钥,请清除 Allow key administrators to delete this key(允许密钥管理员删除此密钥)复选框。

    删除 KMS 密钥是一种具有破坏性且不可撤销的操作,将导致加密文字不可恢复。即使您拥有外部密钥材料,也无法在外部密钥存储中重新创建对称 KMS 密钥。但是,删除 KMS 密钥会影响关联的外部密钥。有关从外部密钥存储中删除 KMS 密钥的信息,请参阅 计划从外部密钥存储删除 KMS 密钥

  14. 请选择 Next(下一步)

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

    注意

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

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

  16. (可选)您可以允许其他 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 policy,以允许访问此 KMS 密钥。有关更多信息,请参阅 允许其他账户中的用户使用 KMS 密钥

  17. 选择 下一步

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

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

方法 2:在客户托管密钥中开始

此过程与使用 Amazon KMS 密钥材料创建对称加密密钥的过程相同。但是,在此过程中,您需要指定外部密钥存储的自定义密钥存储 ID 和外部密钥的密钥 ID。您还必须为外部密钥存储中的 KMS 密钥指定必需的属性值,例如密钥规格和密钥用法。

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

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

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

  4. 选择 Create key

  5. 选择 Symmetric (对称)

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

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

  8. 对于 Key material origin(密钥材料源),选择 External key store(外部密钥存储)。

  9. 请确认您打算在指定的外部密钥存储中创建 KMS 密钥。

  10. 请选择 Next(下一步)

  11. 请选择代表新 KMS 密钥外部密钥存储的行。

    您无法选择已断开连接的外部密钥存储。若要连接已断开连接的密钥存储,请选择密钥存储名称,然后从 Key store actions(密钥存储操作)中选择 Connect(连接)。有关更多信息,请参阅 连接外部密钥存储(控制台)

  12. 外部密钥管理器中输入外部密钥的密钥 ID。此外部密钥必须满足与 KMS 密钥一起使用的要求。创建 KMS 密钥后,您无法更改此值。

    如果外部密钥有多个 ID,请输入外部密钥存储代理用于识别外部密钥的密钥 ID。

  13. 请选择 Next(下一步)

    此过程的其余步骤与创建标准 KMS 密钥的步骤相同。

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

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

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

  16. 请选择 Next(下一步)

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

    注意

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

  18. (可选)要阻止这些密钥管理员删除此 KMS 密钥,请清除 Allow key administrators to delete this key(允许密钥管理员删除此密钥)复选框。

    删除 KMS 密钥是一种具有破坏性且不可撤销的操作,将导致加密文字不可恢复。即使您拥有外部密钥材料,也无法在外部密钥存储中重新创建对称 KMS 密钥。但是,删除 KMS 密钥会影响关联的外部密钥。有关从外部密钥存储中删除 KMS 密钥的信息,请参阅 计划从外部密钥存储删除 KMS 密钥

  19. 请选择 Next(下一步)

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

    注意

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

  21. (可选)您可以允许其他 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 policy,以允许访问此 KMS 密钥。有关更多信息,请参阅 允许其他账户中的用户使用 KMS 密钥

  22. 选择 下一步

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

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

该过程成功后,显示内容将在您选择的外部密钥存储中显示新 KMS 密钥。选择新 KMS 密钥的名称或别名时,其详细信息页面上的 Cryptographic configuration(加密配置)选项卡会显示 KMS 密钥的源 [External key store(外部密钥存储)],自定义密钥存储的名称、ID 和类型,以及外部密钥的 ID、密钥用法和状态。如果此过程失败,则会出现一条描述失败的错误消息。对于 ,请参阅 排查外部密钥存储的问题

提示

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

在外部密钥存储中创建 KMS 密钥(Amazon KMS API)

要在外部密钥存储中创建新的 KMS 密钥,请使用CreateKey操作。以下参数为必需参数:

  • Origin 值必须为 EXTERNAL_KEY_STORE

  • CustomKeyStoreId 参数标识您的外部密钥存储。指定外部密钥存储的 ConnectionState 必须是 CONNECTED。若要找到 CustomKeyStoreIdConnectionState,请使用 DescribeCustomKeyStores 操作。

  • XksKeyId 参数标识外部密钥。此外部密钥必须满足与 KMS 密钥关联的要求

您也可以使用 CreateKey 操作的任何可选参数,例如使用 PolicyTags(标签)参数。

注意

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

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

此示例命令使用该CreateKey操作在外部密钥存储中创建 KMS 密钥。响应包括 KMS 密钥的属性、外部密钥存储的 ID 以及外部密钥的 ID、用法和状态。有关这些字段的详细信息,请参阅 在外部密钥存储中查看 KMS 密钥

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

$ aws kms create-key --origin EXTERNAL_KEY_STORE --custom-key-store-id cks-1234567890abcdef0 --xks-key-id bb8562717f809024 { "KeyMetadata": { "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333", "CreationDate": "2022-12-02T07:48:55-07:00", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "CustomKeyStoreId": "cks-1234567890abcdef0", "Description": "", "Enabled": true, "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ], "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "KeyManager": "CUSTOMER", "KeySpec": "SYMMETRIC_DEFAULT", "KeyState": "Enabled", "KeyUsage": "ENCRYPT_DECRYPT", "MultiRegion": false, "Origin": "EXTERNAL_KEY_STORE", "XksKeyConfiguration": { "Id": "bb8562717f809024" } } }