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

上次更新时间:2019 年 7 月 2 日

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

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

简短描述

更改与某个 Secrets Manager 密钥关联的加密密钥时,系统不会使用新的加密密钥重新加密之前版本的密钥。这意味着外部账户(也称为“交叉账户”)无法访问密钥,因为它们没有更新的加密密钥值。您必须使用更改后的 AWS Key Management Service (AWS KMS) 密钥重新加密该密钥,才能检索到该密钥的值。有关更多信息,请参阅加密和解密密钥

解决方法

按照以下说明将加密密钥重新加密。

AWS 管理控制台

1.    打开 Secrets Manager 控制台

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

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

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

AWS 命令行界面 (AWS CLI)

1.    创建一个名为 creds.json 的 JSON 文件。在此例中,您的密钥值为 {"CrossAccount":"DefaultEncryption"}

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

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

$ aws secretsmanager update-secret --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --secret-string file://creds.json
    {
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:cross-account",
    "Name": "cross-account",
    "VersionId": "f68246e8-1cfb-4c3b-952b-17c9298d3462"
    }

3.    运行 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"}