如何在cloudformation中管理KMS密钥

0

【以下的问题经过翻译处理】 我正在尝试通过cloudformation使用客户管理的KMS密钥创建RDS数据库。该密钥已启用。 当执行cloudformation时,我遇到了以下错误:

指定的KMS密钥[null]不存在,未启用或当前用户无法访问。请指定不同的密钥或使用不同用户访问该密钥。 (服务:Rds,状态代码:400,请求ID:XXXX)”(请求令牌:XXXX,处理程序错误代码:InvalidRequest)

以下是我使用的相关cloudformation,用于指定要使用的客户管理密钥:

RDSInstance:
    Type:AWS :: RDS :: DBInstance
    Properties:
      KmsKeyId:!Ref RDSEncryptionKmsKey
      StorageEncrypted:true

我可以通过AWS控制台成功使用此密钥创建RDS实例,而不为该实例分配任何角色或授予任何特殊的IAM权限,因此这似乎仅是cloudformation问题。

我已经授予了CloudFormation角色kms:\ *权限,以确保这不是权限问题。 CloudTrail返回的特定错误是'KMSKeyNotAccessibleFault'。

这是非常奇怪的部分,我不确定这是否是AWS中的错误。这里的CloudFormation角色IAM权限可以工作,并导致数据库被创建:

行动:
              -'kms:DescribeKey'
              -'kms:CreateGrant'
            资源:
              -'*'

这个CloudFormation角色IAM权限无法正常工作,并导致“ KMSKeyNotAccessibleFault”:

Action:
              - 'kms:DescribeKey'
              - 'kms:CreateGrant'
            Resource:
              -!Sub'arn:aws:kms:*:$ {AWS :: AccountId}:key / mrk-XXX'

但我知道正在使用正确的密钥,因为如果在资源部分中只使用'\ *',它将使用正确的KMS密

1 回答
0

【以下的回答经过翻译处理】 从CloudTrail或CloudFormation的错误信息中无法明显发现问题,但通过在KMS权限中将*添加到资源,问题得以解决。在查看CloudTrail日志时,发现了一个未知KMS密钥ID的DescribeKey项执行失败。经过查找,在KMS控制台中找到了该密钥,原来是用于aws/secretsmanager的密钥。

显然,如果选择ManageMasterUserPassword:true选项,则不仅需要为secretsmanager:CreateSecret添加IAM权限,还需要在aws/secretsmanager KMS密钥ID arn上添加kms:DescribeKey权限。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则