Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор
Шлюз приложений Azure поддерживает сквозное шифрование трафика. Шлюз приложений завершает подключение TLS/SSL на шлюзе приложений. Затем шлюз применяет правила маршрутизации к трафику, повторно шифрует пакет и пересылает пакет на соответствующий сервер серверной части на основе определенных правил маршрутизации. Любой ответ веб-сервера проходит через тот же процесс на пути к пользователю.
Шлюз приложений поддерживает определение пользовательских параметров TLS. Он также поддерживает отключение следующих версий протокола: TLSv1.0, TLSv1.1 и TLSv1.2, а также определение наборов шифров для использования и порядка предпочтений. Дополнительные сведения о настраиваемых параметрах TLS см. в разделе Обзор политики TLS.
Примечание.
Ssl 2.0 и SSL 3.0 отключены по умолчанию и не могут быть включены. Они считаются небезопасными и не могут использоваться с шлюзом приложений.
Сценарий
В этом сценарии вы узнаете, как создать шлюз приложений, используя сквозное шифрование TLS и PowerShell.
Данный сценарий:
- Создайте группу ресурсов с именем appgw-rg.
- Создайте виртуальную сеть с именем appgwvnet с адресным пространством 10.0.0.0/16.
- Создайте две подсети, называемые appgwsubnet и appsubnet.
- Создайте небольшой шлюз приложений, поддерживающий сквозное шифрование TLS, которое ограничивает версии протокола TLS и наборы шифров.
Перед тем как начать
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Чтобы узнать, как перейти на модуль Az PowerShell, см. статью Миграция Azure PowerShell с AzureRM на Az.
Для настройки сквозного TLS с помощью шлюза приложений требуется сертификат для шлюза и сертификатов для внутренних серверов. Сертификат шлюза используется для получения симметричного ключа в спецификации протокола TLS. Затем симметричный ключ используется для шифрования и расшифровки трафика, отправленного шлюзу. Сертификат шлюза должен быть в формате обмена личной информацией (PFX). Этот формат файла позволяет экспортировать закрытый ключ, необходимый шлюзу приложений для шифрования и расшифровки трафика.
Для сквозного шифрования TLS бэкенд должен быть явно разрешен шлюзом приложения. Отправьте общедоступный сертификат внутренних серверов в шлюз приложений. Добавление сертификата гарантирует, что шлюз для приложений обменивается данными только с известными экземплярами серверной части. тем самым защищая сквозной обмен данными.
Процесс конфигурации описан в следующих разделах.
Создание группы ресурсов
В этом разделе описывается создание группы ресурсов, содержащей шлюз приложений.
Войдите в свою учетную запись Azure.
Connect-AzAccount
Выберите подписку, используемую для этого сценария.
Select-Azsubscription -SubscriptionName "<Subscription name>"
Создайте группу ресурсов. (Пропустите этот шаг, если вы используете существующую группу ресурсов.)
New-AzResourceGroup -Name appgw-rg -Location "West US"
Создание виртуальной сети и подсети для шлюза приложений.
В следующем примере создается виртуальная сеть и две подсети. Одна подсеть используется для хранения шлюза приложений. Другая подсеть используется для бэкэндов, где размещается веб-приложение.
Назначьте диапазон адресов для подсети, используемой для шлюза приложений.
$gwSubnet = New-AzVirtualNetworkSubnetConfig -Name 'appgwsubnet' -AddressPrefix 10.0.0.0/24
Примечание.
Подсети, настроенные для шлюза приложений, должны иметь правильный размер. Шлюз приложений можно настроить для до 10 экземпляров. Каждый экземпляр принимает один IP-адрес из подсети. Слишком малая подсеть может негативно повлиять на масштабирование шлюза приложений.
Назначьте диапазон адресов, используемый для пула внутренних адресов.
$nicSubnet = New-AzVirtualNetworkSubnetConfig -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
Создайте виртуальную сеть с подсетями, определенными на предыдущих шагах.
$vnet = New-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet
Извлеките ресурсы виртуальной сети и ресурсы подсети, которые будут использоваться в следующих шагах.
$vnet = Get-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg $gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name 'appgwsubnet' -VirtualNetwork $vnet $nicSubnet = Get-AzVirtualNetworkSubnetConfig -Name 'appsubnet' -VirtualNetwork $vnet
Создание общедоступного IP-адреса для конфигурации внешнего интерфейса
Создайте ресурс общедоступного IP-адреса, который будет использоваться для шлюза приложений. Этот общедоступный IP-адрес используется в одном из следующих шагов.
$publicip = New-AzPublicIpAddress -ResourceGroupName appgw-rg -Name 'publicIP01' -Location "West US" -AllocationMethod Dynamic
Это важно
Шлюз приложений не поддерживает использование общедоступного IP-адреса, созданного с определенной меткой домена. Поддерживается только общедоступный IP-адрес с динамически созданной меткой домена. Если для шлюза приложений требуется понятное DNS-имя, рекомендуется использовать запись CNAME в качестве псевдонима.
Создание объекта конфигурации шлюза приложений.
Все элементы конфигурации задаются перед созданием шлюза приложений. Ниже приведены действия по созданию элементов конфигурации, необходимых для ресурса шлюза приложений.
Создайте IP-конфигурацию шлюза приложений. Этот параметр настраивает, какие из подсетей использует шлюз приложений. При запуске шлюза приложений получает IP-адрес из настроенной подсети и направляет сетевой трафик на IP-адреса в серверном пуле IP-адресов. Помните, что для каждого экземпляра требуется отдельный IP-адрес.
$gipconfig = New-AzApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
Создайте интерфейсную IP-конфигурацию. Этот параметр сопоставляет частный или общедоступный IP-адрес с внешним интерфейсом шлюза приложений. Следующий шаг связывает общедоступный IP-адрес на предыдущем шаге с конфигурацией внешнего IP-адреса.
$fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
Настройте пул внутренних IP-адресов с IP-адресами внутренних веб-серверов. Эти IP-адреса — это IP-адреса, получающие сетевой трафик, поступающий из конечной точки внешнего IP-адреса. Замените IP-адреса в примере собственными конечными точками IP-адресов приложения.
$pool = New-AzApplicationGatewayBackendAddressPool -Name 'pool01' -BackendIPAddresses 203.0.113.1, 203.0.113.2, 203.0.113.3
Примечание.
Полное доменное имя (FQDN) также является допустимым значением для использования вместо IP-адреса серверных серверов. Его можно включить с помощью переключателя -BackendFqdns .
Настройте IP-порт фронтенда для общедоступной конечной точки. Этот порт — это порт, к которому подключаются конечные пользователи.
$fp = New-AzApplicationGatewayFrontendPort -Name 'port01' -Port 443
Настройте сертификат для шлюза приложений. Этот сертификат используется для расшифровки и повторного шифрования трафика в шлюзе приложений.
$passwd = ConvertTo-SecureString <certificate file password> -AsPlainText -Force $cert = New-AzApplicationGatewaySSLCertificate -Name cert01 -CertificateFile <full path to .pfx file> -Password $passwd
Примечание.
Этот пример настраивает сертификат, используемый для подключения TLS. Сертификат должен быть в формате PFX.
Создайте прослушиватель HTTP для шлюза приложений. Назначьте интерфейсную IP-конфигурацию, порт и SSL-сертификат.
$listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
Отправьте сертификат, который будет использоваться в ресурсах внутреннего пула с поддержкой TLS.
Примечание.
Проба по умолчанию получает открытый ключ из привязки TLS по умолчанию по IP-адресу серверной части и сравнивает значение открытого ключа, которое оно получает с указанным здесь значением открытого ключа.
Если вы используете заголовки узлов и указание имени сервера (SNI) в серверной части, полученный открытый ключ может не относиться к предполагаемому сайту, на который должен направляться трафик. Если вы сомневаетесь, перейдите к https://127.0.0.1/ на серверах, чтобы подтвердить, какой сертификат используется для связи TLS по умолчанию. Используйте открытый ключ из этого запроса в этом разделе. Если вы используете заголовки узла и SNI в привязках HTTPS и не получаете ответ и сертификат в результате ручного запроса браузера на серверы бекэнда, необходимо настроить для них привязку TLS по умолчанию. Если этого не сделать, пробы завершаются ошибкой, а серверная часть не допускается.
Для получения дополнительной информации о SNI в шлюзе приложений см. Обзор завершения TLS и сквозного TLS с шлюзом приложений.
$authcert = New-AzApplicationGatewayAuthenticationCertificate -Name 'allowlistcert1' -CertificateFile C:\cert.cer
Примечание.
Сертификат, предоставленный на предыдущем шаге, должен быть публичным ключом PFX-сертификата, присутствующего на стороне сервера. Экспортируйте сертификат (а не корневой сертификат), установленный на серверном сервере в формате утверждения, доказательства и причины (CER) и используйте его на этом шаге. Этот шаг позволяет взаимодействие между серверной частью и шлюзом приложений.
Если вы используете номер SKU шлюза приложений версии 2, создайте доверенный корневой сертификат вместо сертификата проверки подлинности. Дополнительные сведения см. в разделе «Обзор сквозного TLS с использованием Шлюза приложений»:
$trustedRootCert01 = New-AzApplicationGatewayTrustedRootCertificate -Name "test1" -CertificateFile <path to root cert file>
Настройте параметры HTTP для серверной части шлюза приложений. Назначьте сертификат, загруженный на предыдущем шаге, параметрам HTTP.
$poolSetting = New-AzApplicationGatewayBackendHttpSettings -Name 'setting01' -Port 443 -Protocol Https -CookieBasedAffinity Enabled -AuthenticationCertificates $authcert
Для SKU шлюза приложений версии 2 используйте следующую команду:
$poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name “setting01” -Port 443 -Protocol Https -CookieBasedAffinity Disabled -TrustedRootCertificate $trustedRootCert01 -HostName "test1"
Создайте правило маршрутизации подсистемы балансировки нагрузки, которое настраивает поведение подсистемы балансировки нагрузки. В этом примере создается базовое правило "кругового распределения".
$rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
Настройте размер экземпляра шлюза приложений. Доступные размеры: Standard_Small, Standard_Medium и Standard_Large. Для емкости доступные значения — от 1 до 10.
$sku = New-AzApplicationGatewaySku -Name Standard_Small -Tier Standard -Capacity 2
Примечание.
Для тестирования можно выбрать число экземпляров 1. Важно знать, что любое количество экземпляров меньше двух не охватывается соглашением об уровне обслуживания и поэтому не рекомендуется. Небольшие шлюзы должны использоваться для тестирования разработки, а не для рабочих целей.
Настройте политику TLS для использования в шлюзе приложений. Шлюз приложений поддерживает возможность установки минимальной версии для версий протокола TLS.
Ниже приведен список версий протокола, которые можно определить.
- TLSV1_0
- TLSV1_1
- TLSV1_2
В следующем примере устанавливается минимальная версия протокола TLSv1_2 и включает только TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 и TLS_RSA_WITH_AES_128_GCM_SHA256.
$SSLPolicy = New-AzApplicationGatewaySSLPolicy -MinProtocolVersion TLSv1_2 -CipherSuite "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256" -PolicyType Custom
Создание шлюза приложений
Создайте шлюз приложений, выполнив все описанные выше действия. Создание шлюза — это процесс, который занимает много времени для выполнения.
Для SKU версии 1 используйте следующую команду.
$appgw = New-AzApplicationGateway -Name appgateway -SSLCertificates $cert -ResourceGroupName "appgw-rg" -Location "West US" -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $fp -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SSLPolicy $SSLPolicy -AuthenticationCertificates $authcert -Verbose
Для SKU версии 2 используйте следующую команду.
$appgw = New-AzApplicationGateway -Name appgateway -SSLCertificates $cert -ResourceGroupName "appgw-rg" -Location "West US" -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting01 -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $fp -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SSLPolicy $SSLPolicy -TrustedRootCertificate $trustedRootCert01 -Verbose
Примените новый сертификат, если истек срок действия внутреннего сертификата
Используйте эту процедуру, чтобы применить новый сертификат, если истек срок действия внутреннего сертификата.
Получение шлюза приложений для обновления.
$gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
Добавьте новый ресурс сертификата из файла .cer, который содержит открытый ключ сертификата, а также может быть тем же сертификатом, добавленным в прослушиватель для завершения TLS на шлюзе приложений.
Add-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name 'NewCert' -CertificateFile "appgw_NewCert.cer"
Получите новый объект сертификата проверки подлинности в переменную (TypeName: Microsoft.Azure.Commands.Network.Models.PSApplicationGatewayAuthenticationCertificate).
$AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
Назначьте новый сертификат параметру BackendHttp и обратитесь к ней с переменной $AuthCert. (Укажите имя параметра HTTP, которое требуется изменить.)
$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
- Зафиксируйте изменение в шлюзе приложений и передайте новую конфигурацию, содержащуюся в переменной $out.
Set-AzApplicationGateway -ApplicationGateway $gw
Удаление неиспользуемого сертификата с истекшим сроком действия из параметров HTTP
Используйте эту процедуру для удаления неиспользуемого сертификата с истекшим сроком действия из параметров HTTP.
Получение шлюза приложений для обновления.
$gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
Укажите имя сертификата проверки подлинности, который требуется удалить.
Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
Удалите сертификат проверки подлинности из шлюза приложений.
$gw=Remove-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name ExpiredCert
Зафиксируйте изменения.
Set-AzApplicationGateway -ApplicationGateway $gw
Ограничение версий протокола TLS в существующем шлюзе приложений
Предыдущие шаги провели вас через создание приложения с использованием сквозного шифрования TLS и отключением определённых версий протокола TLS. В следующем примере некоторые политики TLS отключают в существующем шлюзе приложений.
Получение шлюза приложений для обновления.
$gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
Определите политику TLS. В следующем примере TLSv1.0 и TLSv1.1 отключены, а наборы шифров TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 и TLS_RSA_WITH_AES_128_GCM_SHA256 являются единственными допустимыми.
Set-AzApplicationGatewaySSLPolicy -MinProtocolVersion TLSv1_2 -PolicyType Custom -CipherSuite "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256" -ApplicationGateway $gw
Наконец, обновите шлюз. Последний шаг — это длительная задача. После завершения настройки на шлюзе приложений конфигурируется сквозное шифрование TLS.
$gw | Set-AzApplicationGateway
Получение DNS-имени шлюза приложений
После создания шлюза необходимо настроить интерфейс для обмена данными. Шлюз приложений требует динамически назначаемого DNS-имени при использовании общедоступного IP-адреса, что неудобно. Чтобы конечные пользователи могли попасть в шлюз приложений, можно использовать запись CNAME, чтобы указать общедоступную конечную точку шлюза приложений. Дополнительные сведения см. в статье "Настройка имени личного домена" в Azure.
Чтобы настроить псевдоним, получите сведения о шлюзе приложений и связанном имени IP/DNS с помощью элемента PublicIPAddress , подключенного к шлюзу приложений. Используйте DNS-имя шлюза приложений для создания записи CNAME, указывающей два веб-приложения на это DNS-имя. Мы не рекомендуем использовать записи A, так как VIP-адрес может измениться при перезапуске шлюза приложений.
Get-AzPublicIpAddress -ResourceGroupName appgw-RG -Name publicIP01
Name : publicIP01
ResourceGroupName : appgw-RG
Location : westus
Id : /subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/publicIPAddresses/publicIP01
Etag : W/"00000d5b-54ed-4907-bae8-99bd5766d0e5"
ResourceGuid : 00000000-0000-0000-0000-000000000000
ProvisioningState : Succeeded
Tags :
PublicIpAllocationMethod : Dynamic
IpAddress : xx.xx.xxx.xx
PublicIpAddressVersion : IPv4
IdleTimeoutInMinutes : 4
IpConfiguration : {
"Id": "/subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/applicationGateways/appgwtest/frontendIP
Configurations/frontend1"
}
DnsSettings : {
"Fqdn": "00000000-0000-xxxx-xxxx-xxxxxxxxxxxx.cloudapp.net"
}
Дальнейшие действия
Дополнительные сведения о защите веб-приложений с помощью брандмауэра веб-приложений через шлюз приложений см. в обзоре брандмауэра веб-приложений.