У меня возникли проблемы с развертыванием группы безопасности сети (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 без привязки ее напрямую к подсети через развертывание, но в конечном итоге привязка вручную, похоже, работает. Единственный случай, когда это не работает, — это когда группа безопасности сети уже привязана к подсети (используемой группой доступности), а затем (повторно) развернута.
Кто-нибудь может помочь мне с этим, пожалуйста?
Да, я тоже так пробовал. Это не имело никакого эффекта. Но я нашел проблему и опубликовал ответ.
Как показано в сообщении об ошибке, 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 как автономную систему. Но когда он подключен к подсети, которую использует группа доступности, он выдаст эту конкретную ошибку. Это было вызвано вложенными ресурсами. Я подробно остановился на этом в своем ответе.
Часть sourceAddressPrefix: 'AzureLoadBalancer'
кажется неправильной. Разве так не должно быть sourceAddressPrefix: 'GatewayManager'
?
@rdvanbuuren Позвольте мне уточнить это. Если это для управления трафиком, то это должно быть 'GatewayManager'
, а 'Loadbalancer'
для включения тестового трафика, но не реального трафика. Дополнительную информацию можно найти в этом MSDoc. Таким образом, вы можете изменить sourceAddressPrefix
в соответствии с требованиями вашей среды.
После долгих проб и ошибок я обнаружил, что проблема в бицепсе. Во-первых, я использовал вложенные ресурсы для правил 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
]
}
}
значит, вы изменили приоритет правила, вот и все?
Нет, это не имело никакого отношения к приоритету. Это дало мне точно такую же ошибку. Исправление заключается в использовании свойства securityRules
в networkSecurityGroups вместо вложенных ресурсов.
вы изменили приоритет, но это сработает, если вы вернете это правило на 120?
Я пробовал ваши предложения раньше и не смог изменить приоритет (в сочетании с вложенными ресурсами). Установка его обратно на 120 в свойстве securityRules
все еще работает.
Вы пробовали изменить приоритет в своих правилах? У меня такая же реализация, за исключением того, что правила
AllowGatewayManager
иAllowAzureLoadBalancer
стоят перед другими.