You need to enable JavaScript to run this app. 执行Terraform plan提示policy含无效JSON策略,请求排查策略问题
优惠活动
大模型
产品
解决方案
定价
更多

执行Terraform plan提示policy含无效JSON策略,请求排查策略问题

报错说明与修复方案

你遇到的报错Error: "policy" contains an invalid JSON policy中文含义为:错误:"policy"字段包含无效的JSON策略。

你贴出的JSON策略本身语法没有问题,报错来自Terraform侧的策略定义环节,常见错误点和对应修复方式如下:

  • 最常见诱因:策略未使用jsonencode函数包裹
    如果你直接把JSON字符串赋值给aws_iam_policy等资源的policy参数,Terraform会将JSON内部的双引号识别为字符串边界,导致渲染后的JSON格式破损。

    错误写法参考:

    resource "aws_iam_policy" "test_policy" {
      name   = "test-policy"
      policy = <<EOF
    {
      "Version": "2012-10-17",
      // 策略内容
    }
    EOF
    }
    

    正确写法:使用jsonencode包裹策略结构,Terraform会自动处理转义逻辑,避免格式错误:

    resource "aws_iam_policy" "test_policy" {
      name        = "test-policy"
      description = "S3和KMS访问权限策略"
      policy = jsonencode({
        Version = "2012-10-17"
        Statement = [
          {
            Effect = "Allow"
            Action = [
              "s3:PutObject",
              "s3:GetObject",
              "s3:ListBucket",
              "s3:GetObjectVersion"
            ]
            Resource = [
              "arn:aws:s3:::lambda-sam-sandbox/*",
              "arn:aws:s3:::lambda-sam-sandbox"
            ]
          },
          {
            Effect = "Allow"
            Action = ["kms:Decrypt"]
            Resource = "arn:aws:kms:us-east-1:1234567980:key/18d052ff-6705-43aa-b"
          }
        ]
      })
    }
    
  • 次要排查点:检查KMS密钥ARN完整性
    你当前填写的KMS密钥ARN末尾ID为18d052ff-6705-43aa-b,不符合AWS KMS密钥ID标准的36位UUID格式,大概率是复制时遗漏了末尾字符,错误的ARN在部分校验场景下也会触发格式类报错。
  • 其他排查点:检查Terraform插值语法是否正确
    如果你在策略中使用了Terraform变量,确认所有${var.xxx}、${data.xxx}等插值语法都正确闭合,没有多余的引号、换行或者未转义的特殊字符,避免渲染后的JSON结构破损。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:39:03