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

使用Terraform创建AWS IAM Policy时JSON策略验证失败求助

解决Terraform AWS IAM策略JSON无效问题

排查与修复步骤

  • 检查变量插值结果
    先确认module.rds_staging.secrets_manager_secret_arn和module.rds_staging.secrets_manager_kms_key_arn的实际值:执行terraform plan,查看输出中这两个ARN是否符合标准格式(Secrets Manager ARN格式为arn:aws:secretsmanager:地区:账号ID:secret:xxx,KMS密钥ARN格式为arn:aws:kms:地区:账号ID:key/xxx)。如果是空值或格式错误,会直接导致策略JSON无效。

  • 修正JSON格式细节
    手动检查JSON语法:

    1. 移除多余的空格:你的代码中第103行Resource字段末尾有多余空格(}" ),虽然JSON允许空格,但建议删除以避免解析异常;
    2. 确认逗号使用正确:确保数组、对象中最后一个元素后没有多余逗号,你的代码中Action数组的写法是正确的。
  • 改用jsonencode函数生成策略
    避免手动编写JSON的格式问题,用Terraform内置的jsonencode自动生成合法JSON,示例代码如下:

resource "aws_iam_policy" "aws_dms_secret_sql_server_policy" {
  name = "${var.application}-${replace(var.service, "-", "")}-${replace(data.aws_region.current.name, "-", "")}-${terraform.workspace}-dms_secret_sql_server_policy"
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect   = "Allow"
        Action   = "secretsmanager:GetSecretValue"
        Resource = module.rds_staging.secrets_manager_secret_arn
      },
      {
        Effect   = "Allow"
        Action   = ["kms:Decrypt", "kms:DescribeKey"]
        Resource = module.rds_staging.secrets_manager_kms_key_arn
      }
    ]
  })
  tags = local.common_tags
}

这种方式会由Terraform自动处理变量插值和JSON格式,彻底规避手动编写的语法错误。

  • 验证策略合法性
    将插值后的完整JSON(可通过terraform console获取变量实际值并替换到策略中)放到AWS IAM控制台的策略编辑器中验证,排查是否存在AWS层面的策略逻辑错误(比如Action名称拼写错误、Resource ARN不合法)。

内容的提问来源于stack exchange,提问作者Ross Bush

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:35:20