#terraform #terraform-provider-azure
Вопрос:
Я создал службу приложений azure с использованием terraform, по умолчанию она выбирает настройку аутентификации в старом стиле. Как предполагает Microsoft, старые настройки будут удалены в конце этого года, мы хотели бы перейти на новые настройки аутентификации. Я не вижу никакой документации по этому поводу. Когда я вручную обновил настройки аутентификации для одной из служб приложений, terraform больше не может обновлять данную службу приложений
Ниже приведен фрагмент кода, который я использую для создания службы приложений. Это создает службу приложений с версией AUTH1.
resource "azurerm_app_service" "as" {
for_each = var.appservice
name = lookup(each.value, "appservice_name")
location = var.location
resource_group_name = var.resource_group_name
app_service_plan_id = var.app_service_plan_id
https_only = lookup(each.value, "https_only", null)
client_cert_enabled = lookup(each.value, "client_cert_enabled", false)
tags = var.standard_tags
dynamic "site_config" {
for_each = lookup(each.value, "site_config",[])
content {
always_on = lookup(site_config.value, "always_on", true)
app_command_line = lookup(site_config.value, "app_command_line", null)
auto_swap_slot_name = lookup(site_config.value, "auto_swap_slot_name", null)
dynamic "cors" {
for_each = lookup(site_config.value, "cors", [])
content {
allowed_origins = lookup(cors.value, "allowed_origins", null)
support_credentials = lookup(cors.value, "support_credentials", null)
}
}
default_documents = lookup(site_config.value, "default_documents", ["index.html", "hostingstart.html"])
dotnet_framework_version = lookup(site_config.value, "dotnet_framework_version", null)
ftps_state = lookup(site_config.value, "ftps_state", "FtpsOnly")
http2_enabled = lookup(site_config.value, "http2_enabled", true)
health_check_path = lookup(site_config.value, "health_check_path", null)
java_container = lookup(site_config.value, "java_container", null)
java_container_version = lookup(site_config.value, "java_container_version", null)
java_version = lookup(site_config.value, "java_version", null)
linux_fx_version = lookup(site_config.value, "linux_fx_version", null)
local_mysql_enabled = lookup(site_config.value, "local_mysql_enabled", null)
managed_pipeline_mode = lookup(site_config.value, "managed_pipeline_mode", null)
min_tls_version = lookup(site_config.value, "min_tls_version", "1.2")
php_version = lookup(site_config.value, "php_version", null)
python_version = lookup(site_config.value, "python_version", null)
remote_debugging_enabled = lookup(site_config.value, "remote_debugging_enabled", null)
remote_debugging_version = lookup(site_config.value, "remote_debugging_version", null)
scm_type = lookup(site_config.value, "scm_type", "VSTSRM")
use_32_bit_worker_process = lookup(site_config.value, "use_32_bit_worker_process", null)
websockets_enabled = lookup(site_config.value, "websockets_enabled", null)
windows_fx_version = lookup(site_config.value, "windows_fx_version", null)
}
}
app_settings = merge(lookup(each.value, "app_settings", {}), var.custom_app_settings)
auth_settings {
enabled = true
default_provider = "AzureActiveDirectory"
issuer = "https://login.microsoftonline.com/XXXXXX/v2.0/"
unauthenticated_client_action = "RedirectToLoginPage"
active_directory {
client_id = var.as_client_id
client_secret = var.as_client_secret
allowed_audiences = [
"https://${lookup(each.value, "appservice_name")}.azurewebsites.net"
]
}
}
Комментарии:
1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
2. Я не вижу никакой документации для ресурса v2, поэтому код такой же, как у V1.
3. @Shankar, не могли бы вы, пожалуйста, добавить в вопрос ту же часть настройки аутентификации службы приложений v1?
4. извините за это, я добавил сейчас.
5. Если ответ был полезным, пожалуйста, примите его в качестве Ответа , чтобы другие люди, столкнувшиеся с той же проблемой, могли найти это решение и решить свою проблему.
Ответ №1:
К сожалению, использование Terraform для переноса API аутентификации версии V1 на V2 в настоящее время невозможно. Пока это можно сделать только с портала .
Но в соответствии Terraform-Provider-azurerm
с объявлением о выпуске версии 3.0 упоминается, что устаревший API будет перенесен в новый API, который будет использовать аутентификацию MSAL вместо ADAL.
Сведения о функциях: Переключение на использование MSAL для аутентификации вместо ADAL
Аутентификация для API, таких как диспетчер ресурсов, в настоящее время выполняется с использованием библиотеки ADAL, которая выдает устаревшие маркеры аутентификации v1. Мы перейдем к использованию токенов v2 в версии 3.0 поставщика. На практике это изменение не приведет к каким-либо заметным поведенческим различиям; однако, поскольку это лежит в основе способа аутентификации поставщика в службах Azure, мы внесем это изменение в основной выпуск.
Вы можете ознакомиться Release Announcement for Terraform-provider-azurerm
с более подробной информацией о предстоящих изменениях для azurerm версии 3.0.