Как управлять входящим трафиком в среде службы приложений

Важно!

Эта статья посвящена Среде службы приложений версии 1. 31 августа 2024 года будет прекращена поддержка Среды службы приложений версии 1. Имеется новая версия среды службы приложений, которая проще в использовании и которая работает на более мощной инфраструктуре. Чтобы узнать больше о новой версии, начните с изучения статьи Введение в Среду службы приложений. Если вы используете Среду службы приложений версии 1, выполните действия, описанные в этой статье, чтобы перейти на новую версию.

По состоянию на 29 января 2024 г. вы больше не можете создавать новые ресурсы Среда службы приложений версии 1 с помощью любого из доступных методов, включая шаблоны ARM/Bicep, портал Azure, Azure CLI или REST API. Необходимо выполнить миграцию в Среда службы приложений версии 3 до 31 августа 2024 г., чтобы предотвратить удаление ресурсов и потерю данных.

Обзор

Среду службы приложений можно создать либо в виртуальной сети Azure Resource Manager, либо в виртуальной сети, использующей классическую модель развертывания. Новые виртуальную сеть и подсеть можно определить во время создания среды службы приложений. Вместо этого среда App Service Environment может быть создана в уже существующей виртуальной сети и уже существующей подсети. Начиная с июня 2016 года среды ASE можно также развертывать в виртуальных сетях, использующих либо диапазоны общедоступных адресов, либо адресные пространства RFC1918 (частные адреса). Дополнительные сведения см. в разделе Создание ASEv1 из шаблона.

Всегда создавайте среду службы приложений в подсети. Подсеть обеспечивает границу сети, которую можно использовать для блокировки входящего трафика за пределами вышестоящих устройств и служб. Эта установка позволяет принимать трафик HTTP и HTTPS только конкретным вышестоящим IP-адресам.

Входящий и исходящий сетевой трафик в подсети контролируется с помощью группы сетевой безопасности. Чтобы управлять входящим трафиком, создайте правила безопасности сети в группе безопасности сети. Затем назначьте группе безопасности сети подсеть, содержащую среду службы приложений.

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

Примечание.

Хотя эта статья относится к веб-приложениям, она также применима к приложениям API и мобильным приложениям.

Входящие сетевые порты, используемые в среде службы приложений

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

Ниже приведен список портов, используемых средой службы приложений. Это все TCP-порты, если явно не указано иное.

  • 454: обязательный порт, используемый инфраструктурой Azure для обслуживания сред службы приложений и управления ими с помощью TLS. Не блокируйте трафик в этом порту. Этот порт всегда привязан к общедоступному виртуальному IP-адресу ASE.
  • 455: обязательный порт, используемый инфраструктурой Azure для обслуживания сред службы приложений и управления ими с помощью TLS. Не блокируйте трафик в этом порту. Этот порт всегда привязан к общедоступному виртуальному IP-адресу ASE.
  • 80: порт по умолчанию для входящего HTTP-трафика для приложений, выполняемых в планах службы приложений в среде службы приложений. В ASE с внутренним балансировщиком нагрузки этот порт привязан к адресу балансировщика нагрузки ASE.
  • 443: порт по умолчанию для входящего трафика TLS приложений, выполняемых в планах службы приложений в среде службы приложений. В ASE с внутренним балансировщиком нагрузки этот порт привязан к адресу балансировщика нагрузки ASE.
  • 21: канал управления для FTP. Этот порт можно безопасно заблокировать, если FTP не используется. В ASE с внутренним балансировщиком нагрузки этот порт может быть привязан к адресу балансировщика нагрузки ASE.
  • 990: канал управления для FTPS. Этот порт можно безопасно заблокировать, если FTPS не используется. В ASE с внутренним балансировщиком нагрузки этот порт может быть привязан к адресу балансировщика нагрузки ASE.
  • 10001 10020: каналы данных для FTP. Как и при использовании канала управления, эти порты можно безопасно заблокировать, если FTP не используется. В ASE с внутренним балансировщиком нагрузки этот порт может быть привязан к адресу балансировщика нагрузки ASE.
  • 4016: используется для удаленной отладки с помощью Visual Studio 2012. Этот порт можно безопасно заблокировать, если эта функция не используется. В ASE с внутренним балансировщиком нагрузки этот порт привязан к адресу балансировщика нагрузки ASE.
  • 4018: используется для удаленной отладки с помощью Visual Studio 2013. Этот порт можно безопасно заблокировать, если эта функция не используется. В ASE с внутренним балансировщиком нагрузки этот порт привязан к адресу балансировщика нагрузки ASE.
  • 4020: используется для удаленной отладки с помощью Visual Studio 2015. Этот порт можно безопасно заблокировать, если эта функция не используется. В ASE с внутренним балансировщиком нагрузки этот порт привязан к адресу балансировщика нагрузки ASE.
  • 4022: используется для удаленной отладки с помощью Visual Studio 2017. Этот порт можно безопасно заблокировать, если эта функция не используется. В ASE с внутренним балансировщиком нагрузки этот порт привязан к адресу балансировщика нагрузки ASE.
  • 4024: используется для удаленной отладки с помощью Visual Studio 2019. Этот порт можно безопасно заблокировать, если эта функция не используется. В ASE с внутренним балансировщиком нагрузки этот порт привязан к адресу балансировщика нагрузки ASE.
  • 4026: используется для удаленной отладки с помощью Visual Studio 2022. Этот порт можно безопасно заблокировать, если эта функция не используется. В ASE с внутренним балансировщиком нагрузки этот порт привязан к адресу балансировщика нагрузки ASE.

Требования к DNS и исходящим подключениям

Для надлежащего функционирования среды службы приложений также требуется исходящий доступ к различным конечным точкам. Полный список внешних конечных точек, используемых в ASE, приведен в разделе "Необходимое сетевое подключение" статьи Сведения о конфигурации сети для сред службы приложений с ExpressRoute .

Для сред службы приложений требуется, чтобы для виртуальной сети была настроена допустимая инфраструктура DNS. Если после создания среды службы приложений меняется конфигурация DNS, разработчики могут принудительно задать выбор новой конфигурации DNS в среде службы приложений. Если вы запускаете последовательную перезагрузку среды с помощью значка Перезагрузка, среда выбирает новую конфигурацию DNS. (Значок Перезагрузка находится в верхней части колонки управления средой службы приложений на портале Azure.)

Также рекомендуется настроить пользовательские DNS-серверы в виртуальной сети заранее, до создания среды службы приложений. Изменение конфигурации виртуальной сети DNS во время создания среды службы приложений приводит к сбою процесса создания. Аналогично, если на другой стороне VPN-шлюза есть пользовательский DNS-сервер, который недоступен, процесс создания среды службы приложений также завершится ошибкой.

Создание группы безопасности сети

Подробные сведения о принципах работы групп сетевой безопасности см. здесь. В приведенном ниже примере управления службами Azure рассматриваются особенности групп безопасности сети. В примере настраивается группа безопасности сети и применяется к подсети, содержащей среду службы приложений.

Примечание. Группы безопасности сети можно настроить с помощью графического пользовательского интерфейса на портале Azure или с помощью Azure PowerShell.

Сначала группы сетевой безопасности создаются как отдельные сущности, связанные с подпиской. Поскольку группы безопасности сети создаются в регионе Azure, создайте группу безопасности сети в том же регионе, что и среда службы приложений.

Ниже показана команда для создания группы безопасности сети.

New-AzureNetworkSecurityGroup -Name "testNSGexample" -Location "South Central US" -Label "Example network security group for an app service environment"

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

В примере ниже показано правило, которое явным образом разрешает доступ к портам управления, необходимым для управления и обслуживания среды службы приложений инфраструктурой Azure. Весь трафик управления проходит через TLS и защищен сертификатами клиентов. Хотя порты и открыты, они недоступны для любой сущности, кроме инфраструктуры управления Azure.

Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityRule -Name "ALLOW AzureMngmt" -Type Inbound -Priority 100 -Action Allow -SourceAddressPrefix 'INTERNET'  -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '454-455' -Protocol TCP

При блокировании доступа к портам 80 и 443, чтобы "скрыть" среду службы приложений за вышестоящими устройствами или службами, вам нужен вышестоящий IP-адрес. Например, если вы используете брандмауэр веб-приложения (WAF), он будет иметь собственный IP-адрес или адреса. WAF использует их, направляя трафик через прокси-сервер к нижестоящей среде службы приложений. Вам потребуется использовать этот IP-адрес в параметре SourceAddressPrefix правила безопасности сети.

В следующем примере входящий трафик от конкретного вышестоящего IP-адреса полностью разрешен. Адрес 1.2.3.4 используется как заполнитель для IP-адреса вышестоящего WAF. Измените значение адреса на адрес, используемый вышестоящим устройством или службой.

Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityRule -Name "RESTRICT HTTP" -Type Inbound -Priority 200 -Action Allow -SourceAddressPrefix '1.2.3.4/32'  -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityRule -Name "RESTRICT HTTPS" -Type Inbound -Priority 300 -Action Allow -SourceAddressPrefix '1.2.3.4/32'  -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

Если требуется поддержка FTP, используйте следующие правила как шаблон для предоставления доступа к порту управления FTP и портам каналов данных. Протокол FTP является протоколом с отслеживанием состояния, поэтому вам, возможно, не удастся направлять FTP-трафик через обычный брандмауэр HTTP/HTTPS или прокси-сервер. В этом случае необходимо задать для параметра SourceAddressPrefix другое значение, например диапазон IP-адресов компьютеров разработчиков или компьютеров развертывания, на которых запущены FTP-клиенты.

Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityRule -Name "RESTRICT FTPCtrl" -Type Inbound -Priority 400 -Action Allow -SourceAddressPrefix '1.2.3.4/32'  -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '21' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityRule -Name "RESTRICT FTPDataRange" -Type Inbound -Priority 500 -Action Allow -SourceAddressPrefix '1.2.3.4/32'  -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '10001-10020' -Protocol TCP

(Примечание. Диапазон портов канала данных может измениться в период использования предварительной версии.)

Следующие правила показывают, как предоставить доступ при использовании удаленной отладки с помощью Visual Studio. Существует отдельное правило для каждой поддерживаемой версии Visual Studio, поскольку в каждой версии используется свой порт для удаленной отладки. Как и для FTP-доступа, трафик удаленной отладки не может правильно проходить через традиционный брандмауэр WAF или прокси-устройство. Для параметра SourceAddressPrefix вместо этого можно задать значение диапазона IP-адресов машины разработчиков, на которых запущена программа Visual Studio.

Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityRule -Name "RESTRICT RemoteDebuggingVS2012" -Type Inbound -Priority 600 -Action Allow -SourceAddressPrefix '1.2.3.4/32'  -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '4016' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityRule -Name "RESTRICT RemoteDebuggingVS2013" -Type Inbound -Priority 700 -Action Allow -SourceAddressPrefix '1.2.3.4/32'  -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '4018' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityRule -Name "RESTRICT RemoteDebuggingVS2015" -Type Inbound -Priority 800 -Action Allow -SourceAddressPrefix '1.2.3.4/32'  -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '4020' -Protocol TCP

Назначение группы сетевой безопасности для подсети

Группа безопасности сети имеет правило безопасности по умолчанию, которое запрещает доступ к любому внешнему трафику. При объединении этого правила с правилами безопасности сети, указанными выше, только трафик из диапазонов адресов источника, связанных с действием Разрешить, будет достигать приложений, выполняемых в среде службы приложений.

После заполнения группы безопасности сети правилами безопасности ее необходимо назначить для подсети, содержащей среду службы приложений. Команда назначения ссылается на два имени: имя виртуальной сети, в которой находится среда службы приложений, и имя подсети, в которой была создана среда службы приложений.

В приведенном ниже примере показана группа сетевой безопасности, назначаемая для подсети и виртуальной сети.

Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Set-AzureNetworkSecurityGroupToSubnet -VirtualNetworkName 'testVNet' -SubnetName 'Subnet-test'

Назначение — длительная операция, выполнение которой может занять несколько минут. После успешного назначения группы безопасности сети только входящий трафик, соответствующий правилам Разрешить, будет успешно достигать приложений в среде службы приложений.

Для полноты в приведенном ниже примере показано, как удалить группу безопасности сети для подсети и отменить связь между ними.

Get-AzureNetworkSecurityGroup -Name "testNSGexample" | Remove-AzureNetworkSecurityGroupFromSubnet -VirtualNetworkName 'testVNet' -SubnetName 'Subnet-test'

Специальные рекомендации для SSL на основе явного IP

Если для приложения настроен явный адрес SSL на основе IP (применяемый только к ASE, у которых есть общедоступный виртуальный IP-адрес), то вместо IP-адреса по умолчанию среды службы приложений трафик HTTP и HTTPS пропускается в подсеть через порты, отличные от портов 80 и 443.

Чтобы найти отдельную пару портов, используемую каждым адресом SSL на основе IP, перейдите на портал и просмотрите подробности о среде службы приложений в колонке взаимодействия с пользователем. Выберите Все параметры>IP-адреса. В колонке IP-адреса отображается таблица всех явно настроенных адресов SSL на основе IP для среды службы приложений. Здесь также показана пара портов, которая используется для маршрутизации трафика HTTP и HTTPS, связанного с каждым адресом SSL на основе IP. Используйте эту пару портов для параметров DestinationPortRange при настройке правил в группе безопасности сети.

Если настроить приложение в ASE для использования SSL на основе IP, то внешним клиентам можно не беспокоиться о сопоставлении специальных пар портов, так как это будет выполняться незаметно для них. Трафик к приложениям будет проходить обычным образом по настроенному адресу SSL на основе IP. Трансляция в специальную пару портов происходит внутри автоматически во время маршрутизации трафика по последнему участку в подсети, содержащей ASE.

Начало работы

Сведения о том, как начать работу со средами службы приложений, см. в статье Введение в среду службы приложений.

Подробнее см. в статье Безопасное подключение к серверным ресурсам из среды службы приложений.

Примечание.

Чтобы приступить к работе со службой приложений Azure до создания учетной записи Azure, перейдите к разделу Пробное использование службы приложений, где вы можете быстро создать кратковременное веб-приложение начального уровня в службе приложений. Никаких кредитных карт и обязательств