Поделиться через


Настройка сквозного протокола TLS с помощью шлюза приложений с PowerShell

Обзор

Шлюз приложений 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 бэкенд должен быть явно разрешен шлюзом приложения. Отправьте общедоступный сертификат внутренних серверов в шлюз приложений. Добавление сертификата гарантирует, что шлюз для приложений обменивается данными только с известными экземплярами серверной части. тем самым защищая сквозной обмен данными.

Процесс конфигурации описан в следующих разделах.

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

В этом разделе описывается создание группы ресурсов, содержащей шлюз приложений.

  1. Войдите в свою учетную запись Azure.

    Connect-AzAccount
    
  2. Выберите подписку, используемую для этого сценария.

    Select-Azsubscription -SubscriptionName "<Subscription name>"
    
  3. Создайте группу ресурсов. (Пропустите этот шаг, если вы используете существующую группу ресурсов.)

    New-AzResourceGroup -Name appgw-rg -Location "West US"
    

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

В следующем примере создается виртуальная сеть и две подсети. Одна подсеть используется для хранения шлюза приложений. Другая подсеть используется для бэкэндов, где размещается веб-приложение.

  1. Назначьте диапазон адресов для подсети, используемой для шлюза приложений.

    $gwSubnet = New-AzVirtualNetworkSubnetConfig -Name 'appgwsubnet' -AddressPrefix 10.0.0.0/24
    

    Примечание.

    Подсети, настроенные для шлюза приложений, должны иметь правильный размер. Шлюз приложений можно настроить для до 10 экземпляров. Каждый экземпляр принимает один IP-адрес из подсети. Слишком малая подсеть может негативно повлиять на масштабирование шлюза приложений.

  2. Назначьте диапазон адресов, используемый для пула внутренних адресов.

    $nicSubnet = New-AzVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. Создайте виртуальную сеть с подсетями, определенными на предыдущих шагах.

    $vnet = New-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet
    
  4. Извлеките ресурсы виртуальной сети и ресурсы подсети, которые будут использоваться в следующих шагах.

    $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 в качестве псевдонима.

Создание объекта конфигурации шлюза приложений.

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

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

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
    
  2. Создайте интерфейсную IP-конфигурацию. Этот параметр сопоставляет частный или общедоступный IP-адрес с внешним интерфейсом шлюза приложений. Следующий шаг связывает общедоступный IP-адрес на предыдущем шаге с конфигурацией внешнего IP-адреса.

    $fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. Настройте пул внутренних 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 .

  4. Настройте IP-порт фронтенда для общедоступной конечной точки. Этот порт — это порт, к которому подключаются конечные пользователи.

    $fp = New-AzApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. Настройте сертификат для шлюза приложений. Этот сертификат используется для расшифровки и повторного шифрования трафика в шлюзе приложений.

    $passwd = ConvertTo-SecureString  <certificate file password> -AsPlainText -Force 
    $cert = New-AzApplicationGatewaySSLCertificate -Name cert01 -CertificateFile <full path to .pfx file> -Password $passwd 
    

    Примечание.

    Этот пример настраивает сертификат, используемый для подключения TLS. Сертификат должен быть в формате PFX.

  6. Создайте прослушиватель HTTP для шлюза приложений. Назначьте интерфейсную IP-конфигурацию, порт и SSL-сертификат.

    $listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. Отправьте сертификат, который будет использоваться в ресурсах внутреннего пула с поддержкой 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>
    
  8. Настройте параметры 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"
    
  9. Создайте правило маршрутизации подсистемы балансировки нагрузки, которое настраивает поведение подсистемы балансировки нагрузки. В этом примере создается базовое правило "кругового распределения".

    $rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. Настройте размер экземпляра шлюза приложений. Доступные размеры: Standard_Small, Standard_Medium и Standard_Large. Для емкости доступные значения — от 1 до 10.

    $sku = New-AzApplicationGatewaySku -Name Standard_Small -Tier Standard -Capacity 2
    

    Примечание.

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

  11. Настройте политику 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

Примените новый сертификат, если истек срок действия внутреннего сертификата

Используйте эту процедуру, чтобы применить новый сертификат, если истек срок действия внутреннего сертификата.

  1. Получение шлюза приложений для обновления.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Добавьте новый ресурс сертификата из файла .cer, который содержит открытый ключ сертификата, а также может быть тем же сертификатом, добавленным в прослушиватель для завершения TLS на шлюзе приложений.

    Add-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name 'NewCert' -CertificateFile "appgw_NewCert.cer" 
    
  3. Получите новый объект сертификата проверки подлинности в переменную (TypeName: Microsoft.Azure.Commands.Network.Models.PSApplicationGatewayAuthenticationCertificate).

    $AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
    
  4. Назначьте новый сертификат параметру BackendHttp и обратитесь к ней с переменной $AuthCert. (Укажите имя параметра HTTP, которое требуется изменить.)

$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
  1. Зафиксируйте изменение в шлюзе приложений и передайте новую конфигурацию, содержащуюся в переменной $out.
Set-AzApplicationGateway -ApplicationGateway $gw  

Удаление неиспользуемого сертификата с истекшим сроком действия из параметров HTTP

Используйте эту процедуру для удаления неиспользуемого сертификата с истекшим сроком действия из параметров HTTP.

  1. Получение шлюза приложений для обновления.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Укажите имя сертификата проверки подлинности, который требуется удалить.

    Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
    
  3. Удалите сертификат проверки подлинности из шлюза приложений.

    $gw=Remove-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name ExpiredCert
    
  4. Зафиксируйте изменения.

Set-AzApplicationGateway -ApplicationGateway $gw

Ограничение версий протокола TLS в существующем шлюзе приложений

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

  1. Получение шлюза приложений для обновления.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Определите политику 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
    
    
  3. Наконец, обновите шлюз. Последний шаг — это длительная задача. После завершения настройки на шлюзе приложений конфигурируется сквозное шифрование 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"
                            }

Дальнейшие действия

Дополнительные сведения о защите веб-приложений с помощью брандмауэра веб-приложений через шлюз приложений см. в обзоре брандмауэра веб-приложений.