轮换 AWS KMS keys - AWS Key Management Service

轮换 AWS KMS keys

要为客户托管的密钥创建新的加密材料,您可以创建新的 KMS 密钥,然后更改您的应用程序或别名来使用新的 KMS 密钥。或者,您可以通过启用自动密钥轮换或执行按需轮换,来轮换与现有 KMS 密钥关联的密钥材料。

默认情况下,当您为 KMS 密钥启用自动密钥轮换时,AWS KMS 会每年为该 KMS 密钥生成新的加密材料。您还可以指定自定义rotation-period来定义启用自动密钥轮换后,AWS KMS 轮换密钥材料的天数,以及此后每次自动轮换间隔的天数。如果您需要立即启动密钥材料轮换,则无论是否启用自动密钥轮换,都可以执行按需轮换。按需轮换不会更改现有的自动轮换计划。

您可以在 Amazon CloudWatch、AWS CloudTrail 和 AWS Key Management Service 控制台中跟踪轮换 KMS 密钥的密钥材料。您还可以使用 GetKeyRotationStatus 操作来验证 KMS 密钥是否启用了自动轮换,以及识别任何正在进行的按需轮换。您可以使用 ListKeyRotations 操作来查看已完成轮换的详细信息。

密钥轮换只会更改当前密钥材料,即加密操作中使用的密钥。使用轮换后的 KMS 密钥解密加密文字时,AWS KMS 会使用加密时所用的密钥材料。无法为解密操作选择特定的密钥材料,AWS KMS 会自动选择正确的密钥材料。由于 AWS KMS 使用适当的密钥材料透明地进行解密,您可以安全地在应用程序和 AWS 服务 中使用轮换的 KMS 密钥,无需进行代码更改。

不管密钥材料有没有变更或变更了多少次,该 KMS 密钥仍是相同的逻辑资源。KMS 密钥的属性不会发生变化,如下图所示。

Key rotation process showing key material change while Key ID remains constant.

您可能决定创建新的 KMS 密钥来替代原有的 KMS 密钥。这跟轮换现有 KMS 密钥的密钥材料具有相同效果,因此这通常被视为手动轮换密钥。对于不符合自动或按需密钥轮换要求的 KMS 密钥(包括非对称 KMS 密钥HMAC KMS 密钥自定义密钥存储中的 KMS 密钥以及具有导入的密钥材料的多区域 KMS 密钥),建议选择手动轮换。

注意

密钥轮换不会影响 KMS 密钥所保护的数据。不会轮换 KMS 密钥生成的数据密钥,也不会对任何受 KMS 密钥保护的数据重新加密。密钥轮换不会减轻数据密钥泄露的影响。

密钥轮换和定价

针对第一次和第二次轮换为您的 KMS 密钥维护的密钥材料,AWS KMS 会按月收取费用。此次涨价以第二次轮换为上限,后续任何轮换均不收取费用。有关详细信息,请参阅 AWS Key Management Service 定价

注意

您可以使用《AWS Cost Explorer Service》https://docs.aws.amazon.com/cost-management/latest/userguide/ce-what-is.html来查看您的密钥存储费用明细。例如,您可以通过将使用类型指定为 $REGION-KMS-Keys 并按 API 操作对数据进行分组来筛选视图,以查看按当前和轮换 KMS 密钥计费的密钥的总费用。

您可能仍会看到历史日期的旧 Unknown API 操作的实例。

密钥轮换和配额

在计算密钥资源配额时,无论轮换密钥材料版本的数量如何,每个 KMS 密钥均算作一个密钥。

有关密钥材料和轮换的详细信息,请参阅《AWS Key Management Service 加密详细信息》。

为什么要轮换 KMS 密钥?

加密最佳实践不鼓励大量重复使用直接加密数据的密钥,例如 AWS KMS 生成的数据密钥。当 256 位数据密钥加密数百万条消息时,它们可能会耗尽并开始生成带有细微模式的加密文字,聪明的操作者可以利用这些密文来发现密钥中的位。建议数据密钥仅使用一次或少数几次,以减少这种密钥耗尽问题。

但是,KMS 密钥最常用作“包装密钥”,也称为“密钥加密密钥”。包装密钥不是加密数据,而是对加密数据的数据密钥进行加密。因此,其使用频率远低于数据密钥,并且几乎从未被重复使用到足以出现密钥耗尽的风险。

尽管耗尽风险非常低,但由于业务或合同规则或政府法规,您可能需要轮换 KMS 密钥。被迫轮换 KMS 密钥时,我们建议您在支持自动密钥轮换时使用自动轮换,在不支持自动轮换时使用按需轮换,在既不支持自动密钥轮换也不支持按需密钥轮换时使用手动密钥轮换。

您可以考虑执行按需轮换,演示密钥材料轮换功能或验证自动化脚本。我们建议将按需轮换用于计划外轮换场景,尽可能使用自动密钥轮换并自定义轮换周期

密钥轮换的工作原理

AWS KMS 密钥轮换旨在确保透明性和易用性。对于客户自主管理型密钥,AWS KMS 仅支持可选的自动密钥轮换和按需密钥轮换。

自动密钥轮换

AWS KMS 在轮换周期定义的下一个轮换日期自动轮换 KMS 密钥。您无需记住或计划更新。

自动密钥轮换仅支持具有 AWS KMS 生成(来源为 AWS_KMS)的密钥材料的对称加密 KMS 密钥。

对于客户自主管理型 KMS 密钥,自动轮换是可选的。AWS KMS 始终会每年轮换 AWS 托管式 KMS 密钥的密钥材料。对于由 AWS 拥有的 KMS 密钥,密钥轮换由拥有该密钥的 AWS 服务管理。

按需轮换

无论是否启用了自动密钥轮换,都会立即开始轮换与 KMS 密钥关联的密钥材料。

按需密钥轮换支持具有 AWS KMS 生成(来源为 AWS_KMS)的密钥材料的对称加密 KMS 密钥,以及具有导入的密钥材料(来源为 EXTERNAL)的单区域对称加密 KMS 密钥。

手动轮换

以下类型的 KMS 密钥不支持自动密钥轮换或按需密钥轮换,但您可以手动轮换这些 KMS 密钥

管理密钥材料

即使密钥轮换处于禁用状态,AWS KMS 也会保留来源为 AWS_KMS 的 KMS 密钥的所有密钥材料。AWS KMS 仅在您删除 KMS 密钥时才会删除密钥材料。

您负责管理来源为 EXTERNAL 的对称加密密钥的密钥材料。您可以使用 DeleteImportedKeyMaterial 操作删除任何密钥材料,也可以在导入材料时设置过期时间。一旦 KMS 密钥的任何材料过期或被删除,该 KMS 密钥就会变为无法使用。

使用密钥材料

当您使用轮换 KMS 密钥加密数据时,AWS KMS 会使用当前的密钥材料。当您使用轮换 KMS 密钥解密密文时,AWS KMS 会使用与加密时所用密钥材料相同的版本。您无法为解密操作选择特定版本的密钥材料,AWS KMS 会自动选择正确的版本。

轮换周期

轮换周期定义启用自动密钥轮换后,AWS KMS 轮换密钥材料的天数,以及此后每次自动密钥轮换间隔的天数。如果您在启用自动密钥轮换时未指定 RotationPeriodInDays 的值,则默认值为 365 天。

您可以使用 kms:RotationPeriodInDays 条件键进一步限制主体可以在 RotationPeriodInDays 参数中指定的值。

轮换日期

轮换日期是指因自动(定期)轮换或按需密钥轮换而更新 KMS 密钥的当前密钥材料的日期。

轮换日期

AWS KMS 在轮换周期定义的轮换日期自动轮换 KMS 密钥。默认轮换周期为 365 天。

客户管理密钥

由于客户托管密钥的自动密钥轮换是可选的,并且可以随时启用和禁用,因此轮换日期取决于最近启用轮换的日期。如果您修改先前启用了自动密钥轮换的密钥的轮换周期,则日期可能会更改。在密钥的生命周期内,轮换日期可能会更改很多次。

例如,如果您在 2022 年 1 月 1 日创建客户托管密钥,并在 2022 年 3 月 15 日启用自动密钥轮换,且默认轮换周期为 365 天,则 AWS KMS 会在 2023 年 3 月 15 日、2024 年 3 月 15 日以及之后每 365 天轮换密钥材料。

以下示例假设启用了自动密钥轮换,且默认轮换周期为 365 天。这些示例演示了可能影响密钥轮换周期的特殊情况。

  • 禁用密钥轮换 - 如果您在任何时候禁用自动密钥轮换,KMS 密钥将继续使用禁用轮换时使用的密钥材料版本。如果再次启用自动密钥轮换,AWS KMS 会根据新的轮换启用日期进行轮换。

  • 禁用 KMS 密钥 - 禁用 KMS 密钥后,AWS KMS 不会对其进行轮换。但是,密钥轮换状态不会发生改变,并且在 KMS 密钥处于禁用状态时不能对其进行更改。重新启用 KMS 密钥后,如果密钥材料已错过计划的轮换日期,AWS KMS 会立即轮换。如果密钥材料未错过上次计划的轮换日期,AWS KMS 会恢复原始密钥轮换计划。

  • KMS 密钥待删除 - 对于待删除的 KMS 密钥,AWS KMS 不会对其进行轮换。密钥轮换状态设为 false,处于待删除状态时不能更改。如果删除被取消,将恢复之前的密钥轮换状态。如果密钥材料已错过计划的轮换日期,AWS KMS 会立即轮换。如果密钥材料未错过上次计划的轮换日期,AWS KMS 会恢复原始密钥轮换计划。

AWS 托管式密钥

每年(大约 365 天)AWS KMS 自动轮换 AWS 托管式密钥。您无法启用或禁用 AWS 托管式密钥 的密钥轮换。

AWS 托管式密钥 的密钥材料在创建日期一年后首次轮换,此后每年(最后一次轮换后大约 365 天)轮换一次。

注意

2022 年 5 月,AWS KMS 将 AWS 托管式密钥 的轮换时间表从每三年(约 1095 天)更改为每年(约 365 天)。

AWS 拥有的密钥

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

轮换多区域密钥

对于来源为 AWS_KMS 的对称加密多区域密钥,您可以启用和禁用密钥材料自动轮换并执行按需轮换。密钥轮换是多区域密钥的共享属性

仅在主密钥上启用和禁用自动密钥轮换。您仅对主密钥启动按需轮换。

  • AWS KMS 同步多区域密钥时,它会将密钥轮换属性设置从主密钥复制到其所有的相关副本密钥。

  • AWS KMS 轮换密钥材料时,会为主密钥创建新的密钥材料,然后跨区域边界将新的密钥材料复制到所有相关的副本密钥。此密钥材料绝不会让 AWS KMS 处于未加密状态。此步骤经过精心控制,以确保在加密操作中使用任何密钥之前密钥材料完全同步。

  • AWS KMS 不会使用新密钥材料加密任何数据,直到该密钥材料在主密钥及其每个副本密钥中都可用。

  • 复制已轮换的主密钥时,新的副本密钥具有相关多区域密钥的当前密钥材料和所有先前版本的密钥材料。

此模式可确保相关的多区域密钥完全可互操作。任何多区域密钥都可以解密由相关多区域密钥加密的任何密文,即使密文在创建密钥之前已加密。

AWS 服务

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

监控密钥轮换

当 AWS KMS 轮换 AWS 托管式密钥客户自主管理行密钥的密钥材料时,会将一个 KMS CMK Rotation 事件写入 Amazon EventBridge,并将一个 RotateKey 事件写入您的 AWS CloudTrail 日志。您可以使用这些记录验证 KMS 密钥是否已轮换。

您可以使用 AWS Key Management Service 控制台查看 KMS 密钥的剩余按需轮换次数以及 KMS 密钥所有已完成的密钥材料轮换的列表。

您可以使用 ListKeyRotations 操作来查看已完成轮换的详细信息。

最终一致性

密钥轮换会受到与其他 AWS KMS 管理操作相同的最终一致性影响。新的密钥材料在整个 AWS KMS 中可用之前可能会有一些延迟。但是,轮换密钥材料不会导致加密操作中断或延迟。当前的密钥材料用于加密操作,直到新的密钥材料在整个 AWS KMS 中可用为止。自动轮换多区域密钥的密钥材料时,AWS KMS 将使用当前的密钥材料,直到新的密钥材料在所有具有相关多区域密钥的区域中都可用。