本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
轮换 Amazon KMS keys
要为客户托管的密钥创建新的加密材料,您可以创建新的 KMS 密钥,然后更改您的应用程序或别名来使用新的 KMS 密钥。或者,您可以为现有 KMS 密钥启用自动密钥轮换。
如果您为 KMS 密钥启用自动密钥轮换,Amazon KMS 会每年为该 KMS 密钥生成新的加密材料。Amazon KMS 会永久保留所有以前版本的加密材料,以便解密使用该 KMS 密钥加密的任何数据。Amazon KMS 不会删除任何轮换的密钥材料,直至您删除 KMS 密钥。您可以跟踪轮换 Amazon CloudWatch 和中 KMS 密钥的密钥材料Amazon CloudTrail。
当您使用轮换 KMS 密钥加密数据时,Amazon KMS 会使用当前的密钥材料。当您使用轮换 KMS 密钥解密密文时,Amazon KMS 会使用加密时所用的密钥材料版本。您无法请求特定版本的密钥材料。由于 Amazon KMS 使用适当的密钥材料透明地进行解密,您可以安全地在应用程序和 Amazon Web Services 中使用轮换的 KMS 密钥,无需进行代码更改。
然而,自动密钥轮换对 KMS 密钥所保护的数据无效。它不会轮换 KMS 密钥生成的数据密钥,也不会对任何受 KMS 密钥保护的数据重新加密,并且它无法减轻数据密钥泄露的影响。
Amazon KMS 仅支持具有由 Amazon KMS 创建的密钥材料的对称加密 KMS 密钥进行自动密钥轮换。对于客户托管式 KMS 密钥,自动轮换是可选项。Amazon KMS 始终坚持每年轮换一次 Amazon 托管式 KMS 密钥的密钥材料。Amazon 拥有的 KMS 密钥的轮换有所不同。
注意
Amazon 托管式密钥 的轮换间隔在 2022 年 5 月发生了变化。有关详细信息,请参阅Amazon 托管式密钥。
密钥轮换只会更改密钥材料,即加密操作中所使用的加密密钥。不管密钥材料有没有变更或变更了多少次,该 KMS 密钥仍是相同的逻辑资源。KMS 密钥的属性不会发生变化,如下图所示。

自动密钥轮换具有以下优点:
您可能决定创建新的 KMS 密钥来替代原有的 KMS 密钥。这跟轮换现有 KMS 密钥的密钥材料具有相同效果,因此这通常被视为手动轮换密钥。如果您想控制密钥轮换计划,手动轮换是很好的选择。对于不符合自动密钥轮换要求的 KMS 密钥,包括非对称 KMS 密钥、HMAC KMS 密钥、自定义密钥存储中的 KMS 密钥以及包含导入的密钥材料的 KMS 密钥,这也提供了一种轮换方式。
密钥轮换和定价
针对为您的 KMS 密钥维护的各个版本的密钥材料,Amazon KMS 会按月收取费用。有关详细信息,请参阅 Amazon Key Management Service 定价
密钥轮换和配额
在计算密钥资源配额时,无论轮换密钥材料版本的数量如何,每个 KMS 密钥均算作一个密钥。
有关密钥材料和轮换的详细信息,请参阅《Amazon Key Management Service 加密详细信息》。
为什么要轮换 KMS 密钥?
加密最佳实践不鼓励大量重复使用直接加密数据的密钥,例如Amazon KMS生成的数据密钥。当 256 位数据密钥加密数百万条消息时,它们可能会筋疲力尽,开始生成带有微妙模式的密文,聪明的行为者可以利用这些密文来发现密钥中的比特。为了避免密钥耗尽,最好使用一次或几次数据密钥,这样可以有效地轮换密钥材料。
但是,KMS 密钥最常用作包装密钥,也称为密钥加密密钥。封装密钥不是加密数据,而是对加密数据的数据密钥进行加密。因此,它们的使用频率远低于数据密钥,并且几乎从未被充分重复使用到足以冒密钥耗尽的风险。
尽管耗尽风险非常低,但由于业务或合同规则或政府法规,您可能需要轮换 KMS 密钥。当您被迫轮换 KMS 密钥时,我们建议您在支持自动密钥轮换的地方使用自动密钥轮换,并在不支持自动密钥轮换时使用手动密钥轮换。
自动密钥轮换的工作方式
密钥轮换Amazon KMS采用透明且易于使用的设计。 Amazon KMS仅支持客户管理的密钥的可选自动密钥轮换。
- 管理密钥材料
-
即使密钥轮换处于禁用状态,Amazon KMS 也会保留 KMS 密钥的所有密钥材料。Amazon KMS 仅在您删除 KMS 密钥时才会删除密钥材料。
- 使用密钥材料
-
当您使用轮换 KMS 密钥加密数据时,Amazon KMS 会使用当前的密钥材料。当您使用轮换 KMS 密钥解密密文时,Amazon KMS 会使用与加密时所用密钥材料相同的版本。您无法请求特定版本的密钥材料。
- 轮换日期
-
Amazon KMS在启用轮换一年后(大约 365 天)轮换关键材料,然后每年(大约 365 天)轮换关键材料。
- 客户托管密钥
-
由于自动密钥轮替在客户管理的密钥上是可选的,可以随时启用和禁用,因此轮换日期取决于最近启用轮换的日期。该日期内该日期内在密钥的。
例如,如果您在 2022 年 1 月 1 日创建客户管理的密钥,并在 2022 年 3 月 15 日启用自动密钥轮换,则Amazon KMS会在 2023 年 3 月 15 日、2024 年 3 月 15 日轮换密钥材料,此后每 365 天轮换一次。
以下是特使用案例:以下是特殊案例:
-
禁用密钥轮换-如果您在任何时候禁用自动密钥轮替,KMS 密钥将继续使用禁用轮换时使用的密钥材料版本。如果您再次启用自动密钥轮换,Amazon KMS会在新的轮换,并在此后每年轮换一次。
-
禁用 KMS 密钥:禁用 KMS 密钥后,Amazon KMS不会对它进行轮换。但是,密钥轮换状态不会发生改变,并且在 KMS 密钥处于禁用状态时不能对其进行更改。重新启用 KMS 密钥后,如果密钥材料已超过一年,Amazon KMS 会立即轮换,并在此后每年轮换一次。如果密钥材料少于一年,Amazon KMS 会恢复原始密钥轮换计划。
-
待删除的 KMS 密钥:对于待删除的 KMS 密钥,Amazon KMS不会对它进行轮换。密钥轮换状态设为
false
,处于待删除状态时不能更改。如果删除被取消,将恢复之前的密钥轮换状态。如果密钥材料已超过一年,Amazon KMS会立即轮换,并在此后每年轮换一次。如果密钥材料少于一年,Amazon KMS 会恢复原始密钥轮换计划。
-
- Amazon 托管式密钥
-
每年(大约 365 天)Amazon KMS 自动轮换 Amazon 托管式密钥。您无法启用或禁用 Amazon 托管式密钥 的密钥轮换。
的密钥材料在创建之日起一年后首次轮换,此后每年(距上次轮换大约 365 天)。Amazon 托管式密钥
注意
2022 年 5 月,Amazon KMS 将 Amazon 托管式密钥 的轮换时间表从每三年(约 1095 天)更改为每年(约 365 天)。
新的 Amazon 托管式密钥 在创建一年后自动轮换,此后大约每年轮换一次。
现有的 Amazon 托管式密钥 在他们最近一次轮换一年后自动轮换,此后每年轮换一次。
- Amazon 拥有的密钥
-
您无法启用或禁用 Amazon 拥有的密钥 的密钥轮换。Amazon 拥有的密钥 的密钥轮换策略Amazon由创建和管理密钥的服务确定。有关详细信息,请参阅服务的用户指南或开发人员指南中的静态加密主题。
- 支持的 KMS 密钥类型
-
只有具有由 Amazon KMS 生成(Origin = AWS_KMS)的密钥材料的对称加密 KMS 密钥支持自动密钥轮换。
以下类型的 KMS 密钥不支持自动密钥轮换,但您可以手动轮换这些 KMS 密钥。
- 多区域密钥
-
您可以启用和禁用多区域密钥的自动密钥轮换。您只能对主密钥设置属性。Amazon KMS 同步密钥时,它会将属性设置从主密钥复制到其副本密钥。轮换主密钥的密钥材料时,Amazon KMS 会自动将该密钥材料复制到其所有的副本密钥中。有关详细信息,请参阅轮换多区域密钥。
- Amazon 服务
-
您可以在用于 Amazon 服务中的服务器端加密的客户托管密钥上启用自动密钥轮换。年度轮换是透明的,并与 Amazon 服务兼容。
- 监控密钥轮换
-
当Amazon KMS自动轮换Amazon 托管式密钥或客户管理密钥的密钥材料时,它会将
KMS CMK Rotation
事件写入亚马逊 EventBridge,将RotateKey 事件写入您的Amazon CloudTrail日志。您可以使用这些记录验证 KMS 密钥是否已轮换。 - 最终一致性
-
自动密钥轮换会受到与其他 Amazon KMS 管理操作相同的最终一致性影响。新的密钥材料在整个 Amazon KMS 中可用之前可能会有一些延迟。但是,轮换密钥材料不会导致加密操作中断或延迟。当前的密钥材料用于加密操作,直到新的密钥材料在整个 Amazon KMS 中可用为止。自动轮换多区域密钥的密钥材料时,Amazon KMS 将使用当前的密钥材料,直到新的密钥材料在所有具有相关多区域密钥的区域中都可用。
如何启用和禁用自动密钥轮换
授权用户可以使用 Amazon KMS 控制台或 Amazon KMS API 启用和禁用自动密钥轮换,并查看密钥的轮换状态。
当您启用自动密钥轮换时,Amazon KMS 会在启用日期一年后轮换 KMS 密钥,并在此后每年轮换一次。
启用和禁用密钥轮换(控制台)
-
登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Key Management Service (Amazon KMS) 控制台:https://console.aws.amazon.com/kms
。 -
要更改 Amazon Web Services 区域,请使用页面右上角的区域选择器。
-
在导航窗格中,选择客户托管密钥。(您无法启用或禁用 Amazon 托管式密钥 的轮换。它们每年自动轮换一次。)
-
选择 KMS 密钥的别名和密钥 ID。
-
选择 Key rotation (密钥轮换) 选项卡。
Key rotation(密钥轮换)选项卡仅显示在具有 Amazon KMS 生成的密钥材料(即 Origin(源)为 AWS_KMS)的对称加密 KMS 密钥(包括多区域对称加密 KMS 没有)的详细信息页面上。
您不能自动轮换非对称 KMS 密钥、HMAC KMS 密钥、具有导入的密钥材料的 KMS 密钥或自定义密钥存储中的 KMS 密钥。但是,您可以手动轮换它们。
-
选中或清除 Automatically rotate this KMS key every year(每年自动轮换此 KMS 密钥)复选框。
注意
如果 KMS 密钥被禁用或待删除,则将清除 Automatically rotate this KMS key every year(每年自动轮换此 KMS 密钥)复选框,并且您不能对其进行更改。在启用 KMS 密钥或取消删除后,将恢复密钥轮换状态。有关详细信息,请参阅 自动密钥轮换的工作方式 和 Amazon KMS 密钥的密钥状态。
-
选择保存。
启用和禁用密钥轮换 (Amazon KMS API)
您可以使用 Amazon Key Management Service (Amazon KMS) API 启用和禁用自动密钥轮换,并查看任何客户托管式密钥的当前轮换状态。这些示例使用 Amazon Command Line Interface (Amazon CLI)
该EnableKeyRotation操作可以为指定 KMS 密钥启用自动密钥。该DisableKeyRotation操作将其禁用。要在这些操作中标识 KMS 密钥,请使用其密钥 ID 或密钥 ARN。在默认情况下,客户托管密钥的密钥轮换处于禁用状态。
以下示例对指定的对称加密 KMS 密钥启用密钥轮换,并使用该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 }
手动轮换密钥
您可能希望创建一个新的 KMS 密钥,并使用它替代当前的 KMS 密钥,而不启用自动密钥轮换。当新的 KMS 密钥使用的加密材料与当前 KMS 密钥使用的加密材料不相同时,使用新的 KMS 密钥与更改现有 KMS 密钥的密钥材料具有相同的效果。使用一个 KMS 密钥替换另一个 KMS 密钥的过程被称为手动密钥轮换。

如果您希望控制轮换的频率,建议您通过手动的方式轮换密钥。对于不符合自动密钥轮换要求的 KMS 密钥,例如非对称 KMS 密钥、HMAC KMS 密钥、自定义密钥存储中的 KMS 密钥,以及具有导入的密钥材料的 KMS 密钥,这也是一种很好的解决方案。
注意
当您开始使用新的 KMS 密钥时,请确保启用原来的 KMS 密钥,以便 Amazon KMS 可以解密使用原 KMS 密钥加密的数据。
当您手动轮换 KMS 密钥时,您还需要更新应用程序中对 KMS 密钥 ID 或密钥 ARN 的引用。将友好名称与 KMS 密钥关联的别名,可以使得这个过程变得更容易。使用别名来引用应用程序中的 KMS 密钥。之后,当您想更改应用程序所使用的 KMS 密钥(而不是编辑应用程序代码)时,更改别名的目标 KMS 密钥即可。有关详细信息,请参阅在应用程序中使用别名。
注意
指向最新版本的手动轮换 KMS 密钥的别名是DescribeKey、加密、、GenerateDataKeyGenerateDataKeyPairGenerateMac、和签名操作的理想解决方案。不允许在管理 KMS 密钥的操作中使用别名,例如DisableKey或ScheduleKeyDeletion。
在对手动轮换的对称加密 KMS 密钥调用 Decrypt 操作时,请从命令中省略 KeyId
参数。Amazon KMS 会自动使用加密加密文字的 KMS 密钥。
在使用KeyId
非对称 KMS 密钥调用Decrypt
KMS 密钥时,或使用非对称 KMS 密钥VerifyMac进行轮换。当 KeyId
参数的值是不再指向执行加密操作的 KMS 密钥的别名时,例如当手动轮换密钥时,这些请求将失败。为避免此错误,必须跟踪并为每个操作指定正确的 KMS 密钥。
要更改别名的目标 KMS 密钥,请使用Amazon KMS API 中的UpdateAlias操作。例如,此命令会更新 alias/TestKey
别名以指向新 KMS 密钥。由于该操作不返回任何输出,该示例使用该ListAliases操作以显示该别名已关联到不同的 KMS 密钥且,该LastUpdatedDate
字段已更新。 ListAliases 这些命令使用中的query
参数仅Amazon CLI获取alias/TestKey
别名。
$
aws kms list-aliases --query 'Aliases[?AliasName==`alias/TestKey`]'
{ "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/TestKey", "AliasName": "alias/TestKey", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1521097200.123, "LastUpdatedDate": 1521097200.123 }, ] }
$
aws kms update-alias --alias-name alias/TestKey --target-key-id 0987dcba-09fe-87dc-65ba-ab0987654321
$
aws kms list-aliases --query 'Aliases[?AliasName==`alias/TestKey`]'
{ "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/TestKey", "AliasName": "alias/TestKey", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1521097200.123, "LastUpdatedDate": 1604958290.722 }, ] }