You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:36:01