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

Terraform AWS IAM:为何策略文档需定义为data而非resource?

为什么创建IAM策略文档要用data "aws_iam_policy_document"而非resource?

首先得搞清楚Terraform里data和resource的本质区别:

  • resource是用来在云服务商(比如AWS)上创建、管理实际资源的,比如aws_iam_policy就是负责在AWS上生成正式的IAM策略资源。
  • data的作用不止是引用已有资源,它还能生成或计算配置数据,这些数据会作为其他资源的输入,本身不会在云服务商那边创建独立的实体资源。

回到aws_iam_policy_document:它的核心功能是帮你用Terraform的语法拼接出符合IAM规范的JSON策略文本,而非直接在AWS上创建策略资源。你用它生成的JSON文本,最终要传给aws_iam_policy这个resource,由后者去AWS上创建真正生效的IAM策略。

举个实际的例子:

# 用data生成符合格式的策略JSON文本
data "aws_iam_policy_document" "example" {
  statement {
    actions   = ["s3:ListBucket"]
    resources = ["arn:aws:s3:::my-bucket"]
  }
}

# 用resource在AWS上创建实际的IAM策略资源
resource "aws_iam_policy" "example" {
  name   = "example-s3-policy"
  policy = data.aws_iam_policy_document.example.json # 引用上面生成的JSON文本
}

简单说,aws_iam_policy_document是个「策略文本生成器」,属于Terraform本地计算的范畴;而真正负责在AWS上落地策略的是aws_iam_policy这个资源类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:33:15