azure - 通过从 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
}
解决方案
我想要实现的是,用户应该在 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
}
输出:
推荐阅读
- excel - 我在尝试自动调整行时收到 400 错误消息。(和冷冻细胞)
- powershell - 无法使用 Sitecore Powershell 获取 xDB 报告
- typescript - 如何使用 serenity-js 断言 Web 元素在屏幕上可见?
- c# - 如何在我的 c# regex 表达式中避免嵌套限定符
- python - 自定义图像数据增强导致TensorFlow2.0内存泄漏
- r - 直接在R中从网页中获取csv数据
- php - TypeError:网络请求使用 fetch ReactNative 和 Laravel 响应失败
- php - 如何从php中的文本文件中检索特定用户的数据
- email - Spring集成:imap,imap-idle-channel-adapter中属性mail-filter-expression引起的持续远程服务轮询
- postman - 如何确保始终禁用“自动遵循重定向”设置?