首页 > 解决方案 > 通过从 CSV 文件中获取用户详细信息,使用 terraform 在 azure AD 组中添加用户

问题描述

我正在关注此文档管理 Azure Active Directory (Azure AD) 用户和组以及同一页面中提到的相同存储库,以在 Azure AD 组中添加用户。

我不需要资源函数来创建用户,因为用户已经由另一个团队创建。我们只需要创建组并将成员添加到其中。

我可以通过创建带有成员电子邮件地址的 tfvars 文件来将用户添加到组

terraform.tfvars

dev-team = [
  "a@example.com",
  "b@example.com"
]

组.tf

data "azuread_user" "user" {
  for_each            = toset(var.dev-team)
  user_principal_name = each.key
}

resource "azuread_group" "api-jnk-cld-ops" {
  display_name = "api-jnk-cld-ops"
  security_enabled = true
}

resource "azuread_group_member" "member" {
  for_each         = toset(var.dev-team)
  group_object_id  = azuread_group.api-jnk-cld-ops.id
  member_object_id = data.azuread_user.user[each.key].id
}

变量.tf

variable "dev-team" {
  type = list(string)
}

我想要实现的是,用户应该在 csv 文件中列出,而不是在 tfvars 中给出。与官方文档中提到的管理 Azure Active Directory (Azure AD) 用户和组的方式相同,唯一不同的是我不想创建用户。

获取用户并检查用户属于哪个部门并将用户添加到正确的组这就是我想要做的..

错误:如果我有在另一个组中使用的重复 UPN,则会出现新问题。

在这个“for”表达式中,两个不同的项目产生了键“user1@example.com”。如果需要重复,请在值表达式后使用省略号 (...) 以启用按键分组。

AzureGroup  Surname UserPrincipalName   UserSamAccountName  GroupName   ObjectClass DistinguishedName   GivenName   Enabled AzureUserPrincipalName  AzureUserId
api-jnk-cld-ops user1   user1@example.com   abcd    api-jnk-cld-ops user        user1   TRUE    user1@test.onmicrosoft.com  fad08bd2-3fa471403656
api-jnk-ai-ops  user2   user2@example.com   defg    api-jnk-ai-ops  user        user2   TRUE    user2@test.onmicrosoft.com  5f2d00eb-bfc6-67219cec3bb7
api-jnk-bd-ops  user1   user1@example.com   abcd    api-jnk-bd-ops  user        user1   TRUE    user1@test.onmicrosoft.com  fad08bd2-3fa471403656
resource "azuread_group_member" "member" {
  
  for_each = { for user in local.users : user.AzureUserPrincipalName => user if user.AzureGroup == "api-jnk-cld-ops" }
  group_object_id  = azuread_group.api-jnk-cld-ops.id
  member_object_id = data.azuread_user.user[each.key].id
}

标签: azureazure-devopsazure-active-directoryterraform

解决方案


我想要实现的是,用户应该在 csv 文件中列出,而不是在 tfvars 中给出。与官方文档中提到的管理 Azure Active Directory (Azure AD) 用户和组的方式相同,唯一不同的是我不想创建用户。

您可以使用以下代码满足您的要求:

provider "azuread" {}
locals {
  users = csvdecode(file("C:/user.csv"))
}
data "azuread_user" "user" {
  for_each = { for user in local.users : user.UPN => user }
  user_principal_name = each.value.UPN
}

resource "azuread_group" "dev-team" {
  display_name = "inx-dev"
  security_enabled = true
}

resource "azuread_group_member" "member" {
  for_each = { for user in local.users : user.UPN => user }
  group_object_id  = azuread_group.dev-team.id
  member_object_id = data.azuread_user.user[each.key].id
} 

CSV 文件:

在此处输入图像描述

输出:

在此处输入图像描述

在此处输入图像描述

更新以下错误:

在此处输入图像描述

如果您使用 Duplicates,则必须通过索引将列表转换为映射,因此您可以使用如下的 for 循环:

data "azuread_user" "user" {
  for_each = { for i , user in local.users : i => user }
  user_principal_name = each.value.AzureUserPrincipalName
}

resource "azuread_group" "dev-team" {
  display_name = "inx-dev"
  security_enabled = true
}

resource "azuread_group_member" "member" {
  for_each = { for i,user in local.users : i => user  if user.AzureGroup == "api-jnk-cld-ops" }
  group_object_id  = azuread_group.dev-team.id
  member_object_id = data.azuread_user.user[each.key].id
}

输出:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述


推荐阅读