

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

# 手动轮换密钥
<a name="rotate-keys-manually"></a>

可能需要创建新的 KMS 密钥并用其替换当前 KMS 密钥，而不使用自动或按需密钥轮换功能。当新的 KMS 密钥使用的加密材料与当前 KMS 密钥使用的加密材料不相同时，使用新的 KMS 密钥与更改现有 KMS 密钥的密钥材料具有相同的效果。使用一个 KMS 密钥替换另一个 KMS 密钥的过程被称为*手动密钥轮换*。

![\[Diagram showing manual key rotation process with application, old key, and new key.\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/key-rotation-manual.png)


 当您想要轮换不符合自动或按需密钥轮换条件的 KMS 密钥（例如非对称 KMS 密钥、HMAC KMS 密钥和[自定义](key-store-overview.md#custom-key-store-overview)密钥存储中的 KMS 密钥）时，手动轮换是一个不错的选择。

**注意**  
开始使用新的 KMS 密钥时，请务必启用原始 KMS 密钥，以便 AWS KMS 可以解密原始 KMS 密钥加密的数据。

当您手动轮换 KMS 密钥时，您还需要更新应用程序中对 KMS 密钥 ID 或密钥 ARN 的引用。将友好名称与 KMS 密钥关联的[别名](kms-alias.md)，可以使得这个过程变得更容易。使用别名来引用应用程序中的 KMS 密钥。之后，当您想更改应用程序所使用的 KMS 密钥（而不是编辑应用程序代码）时，更改别名的目标 KMS 密钥即可。有关更多信息，请参阅 [了解如何在您的应用程序中使用别名](alias-using.md)。

**注意**  
[指向最新版本的手动轮换 KMS 密钥的别名是加密操作的好解决方案，例如 E [n](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) crypt [DescribeKey[GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)、、、[DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)、、、S [ign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) an [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)d [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)Veri [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)fy。[GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)管理 KMS 密钥的操作中不允许使用别名，例如[DisableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html)或[ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html)。  
对手动轮换的对称加[密 KMS 密钥调用 Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作时，请省略命令中的`KeyId`参数。 AWS KMS 自动使用加密密文的 KMS 密钥。  
使用非对称 KMS 密钥调用`Decrypt`或[验证](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)，或使用 HMAC KMS 密钥[VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)进行调用时，必须使用该`KeyId`参数。当 `KeyId` 参数的值是不再指向执行加密操作的 KMS 密钥的别名时，例如当手动轮换密钥时，这些请求将失败。为避免此错误，必须跟踪并为每个操作指定正确的 KMS 密钥。

要更改别名的目标 KMS 密钥，请使用 AWS KMS API 中的[UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html)操作。例如，此命令会更新 `alias/TestKey` 别名以指向新 KMS 密钥。由于该操作不返回任何输出，因此该示例使用该[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)操作来显示别名现在已与其他 KMS 密钥相关联，并且该`LastUpdatedDate`字段已更新。这些 ListAliases 命令使用中的[`query`参数](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html#cli-usage-filter-client-side-specific-values)仅 AWS 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
        },
    ]
}
```