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

