Terraform新手求助:如何为多个IAM用户批量绑定AWS托管策略?
解决方案:批量绑定IAM用户与托管策略
要实现所有用户绑定全部3项权限,你需要生成每个用户与每个托管策略的组合,用Terraform的setproduct函数创建两者的笛卡尔积,再通过for_each遍历所有组合即可完成批量绑定。另外别忘了先批量创建这些IAM用户,否则绑定策略会失败。
完整代码示例
provider "aws" { region = "ap-southeast-1" } # 批量创建定义的IAM用户 resource "aws_iam_user" "users" { for_each = toset(var.username) name = each.key } # 批量给每个用户绑定所有托管策略 resource "aws_iam_user_policy_attachment" "user_policy_attachments" { # 生成用户与策略的所有组合,同时为每个组合生成唯一标识键 for_each = { for pair in setproduct(var.username, var.managedpolicy) : "${pair[0]}-${replace(pair[1], "/", "-")}" => pair } user = each.value[0] policy_arn = each.value[1] }
关键说明
setproduct(var.username, var.managedpolicy):生成用户列表与策略列表的全量配对,比如["name1", "arn:aws:iam::aws:policy/AmazonEC2FullAccess"]这类组合,相当于实现了嵌套循环的效果。- 自定义
for_each的键:把用户名和策略ARN的特殊字符替换后拼接,确保每个绑定实例有唯一标识,避免Terraform资源命名冲突。 - 先创建用户:
aws_iam_user资源批量生成所有定义的用户,保证绑定策略时目标用户已存在。
内容的提问来源于stack exchange,提问作者Wai_Lynn
相关产品推荐
相关产品推荐

