更新加密密钥后,我无法从另一个 KMS 账户访问 AWS Secrets Manager 密钥,并且收到了一条错误消息。我如何解决此问题?

上次更新时间:2021 年 1 月 8 日

我尝试检索或访问一个 AWS Secrets Manager 密钥,但收到了与以下类似的错误消息:

“不允许访问 KMS”、“内部故障”或“出现未知错误”。

-或者-

“不允许访问 KMS。此版本的密钥未使用当前 KMS 密钥加密。”

简短描述

更改与某个 Secrets Manager 密钥关联的加密密钥时,系统不会通过 AWS 命令行界面 (AWS CLI) 使用新的加密密钥重新加密当前或之前版本的密钥。这意味着,由于该密钥尚未使用新的 KMS CMK 重新加密,外部账户(也称为跨账户)无法访问该密钥。您必须使用新的 AWS Key Management Service (AWS KMS) 密钥重新加密该密钥,才能从跨账户中检索到该密钥的值。

注意:使用 Secrets Manager 控制台更改与密钥关联的加密密钥会创建新版本的密钥,并使用新的加密密钥对其进行加密。有关更多信息,请参阅加密和解密密钥

解决方法

按照以下说明使用新的 KMS CMK 密钥重新加密密钥。

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

AWS 管理控制台

1.    打开 Secrets Manager 控制台

2.    在密钥名称中,选择您的密钥。

3.    在密钥值中,依次选择检索密钥值编辑,然后选择保存

您将收到消息“您的密钥值已成功编辑。”

AWS CLI

在密钥所在的源账户中执行以下步骤。

1.    运行 AWS CLI 命令 get-secret-value,与以下类似:

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text

    {"CrossAccount":"DefaultEncryption"}

2.    创建一个名为 creds.txt 的文件。

$ cat creds.txt
         
    {"CrossAccount":"DefaultEncryption"}

3.    运行 AWS CLI update-secret 命令以将加密密钥重新加密,与以下类似:

$ aws secretsmanager update-secret --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --secret-string file://creds.txt
    {
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:cross-account",
    "Name": "cross-account",
    "VersionId": "f68246e8-1cfb-4c3b-952b-17c9298d3462"
    }
4.    在跨账户中运行 AWS CLI 命令 get-secret-value,与以下类似:
$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --version-stage AWSCURRENT --profile cross-account-user --region us-east-1 --query SecretString --output text

    {"CrossAccount":"DefaultEncryption"}