Не удается развернуть NSG для шлюза приложений версии 2

У меня возникли проблемы с развертыванием группы безопасности сети (NSG) для подсети, в которой размещен шлюз приложений (AG).

Во время развертывания я получаю следующую ошибку (я удалил пути ресурсов для удобства чтения):

Группа безопасности сети nsg-acc-waf блокирует входящий интернет-трафик через порты 65200–65535 в подсеть snet-acc-waf, связанную со шлюзом приложений agw-acc. Это не разрешено для шлюзов приложений с номером V2.

Все выглядит хорошо согласно инструкциям по настройке на https://learn.microsoft.com/en-us/azure/application-gateway/configuration-infrastructure#allow-access-to-a-few-source-ips

Вот бицепс, который я создал с помощью приведенных выше инструкций, и мой вопрос касается nsgRule110:

resource wafNsg 'Microsoft.Network/networkSecurityGroups@2021-03-01' = {
  name: 'nsg-${environmentName}-waf'
  location: location

  resource nsgRule100 'securityRules' = {
    name: 'AllowPublicIPAddress'
    properties: {
      access: 'Allow'
      description: 'Allow traffic from Public IP Address.'
      destinationAddressPrefix: '*'
      destinationPortRange: '443'
      direction: 'Inbound'
      priority: 100
      protocol: 'Tcp'
      sourceAddressPrefix: publicIpAddress
      sourcePortRange: '*'
    }
  }

  resource nsgRule101 'securityRules' = {
    name: 'AllowInternetAccess'
    properties: {
      access: 'Allow'
      description: 'Allow traffic from Internet on port 443.'
      destinationAddressPrefix: '*'
      destinationPortRange: '443'
      direction: 'Inbound'
      priority: 101
      protocol: 'Tcp'
      sourceAddressPrefix: 'Internet'
      sourcePortRange: '*'
    }
  }

  resource nsgRule110 'securityRules' = {
    name: 'AllowGatewayManager'
    properties: {
      access: 'Allow'
      description: 'Allow traffic from GatewayManager. This port range is required for Azure infrastructure communication.'
      destinationAddressPrefix: '*'
      destinationPortRange: '65200-65535'
      direction: 'Inbound'
      priority: 110
      protocol: '*'
      sourceAddressPrefix: 'GatewayManager'
      sourcePortRange: '*'
    }
  }

  resource nsgRule120 'securityRules' = {
    name: 'AllowAzureLoadBalancer'
    properties: {
      access: 'Allow'
      description: 'Allow traffic from AzureLoadBalancer.'
      destinationAddressPrefix: '*'
      destinationPortRange: '*'
      direction: 'Inbound'
      priority: 120
      protocol: '*'
      sourceAddressPrefix: 'AzureLoadBalancer'
      sourcePortRange: '*'
    }
  }

  resource nsgRule4096 'securityRules' = {
    name: 'DenyAllInboundInternet'
    properties: {
      access: 'Deny'
      description: 'Deny all traffic from Internet.'
      destinationAddressPrefix: '*'
      destinationPortRange: '*'
      direction: 'Inbound'
      priority: 4096
      protocol: '*'
      sourceAddressPrefix: 'Internet'
      sourcePortRange: '*'
    }
  }
}

Я также пробовал устанавливать sourceAddressPrefix: 'Internet' и sourceAddressPrefix: '*' (где атрикс — Any). Отвечено в: Шлюз приложений Azure версии 2 нельзя настроить с помощью NSG и Добавить NSG в подсеть шлюза приложений

Я не могу понять, что с ним не так. Похоже, что это правило проверки срабатывает только во время развертывания.

Я пробовал добавлять правила вручную при привязке к подсети, и это работает. Также добавление NSG без привязки ее напрямую к подсети через развертывание, но в конечном итоге привязка вручную, похоже, работает. Единственный случай, когда это не работает, — это когда группа безопасности сети уже привязана к подсети (используемой группой доступности), а затем (повторно) развернута.

Кто-нибудь может помочь мне с этим, пожалуйста?

Вы пробовали изменить приоритет в своих правилах? У меня такая же реализация, за исключением того, что правила AllowGatewayManager и AllowAzureLoadBalancer стоят перед другими.

Thomas 31.03.2023 03:00

Да, я тоже так пробовал. Это не имело никакого эффекта. Но я нашел проблему и опубликовал ответ.

rdvanbuuren 31.03.2023 09:38
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
160
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как показано в сообщении об ошибке, NSG блокирует входящий интернет-трафик через порты 65200 - 65535 в подсеть snet-acc-waf, связанную со шлюзом приложений agw-acc. Вот почему вы получаете этот блокировщик.

См. этот документ для конфигурации инфраструктуры шлюза приложений.

Поскольку вы уже указали 'destinationPortRange: '65200-65535' для nsgrule110, он больше не будет блокировать порты в этом диапазоне. Вы можете добавить то же самое для других сетевых правил, если это необходимо, следующим образом.

 resource nsgRule120 'securityRules' = {
    name: ''
    properties: {
      access: 'Allow'
      description: 'Allow traffic'
      destinationAddressPrefix: '*'
      destinationPortRange: '65200-65535'
      direction: 'Inbound'
      priority: 120
      protocol: '*'
      sourceAddressPrefix: 'AzureLoadBalancer'
      sourcePortRange: '*'
    }
  }

Я попробовал тот же код, что и ваш, в своей среде, и он успешно сработал, как показано на снимке ниже.

Развертывание успешно:

Спасибо за ваш ответ. Мне уже удалось развернуть NSG как автономную систему. Но когда он подключен к подсети, которую использует группа доступности, он выдаст эту конкретную ошибку. Это было вызвано вложенными ресурсами. Я подробно остановился на этом в своем ответе.

rdvanbuuren 31.03.2023 09:37

Часть sourceAddressPrefix: 'AzureLoadBalancer' кажется неправильной. Разве так не должно быть sourceAddressPrefix: 'GatewayManager'?

rdvanbuuren 31.03.2023 09:50

@rdvanbuuren Позвольте мне уточнить это. Если это для управления трафиком, то это должно быть 'GatewayManager', а 'Loadbalancer' для включения тестового трафика, но не реального трафика. Дополнительную информацию можно найти в этом MSDoc. Таким образом, вы можете изменить sourceAddressPrefix в соответствии с требованиями вашей среды.

Jahnavi 31.03.2023 10:05
Ответ принят как подходящий

После долгих проб и ошибок я обнаружил, что проблема в бицепсе. Во-первых, я использовал вложенные ресурсы для правил NSG. Но у самой NSG есть свойство securityRules куда тоже можно добавить эти правила NSG, но у него есть одно отличие; он немедленно добавит правила NSG в NSG. Другой метод, использующий вложенный ресурс, добавит их позже во время развертывания (поэтому валидатор думает, что у него нет правила GatewayManager), и это приведет к срабатыванию правила проверки.

Итак, вот пример кода, который работает :)

resource wafNsg 'Microsoft.Network/networkSecurityGroups@2021-03-01' = {
  name: 'nsg-${environmentName}-waf'
  location: location
  properties: {
    securityRules: [
      {
        name: 'AllowGatewayManager'
        properties: {
          access: 'Allow'
          description: 'Allow traffic from GatewayManager. This port range is required for Azure infrastructure communication.'
          destinationAddressPrefix: '*'
          destinationPortRange: '65200-65535'
          direction: 'Inbound'
          priority: 100
          protocol: '*'
          sourceAddressPrefix: 'GatewayManager'
          sourcePortRange: '*'
        }
      }
      // put additional NSG rules here
    ]
  }
}

значит, вы изменили приоритет правила, вот и все?

Thomas 31.03.2023 10:26

Нет, это не имело никакого отношения к приоритету. Это дало мне точно такую ​​​​же ошибку. Исправление заключается в использовании свойства securityRules в networkSecurityGroups вместо вложенных ресурсов.

rdvanbuuren 31.03.2023 12:05

вы изменили приоритет, но это сработает, если вы вернете это правило на 120?

Thomas 01.04.2023 07:26

Я пробовал ваши предложения раньше и не смог изменить приоритет (в сочетании с вложенными ресурсами). Установка его обратно на 120 в свойстве securityRules все еще работает.

rdvanbuuren 03.04.2023 08:52

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