执行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
相关产品推荐
相关产品推荐

