Как создать секрет клиента для субъекта-службы Azure с помощью Terraform

Я новичок в Azure и Terraform и пытаюсь создать секретный клиент для субъекта-службы Azure с помощью Terraform. Я не могу понять этого.

Вот что у меня сейчас:

provider "azuread" {
  version = "=0.7.0"
  client_id = var.aws_client_id
  subscription_id = var.aws_subscription_id
  tenant_id = var.aws_tenant_id
  client_secret = var.aws_client_secret
}

# Create an application
resource "azuread_application" "app" {
  name = var.azurerd_app_name
}

# Create a service principal
resource "azuread_service_principal" "app" {
  application_id = azuread_application.app.application_id
}

Это то, что я пробовал (не очень уверен в этом):

resource "random_string" "password" {
  length  = 32
  special = true
}

# Create Service Principal password
resource "azuread_service_principal_password" "app" {
  end_date             = "2299-12-30T23:00:00Z"                        # Forever
  service_principal_id = azuread_service_principal.app.id
  value                = random_string.password.result
}

Это, очевидно, не работает. Это не вызывает никаких ошибок, но секреты не отображаются на консоли Azure. Похоже, это для прикрепления пароля к принципалу службы, но я не очень уверен, что он делает.

Пожалуйста, дайте мне знать, что можно с этим сделать. Любая помощь будет оценена. Благодарность

3 ответа

Фактически, azuread_service_principal_password работал хорошо, но пароль не отображался на портале.

Вы могли бы использовать azuread_application_password для управления паролем, связанным с приложением в Azure AD. см. ПРИМЕЧАНИЕ, убедитесь, что приложение имеет указанные разрешения.

Секрет клиента для принципа обслуживания, созданного в вашем примере, будет работать. Секрет клиента будет иметь значениеrandom_string.password.result как вы назначаете это azuread_service_principal_password.app.value что является секретом клиента.

Если вы хотите вывести секрет клиента на консоль, чтобы увидеть его, вы можете создать вывод terraform:

output "client_secret" {
  value = random_string.password.result
  sensitive = false # Note that you might not want to print this in out in the console all the time
}

Вы также можете в любое время попросить terraform распечатать значение из своего состояния:

$ terraform state show random_string.password.result

Вы можете позволить Terraform и Azure создать пароль для вас, а затем использовать terraform outputчтобы получить его. Вы, вероятно, хотите, чтобы он был помечен как конфиденциальный .

      # Create Azure AD App Registration
resource "azuread_application" "app" {
  display_name = "my-app"
}

# Create Service Principal
resource "azuread_service_principal" "app" {
  application_id = azuread_application.app.application_id
}

# Create Service Principal password
resource "azuread_service_principal_password" "app" {
  service_principal_id = azuread_service_principal.app.id
}

# Output the Service Principal and password
output "sp" {
  value     = azuread_service_principal.app.id
  sensitive = true
}

output "sp_password" {
  value     = azuread_service_principal_password.app.value
  sensitive = true
}

затем terraform output sp_passwordполучит его для вас, и вы не будете распечатывать его на консоли каждый раз planа также apply.