如何在Terraform中获取指定IAM组ARN并在IAM策略中引用
解决方案
你不需要遍历所有IAM组,利用Terraform中for_each创建资源返回的映射类型特性,直接通过组的键名admin-team精准获取对应ARN即可:
修改后的IAM策略条件块
condition { test = "StringNotEquals" variable = "aws:PrincipalArn" values = [aws_iam_group.data_engineers_team["admin-team"].group_arn] }
原理说明
- 你的
aws_iam_group.data_engineers_team资源通过for_each = var.iam_user_groups创建,Terraform会将其处理为一个键值对映射:键是var.iam_user_groups里的组名(比如admin-team),值是对应IAM组的资源对象。 - 直接通过
["admin-team"]索引这个映射,就能拿到该组的完整资源对象,再访问.group_arn属性即可获取ARN,完全避免硬编码和遍历操作。
可选:添加存在性校验
如果想确保admin-team组一定在变量中定义,避免部署报错,可以在variables.tf中添加验证规则:
variable "iam_user_groups" { type = map(list(string)) description = "The iam user groups variables" validation { condition = contains(keys(var.iam_user_groups), "admin-team") error_message = "iam_user_groups必须包含admin-team组定义。" } }
内容的提问来源于stack exchange,提问作者Kaysss
相关产品推荐
相关产品推荐

