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

Terraform aws_iam_policy_document与原IAM JSON策略是否等效?

结论

你的Terraform配置和原始JSON策略完全不等效,核心错误是condition块内的variable参数值填写错误,这也是执行plan时出现条件键变更的直接原因。

variable参数的作用逻辑

在aws_iam_policy_document数据源的condition块中:

  • test对应原始IAM JSON中Condition块下的条件运算符(比如你这里的ArnLike)
  • variable对应该运算符下的IAM条件键名,必须和原始JSON里的键名逐字完全匹配,字符顺序、拼写都不能出错
  • values是条件键匹配的目标值列表,即使只有一个值也用列表格式传入,Terraform渲染JSON时会自动适配IAM支持的单值/数组值格式,这部分你的写法没有问题。

具体错误点

原始JSON里ArnLike下的条件键是kms:EncryptionContext:aws:logs:arn,你写配置时把键名的字段顺序写反了,写成了kms:EncryptionContext:arn:aws:logs,相当于配置了一个完全不存在的条件键,和原始策略的逻辑完全不一致。
这也和你看到的plan输出完全对应:

  • 被标记为删除(-)的kms:EncryptionContext:aws:logs:arn才是原始策略里正确的条件键
  • 被标记为新增(+)的kms:EncryptionContext:arn:aws:logs是你写错的无效条件键

正确的配置写法

把variable参数的值改成和原始JSON完全一致的键名即可,修正后的condition块代码如下:

condition {
  test     = "ArnLike"
  variable = "kms:EncryptionContext:aws:logs:arn"
  values = [
    "arn:aws:logs:${var.region}:${data.aws_caller_identity.current.account_id}:*"
  ]
}

修正后重新执行plan,就不会再出现Condition块的非预期变更了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:42:14