Terraform加载EKS策略JSON报错aws_iam_policy_document不支持如何解决
解决方法
首先明确错误根源:aws_iam_policy_document是AWS Provider提供的数据源类型,不是资源类型,你使用resource块声明属于语法错误,同时参数配置也不符合数据源要求。
方案1:直接引用JSON文件(适配你的当前场景)
如果你已经写好完整的EKS用户策略JSON,不需要动态修改策略内容,直接在IAM策略资源中引用文件即可,无需使用aws_iam_policy_document:
resource "aws_iam_policy" "eks_ops_manager" { name = "eks-ops-user-policy" description = "EKS专属用户权限策略" policy = file("templates/eks_user_policy.json") }
方案2:修正数据源声明(适合需要动态扩展策略的场景)
如果你后续需要对现有JSON策略做动态拼接、添加权限语句、合并策略等操作,把块类型从resource改为data,同时将参数替换为数据源支持的source_json:
# 声明数据源加载现有JSON策略 data "aws_iam_policy_document" "ops_manager" { source_json = file("templates/eks_user_policy.json") # 可在此处添加额外的statement块动态扩展权限 } # 引用数据源生成的策略创建IAM资源 resource "aws_iam_policy" "eks_ops_manager" { name = "eks-ops-user-policy" description = "EKS专属用户权限策略" policy = data.aws_iam_policy_document.ops_manager.json }
兼容检查配置
你使用的Terraform v0.14.9仅兼容3.x版本的AWS Provider,需在根目录声明版本锁定规则,避免拉取不兼容的高版本Provider:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.75" } } }
修改配置后先执行terraform init重新初始化Provider,再执行terraform plan即可消除报错。
内容的提问来源于stack exchange,提问作者olibruno
相关产品推荐
相关产品推荐

