azurerm_app_service v2 как включить настройку аутентификации для версии 2

#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.