Динамическое изменение приоритета при добавлении ограничения на несколько IP-адресов для служб приложений в Azure с использованием terraform

#terraform #azure-web-app-service #terraform-provider-azure #azurerm-app-service

Вопрос:

Я ищу решение для изменения приоритета в динамическом коде «ip_restrication», который я использую

 variable "ip_address_list" { 
  type = list 
  default = ["20.20.20.3/32" , "10.10.10.2/32"] 
}
 
 site_config {
  dynamic "ip_restriction" {
for_each = var.ip_address_list
  content {
    ip_address  = cidrhost(ip_restriction.value, 0)
    action                    = "Allow"
    priority                  = 100
  }
}
 

При использовании этого кода я получил следующий вывод

  • ip_рестрикция= [
  • {
  • действие= «Разрешить»
  • заголовки= (известны после применения)
  • ip_адрес= «20.20.20.3»
  • имя= (известно после применения)
  • приоритет= 100
  • service_tag= ноль
  • virtual_network_subnet_id = null },
  • {
  • действие= «Разрешить»
  • заголовки= (известны после применения)
  • ip_адрес= «10.10.10.2»
  • имя= (известно после применения)
  • приоритет= 100
  • service_tag= ноль
  • virtual_network_subnet_id = null }, ]

Комментарии:

1. Не могли бы вы, пожалуйста, добавить свой variables.tf или как определяется список адресов var.ip_address_list?

2. Переменная определяется следующим образом: переменная «ip_address_list» { тип = список по умолчанию= [«20.20.20.3/32» , «10.10.10.2/32»] }

Ответ №1:

Вы можете использовать что-то вроде этого:

 locals {
 ip_address_list = [
           {     
                  ip_add : "20.20.20.3/32",
                  prior : "100"
            },
            {     
                 ip_add : "10.10.10.2/32",
                 prior : "101"
            }
     ]
}
 

и затем

   site_config {
  dynamic "ip_restriction" {
for_each = local.ip_address_list
  content {
    ip_address  = ip_restriction.value["ip_add"]
    action                    = "Allow"
    priority                  = ip_restriction.value["prior"]
  }
}
 

Выход:

введите описание изображения здесь

Примечание.Вместо объявления переменных вы можете объявить локальные, как указано выше, а затем использовать блок конфигурации сайта, указанный выше.

Обновление: В соответствии с этой проблемой Github @martinjt прокомментировал, что он ожидает ipadd/32, поскольку маска подсети не включена в новые версии . Итак, изменил приведенный выше код, удалив cidrhost и применив его, он был успешно развернут.

Ошибка: с cidrhost

введите описание изображения здесь

После удаления cidrhost

введите описание изображения здесь

Комментарии:

1. Это выглядит хорошо, но при попытке развертывания у меня возникает ошибка: Ошибка: создание службы приложений «hook-service» (Группа ресурсов «RG-DEV-ТЕСТ»): web.AppsClient#CreateOrUpdate: Ошибка отправки запроса: StatusCode=0 — Исходная ошибка: Код=»Плохой запрос» Сообщение=»Ограничение безопасности IPS». IP-адрес недействителен. «20.20.20.3» является недопустимым CIDR!»}

2. также @Игорь, не могли бы вы, пожалуйста, попробовать ip_restriction.value["ip_add"] только вместо cidrhost(ip_restriction.value["ip_add"], 0) и дать мне знать, если это решит вышеуказанное '20.20.20.3' is an invalid CIDR!"}

3. Спасибо. Я протестировал, и он успешно развертывается.