本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
手动轮换密钥
您可能希望创建一个新的 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、Encrypt、GenerateDataKey、GenerateDataKeyPair、GenerateMac 和 Sign 操作的良好解决方案。在管理 KMS 密钥的操作(如 DisableKey 或 ScheduleKeyDeletion)中不允许使用别名。
在对手动轮换的对称加密 KMS 密钥调用 Decrypt 操作时,请从命令中省略 KeyId
参数。Amazon KMS 会自动使用加密加密文字的 KMS 密钥。
在使用非对称 KMS 密钥调用 Decrypt
或 Verify,或使用 HMAC KMS 密钥调用 VerifyMac 时,KeyId
参数是必需的。当 KeyId
参数的值是不再指向执行加密操作的 KMS 密钥的别名时,例如当手动轮换密钥时,这些请求将失败。为避免此错误,必须跟踪并为每个操作指定正确的 KMS 密钥。
要更改别名的目标 KMS 密钥,请使用 Amazon KMS API 中的 UpdateAlias 操作。例如,此命令会更新 alias/TestKey
别名以指向新 KMS 密钥。由于该操作不返回任何输出,该示例使用 ListAliases 操作以显示该别名已关联到不同的 KMS 密钥且 LastUpdatedDate
字段已更新。ListAliases 命令使用 Amazon CLI 中的 query
参数来仅获取 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 }, ] }