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


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

Обзор

Шлюз приложений Azure поддерживает сквозное шифрование трафика. Для этого он завершает TLS/SSL-подключение в шлюзе приложений. Затем шлюз применяет правила маршрутизации к трафику, повторно шифрует пакет и пересылает пакет на соответствующий сервер серверной части на основе определенных правил маршрутизации. Любой ответ веб-сервера проходит через тот же процесс на пути к пользователю.

Шлюз приложений поддерживает определение пользовательских вариантов TLS. отключение следующих версий протокола: TLSv1.0, TLSv1.1 и TLSv1.2. Также шлюз поддерживает определение комплектов шифров для использования и их приоритет. Дополнительные сведения о настраиваемых параметрах TLS см. в статье Общие сведения о политике TLS шлюза приложений.

Примечание.

Протоколы SSL 2.0 и SSL 3.0 отключены по умолчанию, и их нельзя включать. Они считаются небезопасными и не могут использоваться со шлюзом приложений.

изображение сценария

Сценарий

В этом сценарии показано, как с помощью PowerShell создать шлюз приложений со сквозным подключением TLS.

Вы узнаете:

  • как создать группу ресурсов с именем appgw-rg;
  • как создать виртуальную сеть appgwvnet с адресным пространством 10.0.0.0/16;
  • как создать две подсети, appgwsubnet и appsubnet;
  • как создать небольшой шлюз приложений с поддержкой сквозного шифрования TLS, который ограничивает версии протокола TLS и наборы шифров.

Подготовка к работе

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure 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-порт для общедоступной конечной точки 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, и вы не получаете ответ и сертификат из запроса https://127.0.0.1/ браузера вручную на серверные серверы, необходимо настроить привязку TLS по умолчанию для них. Если этого не сделать, пробы будут завершены ошибкой и серверная часть не будет добавлена в список разрешений.

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

    $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
    

Создание шлюза приложений

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

Для ценовой категории с версией 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

Для ценовой категории с версией 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-имени шлюза приложений

После создания шлюза следует настроить внешний интерфейс для обмена данными. Если вы используете общедоступный IP-адрес, шлюзу приложений требуется динамически назначаемое непонятное имя DNS. Чтобы пользователи гарантированно попали на шлюз приложений, можно использовать запись CNAME для указания общедоступной конечной точки шлюза приложений. Дополнительные сведения см. в статье Настройка пользовательского доменного имени для облачной службы Azure.

Чтобы настроить псевдоним, извлеките подробные сведения о шлюзе приложений и соответствующий IP-адрес или DNS-имя с помощью элемента PublicIPAddress, связанного со шлюзом приложений. Используйте DNS-имя шлюза приложений для создания записи CNAME, указывающей двум веб-приложениям на это DNS-имя. Мы не рекомендуем использовать записи типа A, так как виртуальный IP-адрес может измениться после перезапуска шлюза приложения.

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"
                            }

Следующие шаги

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