使用Terraform实现AzureAD用户、组及部门组成员绑定
Terraform 绑定Azure AD用户与部门组实现方案
现有代码已完成用户、部门安全组的基础创建,补充以下任意一种配置即可完成成员关系绑定,两种方案按需选择即可。
方案1:独立成员资源绑定(推荐)
使用azuread_group_member资源为每个用户单独建立组关联,不会覆盖组内非Terraform管理的其他成员,稳定性更高,直接在现有代码末尾追加以下配置即可:
resource "azuread_group_member" "user_group_binding" { for_each = { for user in local.users : "${user.first_name}_${user.last_name}" => user } group_object_id = azuread_group.groups[each.value.department].object_id member_object_id = azuread_user.users[each.value.first_name].object_id }
配置说明:for_each的键采用姓名拼接格式,避免出现同名first_name导致的键冲突问题,若确认first_name全局唯一可直接使用first_name作为键
方案2:组资源内嵌成员列表
如果部门组的所有成员完全由当前Terraform配置托管,不存在手动添加或其他系统同步的成员,可以直接修改现有azuread_group.groups资源块,补充members属性实现绑定,修改后的组资源代码如下:
resource "azuread_group" "groups" { for_each = local.groups display_name = each.key security_enabled = true assignable_to_role = true members = [ for user in local.users : azuread_user.users[user.first_name].object_id if user.department == each.key ] }
注意事项
- 两种方案不可同时使用,否则会触发资源管理冲突,报成员已存在的错误
- 不要直接嵌套遍历两个for_each生成的资源集合做绑定,必须先构造键唯一的固定映射集合作为for_each输入,否则会出现Terraform无法预判资源规模的规划错误
- 上述配置适配azuread provider 2.x及以上稳定版本
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

