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

Terraform遍历列表值Map:为每个应用创建关联团队的AWS IAM角色

解决方案

要实现每个应用单独创建IAM角色,同时能引用所属团队信息,核心是调整数据结构和遍历逻辑,确保每个应用对应独立的角色与信任策略。具体配置如下:

1. 扁平化应用-团队映射

先把嵌套的apps Map转换成每个应用对应所属团队的扁平结构,方便后续逐个遍历应用:

locals {
  # 生成结构示例:"team_1-app_1" = { team = "team_1", app = "app_1" }
  flat_apps = merge([
    for team, apps in var.managed_apps : {
      for app in apps : "${team}-${app}" => {
        team = team
        app  = app
      }
    }
  ]...)
}

2. 为每个应用生成专属信任策略

用for_each遍历扁平化后的应用列表,为每个应用单独生成仅允许自身服务账号AssumeRole的信任策略:

data "aws_iam_policy_document" "app_trust_policy" {
  for_each = local.flat_apps

  statement {
    actions = ["sts:AssumeRoleWithWebIdentity"]

    condition {
      test     = "StringEquals"
      variable = "${local.op_url}:sub"
      values   = ["system:serviceaccount:${each.value.team}:${each.value.app}-sa"]
    }
  }
}

3. 为每个应用创建独立IAM角色

基于扁平化的应用列表遍历,每个角色对应一个应用,同时可直接通过each.value.team获取所属团队信息:

resource "aws_iam_role" "application_role" {
  for_each = local.flat_apps

  name               = "${each.value.team}-${each.value.app}-role"
  assume_role_policy = data.aws_iam_policy_document.app_trust_policy[each.key].json
  tags               = merge(var.tags, {
    Team = each.value.team
    App  = each.value.app
  })
}

关键调整说明

  • 原配置按团队分组创建角色,现在改为按单个应用遍历,确保每个应用对应独立IAM角色
  • 信任策略从全局统一改为应用专属,避免权限范围过大
  • 通过扁平化后的local.flat_apps,可在遍历过程中随时获取当前应用的所属团队信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:52:10