Terraform创建AWS CMK脚本触发Not Authorized错误如何解决
问题解决说明
报错根因
你遇到的权限报错和你定义的CMK密钥政策无关,问题出在你执行部署操作所用角色的IAM权限配置上:
kms:CreateKey属于创建新密钥的操作,执行该操作时目标密钥尚未生成,没有对应ARN,因此AWS要求kms:CreateKey动作的Resource必须配置为*,不能限制为具体的密钥/别名ARN规则。你当前的部署角色权限将kms:CreateKey的Resource限制为了账号下已存在的密钥、别名ARN,不符合权限要求,因此触发报错。
配置修正方案
你不需要修改aws_kms_key资源中定义的密钥政策(给SNS服务授权的配置本身正确,其中的Resource字段保持*即可,密钥政策中Resource = "*"指代当前密钥本身,是合规用法),仅需要调整部署角色的IAM权限,将kms:CreateKey单独拆分为一个独立的权限块即可,修改后的权限配置参考如下:
# 单独配置CreateKey权限,Resource必须为* Effect = "Allow" Action = [ "kms:CreateKey" ] Resource = "*" # 其余KMS操作保持原有资源限制即可 Effect = "Allow" Action = [ "kms:CreateAlias", "kms:CreateGrant", "kms:DeleteAlias", "kms:DisableKey", "kms:EnableKey", "kms:PutKeyPolicy", "kms:RevokeGrant", "kms:ScheduleKeyDeletion", "kms:TagResource", "kms:UntagResource", "kms:UpdateAlias", "kms:UpdateKeyDescription" ] Resource = [ "arn:aws:kms:${local.aws_region}:${var.aws_account_id}:key/*", "arn:aws:kms:${local.aws_region}:${var.aws_account_id}:alias/*" ]
修改完成后重新执行部署即可正常创建CMK,原有SNS服务调用KMS的权限不受影响,可正常完成加密消息投递到加密SQS队列的流程。
内容的提问来源于stack exchange,提问作者sprint_6
相关产品推荐
相关产品推荐

