轮换客户主密钥 - AWS Key Management Service

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

轮换客户主密钥

加密最佳实践建议不要广泛重复使用加密密钥。要为您的 AWS Key Management Service (AWS KMS) 客户主密钥 (CMKs) 创建新的加密材料,您可以创建新的 CMKs,然后更改您的应用程序或别名以使用新的 CMKs。或者,您可以为现有客户托管的 CMK 启用自动密钥轮换。

当您为客户托管的 启用自动密钥轮换CMK时,AWS KMS 会每年为 CMK 生成新的加密材料。AWS KMS 还会永久保留 CMK 的较旧加密材料,以便用它来解密其加密的数据。AWS KMS 不会删除任何轮换的密钥材料,直到您删除 CMK。

密钥轮换仅更改 CMK 的备用密钥,该密钥是加密操作中使用的加密材料。是相同的逻辑资源,无论其备用密钥是否更改或更改了多少次。CMK的属性不会更改,如下图所示。CMK

自动密钥轮换具有以下优点:

  • 的属性,包括其密钥 ID、密钥 ARN、区域、策略和权限,在密钥轮换时不会发生变化。CMK

  • 您无需更改引用 CMK ID 或 ARN 的应用程序或别名。

  • 在启用密钥轮换后,AWS KMS 会每年自动轮换 CMK。您无需记住或计划更新。

但是,自动密钥轮换不会影响 CMK 保护的数据。它不会轮换 CMK 生成的数据密钥,也不会重新加密受 CMK 保护的任何数据,并且它不会减轻数据密钥泄露的影响。

您可能决定创建新的 CMK 并用于替代原来的 CMK。这跟轮换现有 CMK 中的密钥材料具有相同效果,因此这通常被视为手动轮换密钥。如果您想控制密钥轮换计划,手动轮换是很好的选择。它还提供了一种轮换不符合自动密钥轮换条件的 CMKs 的方法,包括非对称 CMKs、CMKs自定义密钥存储中的 以及具有CMKs导入的密钥材料的 。

密钥轮换和定价

轮换客户管理的 CMKs 可能会导致额外的月度费用。有关详细信息,请参阅 AWS Key Management Service 定价. 有关备用密钥和轮换的更多详细信息,请参阅AWS Key Management Service 加密详细信息

自动密钥轮换的工作方式

中的密钥轮换属于加密最佳实践,特点是透明且易于使用。AWS KMS 仅对AWS KMS客户托管的 支持可选的自动密钥轮换CMKs。

  • 备用密钥管理。 AWS KMS 保留 CMK 的所有备用密钥,即使密钥轮换处于禁用状态。只有删除 CMK 时才会删除备用密钥。当您使用 CMK 进行加密时,AWS KMS 会使用当前的备用密钥。当您使用 CMK 进行解密时,AWS KMS 会使用加密时所用的备用密钥。

  • 启用和禁用密钥轮换。默认情况下,在客户管理的 CMKs 上禁用自动密钥轮换。当您启用(或重新启用)密钥轮换时,AWS KMS 会在启用日期 365 天后自动轮换 CMK,并在此后每隔 365 天轮换一次。

  • DisabledCMKs. 禁用 CMK 后,AWS KMS 不会轮换它。但是,密钥轮换状态不会改变,并且在 CMK 处于禁用状态时无法更改。重新启用 CMK 后,如果备用密钥已超过 365 天,AWS KMS 会立即轮换,并在此后每隔 365 天轮换一次。如果备用密钥少于 365 天,AWS KMS 会恢复原始密钥轮换计划。

  • CMKs 待删除。 当CMK处于待删除状态时,AWS KMS 不会轮换它。密钥轮换状态设为 false,处于待删除状态时不能更改。如果删除被取消,将恢复之前的密钥轮换状态。如果备用密钥已超过 365 天,AWS KMS 会立即轮换,并在此后每隔 365 天轮换一次。如果备用密钥少于 365 天,AWS KMS 会恢复原始密钥轮换计划。

  • AWS 托管 CMKs。 您无法管理 AWS 托管 CMKs 的密钥轮换。AWS KMS 每隔三年 (1095 天) 自动轮换一次 AWS 托管 CMKs。

  • AWS 拥有 CMKs。 您无法管理 AWS 拥有的 CMKs 的密钥轮换。AWS 拥有的 CMK 的密钥轮换策略由创建和管理 CMK 的 AWS 服务确定。有关详细信息,请参阅服务的用户指南或开发人员指南中的静态加密 主题。

  • AWS 服务. 您可以在 服务中用于服务器端加密的CMKs客户托管上启用自动密钥轮换。AWS年度轮换是透明的,并与 AWS 服务兼容。

  • 监控密钥轮换。 当 AWS KMS 自动轮换 托管 AWSCMK客户托管 CMK 的密钥材料时,它会将 KMS CMK Rotation 事件写入 Amazon CloudWatch Events 并将 事件写入您的 日志。RotateKeyAWS CloudTrail您可以使用这些记录来验证 CMK 是否已轮换。

  • 不支持的 CMK 类型。 以下类型的 支持自动密钥轮换,但您可以CMKs手动轮换这些 。CMKs

如何启用和禁用自动密钥轮换

您可以使用 AWS KMS 控制台或 AWS KMS API 启用和禁用自动密钥轮换,并查看任何客户管理的 CMK 的轮换状态。

当您启用自动密钥轮换时,AWS KMS 会在启用日期 365 天后轮换 CMK,并在此后每隔 365 天轮换一次。

启用和禁用密钥轮换(控制台)

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Key Management Service (AWS KMS) 控制台:https://console.aws.amazon.com/kms

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

  3. 在导航窗格中,选择 Customer managed keys (客户托管密钥)。 (您无法启用或禁用 AWS 托管密钥的轮换。 它们每三年自动轮换一次。)

  4. 选择 CMK 的别名或密钥 ID。

  5. 选择 Key rotation (密钥轮换) 选项卡。

    Key rotation (密钥轮换) 选项卡仅显示在具有 生成的密钥材料(CMKsOrigin (源)AWS KMS 为 AWS_KMS)的对称 的详细信息页面上。您不能在CMKs自定义密钥存储CMKs中自动轮换非对称 (具有CMKs导入的密钥材料)或 。但是,您可以手动轮换它们.

  6. 选中或清除 Automatically rotate this CMK every year (每年自动轮换此 Amazon S3 轮换) 复选框。

    注意

    如果某个CMK已禁用或待删除,则清除 Automatically rotate this CMK every year (每年自动轮换此) 复选框,并且您无法更改它。启用 CMK或取消删除后,将恢复密钥轮换状态。有关详细信息,请参阅 自动密钥轮换的工作方式密钥状态:对 CMK 的影响.

  7. 选择 Save.

启用和禁用密钥轮换(AWS KMS API)

您可以使用 AWS Key Management Service (AWS KMS) API 启用和禁用自动密钥轮换,并查看任何客户管理的 CMK 的当前轮换状态。这些示例使用 AWS Command Line Interface (AWS CLI),但您可以使用任何受支持的编程语言。

操作为指定的 EnableKeyRotation 启用自动密钥轮换。CMKDisableKeyRotation 操作会禁用它。要在这些操作中标识CMK,请使用其密钥 ID密钥 ARN。默认情况下,对于客户托管的 CMKs,禁用了密钥轮换。

以下示例对指定的对称 CMK 启用密钥轮换,并使用 GetKeyRotationStatus 操作查看结果。然后,它禁用了密钥轮换,并使用GetKeyRotationStatus查看变更。

$ aws kms enable-key-rotation --key-id 1234abcd-12ab-34cd-56ef-1234567890ab $ aws kms get-key-rotation-status --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyRotationEnabled": true } $ aws kms disable-key-rotation --key-id 1234abcd-12ab-34cd-56ef-1234567890ab $ aws kms get-key-rotation-status --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyRotationEnabled": false }

手动轮换密钥

您可能希望创建新的 CMK 并用于替代当前 CMK,而不是启用自动密钥轮换。当新的 CMK 具有与当前 CMK 不同的加密材料时,使用新的 CMK 与更改现有 CMK 中的备用密钥具有相同的效果。将一个CMK替换为另一个的过程称为手动密钥轮换。

如果您希望控制轮换的频率,建议您通过手动的方式轮换密钥。对于不符合自动密钥轮换要求的 CMKs,例如CMKs自定义密钥存储CMKs中的非对称 以及具有CMKs导入的密钥材料,这也是一个很好的解决方案。

注意

当您开始使用新的 CMK 时,请确保启用原始 CMK,以便 AWS KMS 可以解密原始 CMK 加密的数据。解密数据时,KMS 会标识用于加密数据的 CMK,并使用相同的 CMK 解密数据。只要您保持启用原始 CMKs 和新 AWS KMS,CMK 便可以解密由任一 加密的任何数据。

由于新的 CMK 是与当前 CMK 不同的资源,因此它具有不同的密钥 ID 和 ARN。更改 CMKs 时,您需要更新应用程序中对 CMK ID 或 ARN 的引用。将友好名称与 CMK 关联的别名使此过程更轻松。使用别名在应用程序中引用 CMK。然后,当您要更改应用程序使用的 CMK 时,请更改别名的目标 CMK。

要更新别名的目标 CMK,请使用 API 中的 UpdateAliasAWS KMS 操作。例如,此命令将更新 TestCMK 别名以指向新的 CMK。由于该操作不返回任何输出,该示例使用 ListAliases 操作显示别名现在与不同的 CMK 关联,并且更新了 LastUpdatedDate 字段。

$ aws kms list-aliases { "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/TestCMK", "AliasName": "alias/TestCMK", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1521097200.123, "LastUpdatedDate": 1521097200.123 }, ] } $ aws kms update-alias --alias-name alias/TestCMK --target-key-id 0987dcba-09fe-87dc-65ba-ab0987654321 $ aws kms list-aliases { "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/TestCMK", "AliasName": "alias/TestCMK", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1521097200.123, "LastUpdatedDate": 1604958290.722 }, ] }