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

如何用Terraform为CSV中的每个Azure AD用户分配独立随机密码?

为每个Azure AD用户生成独立随机密码的Terraform实现

问题背景

当前Terraform配置中,所有用户共享同一个random_password生成的密码,需要调整为每个用户拥有独立的随机密码。同时原配置存在字段引用错误(CSV未包含first_name/last_name字段,但代码中进行了引用)。

原CSV文件内容:

user_name
User1
User2
User3
User4

原读取CSV的配置:

locals {
  users = csvdecode(file("${path.module}/users.csv"))
}

原密码生成配置(单实例导致所有用户共用):

resource "random_password" "password" {
  length           = 16
  special          = true
  override_special = "!#$%&*()-_=+[]{}<>?:?"
}

原用户创建配置(存在字段引用错误):

resource "azuread_user" "users" {
  for_each = { for user in local.users : user.first_name => user }

  user_principal_name = format(
    "%s@%s",
    each.value.user_name,
    "mydomain.com"
  )
  password = each.value.password
  display_name = "${each.value.first_name} ${each.value.last_name}"
}

解决方案

通过for_each遍历用户列表,为每个用户创建独立的random_password实例,同时修正字段引用问题:

1. 构建用户唯一映射

以CSV中的user_name作为唯一键,构建用户映射,避免键值冲突:

locals {
  users = csvdecode(file("${path.module}/users.csv"))
  user_map = { for u in local.users : u.user_name => u }
}

2. 为每个用户生成独立密码

使用for_each遍历用户映射,创建与用户一一对应的random_password资源:

resource "random_password" "user_password" {
  for_each = local.user_map

  length           = 16
  special          = true
  override_special = "!#$%&*()-_=+[]{}<>?:?"
}

3. 创建用户并绑定对应密码

修改azuread_user资源,引用当前用户对应的随机密码,并修正display_name的生成逻辑(根据CSV实际字段调整):

resource "azuread_user" "users" {
  for_each = local.user_map

  user_principal_name = "${each.key}@mydomain.com"
  # 绑定当前用户专属的随机密码
  password = random_password.user_password[each.key].result
  # 若CSV无姓名字段,直接用user_name作为显示名称,后续可补充CSV字段再调整
  display_name = each.key
}

关键说明

  • 利用for_each实现random_password资源的多实例化,确保每个用户对应独立的密码生成实例。
  • 原配置中first_name/last_name字段未在CSV中定义,需根据实际业务需求补充CSV字段或调整display_name逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:05:43