Назначение случайных паролей при создании нескольких пользователей Azure Active Directory с помощью Terraform, считывающего CSV-файл

Я пытаюсь назначить случайные пароли нескольким пользователям AAD - в файле csv - с помощью Terraform и ресурсов "azuread_user"

Во-первых, у меня есть этот CSV-файл с некоторыми пользователями:

user_name
User1
User2
User3
User4

Далее я прочитал этот файл CSV, используя:

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

Затем, используя ресурс random_password, я генерирую новый пароль:

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

Затем с помощью «azuread_user» я пытаюсь создать пользователя со сгенерированным паролем:

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}"

}

но проблема в том, что у каждого пользователя один и тот же пароль от ресурса "random_password" "пароль".

Как я могу назначить случайный пароль для каждого пользователя?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался создать пользователей со случайными паролями, как показано ниже:

locals {
  users = {
    "[email protected]" = { first_name = "John", last_name = "Doe" , department = "Marketing Department" },
    "[email protected]" = { first_name = "Jane", last_name = "Doe" , department = "IT Department"}
  }
}


resource "random_password" "passwords" {
  for_each = local.users
  length  = 16
  special = true
}


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

  display_name         = "${each.value.first_name} ${each.value.last_name}"
  mail_nickname        = each.value.first_name
  user_principal_name = each.key
  password            = random_password.passwords[each.key].result
  department = each.value.department
}

Чтобы проверить, генерируются ли случайные пароли, я сохранил их в хранилище ключей и проверил . Они кажутся разными для разных пользователей.

resource "azurerm_key_vault" "example" {
  name                        = "kavyaexmplekeyvault"
  location                    = data.azurerm_resource_group.example.location
  resource_group_name         = data.azurerm_resource_group.example.name
  enabled_for_disk_encryption = true
  tenant_id                   = data.azurerm_client_config.current.tenant_id
  soft_delete_retention_days  = 7
  purge_protection_enabled    = false

  sku_name = "standard"

  access_policy {
    tenant_id = data.azurerm_client_config.current.tenant_id
    object_id = data.azurerm_client_config.current.object_id

   
    key_permissions = [
      "Create",
      "Get",
    ]

    secret_permissions = [
      "Set",
      "Get",
      "Delete",
      "Purge",
      "Recover",
      "List"
    ]

    storage_permissions = [
      "Get","Set"
    ]
  }
}

resource "azurerm_key_vault_secret" "password_one" {
  for_each = local.users
  name         = "passwrdone${each.value.first_name}"
  value        =  random_password.passwords[each.key].result
  key_vault_id = azurerm_key_vault.example.id
}

Пароль для Джейн:

Пароль для Джона:

Другие вопросы по теме