如何在Terraform中遍历Map列表获取值并添加至IAM策略
解决方法
要直接从var.iam_user_groups变量中提取指定组的用户ARN列表,只需通过键名直接引用对应的列表即可——你要的是用户ARN,而IAM组资源返回的是组本身的ARN,完全不需要绕到组资源里去。
正确配置示例
将IAM策略的principals部分修改为:
principals { type = "AWS" identifiers = var.iam_user_groups["finance-users"] }
之前写法的问题
- 你把资源引用写成了字符串
"aws_iam_group.iam_group_team['finance-users'].arn",Terraform不会解析字符串内部的资源引用,必须用原生的变量/资源引用语法。 aws_iam_group.iam_group_team["finance-users"].arn获取的是IAM组自身的ARN,不是组内用户的ARN,和你的需求完全不匹配。你的var.iam_user_groups变量本身就存储了每个组对应的用户ARN列表,直接引用即可。
扩展:合并多个组的用户ARN
如果需要同时加入多个组的用户,可使用concat函数合并列表:
principals { type = "AWS" identifiers = concat( var.iam_user_groups["finance-users"], var.iam_user_groups["all-users"] ) }
内容的提问来源于stack exchange,提问作者Kaysss
相关产品推荐
相关产品推荐

