Предоставление доступа к приложениям из Интернета с завершением сеанса TLS в Шлюзе приложений

Примечание.

Azure Spring Apps — это новое название службы Azure Spring Cloud. Старое название будет еще некоторое время встречаться в наших материалах, пока мы не обновим ресурсы, такие как снимки экрана, видео и схемы.

В этой статье описано, как предоставить доступ к приложениям по Интернету с помощью Шлюза приложений.

При развертывании экземпляра службы Azure Spring Apps в виртуальной сети приложения в экземпляре службы доступны только в частной сети. Чтобы сделать приложения доступными в Интернете, необходимо интегрировать их со Шлюзом приложений Azure. Входящий зашифрованный трафик можно расшифровать на шлюзе приложений или передать в Azure Spring Apps в зашифрованном виде для сквозной поддержки протокола TLS/SSL. Для начала разработки и тестирования можно настроить завершения SSL на шлюзе приложений. Этот процесс рассматривается в этом руководстве. Для рабочей среды мы рекомендуем использовать сквозное шифрование TLS/SSL с частными сертификатами, как описано в статье Предоставление приложений со сквозной поддержкой протокола TLS в виртуальной сети.

Необходимые компоненты

Настройка Шлюза приложений для Azure Spring Apps

Рекомендуем, чтобы доменное имя, отображаемое в браузере, совпадало с именем узла, которое Шлюз приложений использует для направления трафика в серверную часть Azure Spring Apps. Эта рекомендация обеспечивает оптимальный процесс использования Шлюза приложений для предоставления приложений, размещенных в Azure Spring Apps и находящихся в виртуальной сети. Если домен, предоставляемый Шлюзом приложений, отличается от домена, принятого Azure Spring Apps, файлы cookie и созданные URL-адреса перенаправления (например) могут быть нарушены. Дополнительные сведения см. в разделе "Сохранение имени узла".

Чтобы настроить Шлюз приложений в частной виртуальной сети перед Azure Spring Apps, выполните описанные ниже действия.

  1. Следуйте инструкциям из статьи Развертывание Azure Spring Apps в виртуальной сети.
  2. Следуйте инструкциям из статьи Доступ к приложению в частной сети.
  3. Получите сертификат для выбранного домена и сохраните его в Key Vault. Дополнительные сведения см. в статье Руководство по импорту сертификата в Azure Key Vault.
  4. Настройте личный домен и соответствующий сертификат из Key Vault в приложении, развернутом в Azure Spring Apps. Дополнительные сведения см. в руководстве Сопоставление существующего личного домена с Azure Spring Apps.
  5. Развертывание Шлюз приложений в виртуальной сети, настроенной в соответствии со следующим списком:
    • Примените Azure Spring Apps в серверном пуле, на который ссылается домен с суффиксом private.azuremicroservices.io.
    • Добавьте прослушиватель HTTPS, используя тот же сертификат из Key Vault.
    • Настройте виртуальную сеть с параметрами HTTP, которые используют имя личного домена, настроенное в Azure Spring Apps, вместо домена с суффиксом private.azuremicroservices.io.
  6. Настройте общедоступный DNS, чтобы он указывал на шлюз приложений.

Определение переменных

Далее используйте приведенные ниже команды, чтобы определить переменные для группы ресурсов и виртуальной сети, которые вы создали в соответствии с инструкциями по развертыванию Azure Spring Apps в виртуальной сети Azure. Замените заполнители <...> реальными значениями в зависимости от фактической среды. Задав SPRING_APP_PRIVATE_FQDN, удалите https:// из URI.

export SUBSCRIPTION='<subscription-id>'
export RESOURCE_GROUP='<resource-group-name>'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='<name-of-Azure-Spring-Apps-instance>'
export APPNAME='<name-of-app-in-Azure-Spring-Apps>'
export SPRING_APP_PRIVATE_FQDN='$APPNAME.private.azuremicroservices.io'
export VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
export APPLICATION_GATEWAY_SUBNET_NAME='app-gw-subnet'
export APPLICATION_GATEWAY_SUBNET_CIDR='10.1.2.0/24'

Вход в Azure

Войдите в Azure CLI и выберите активную подписку, выполнив следующую команду:

az login
az account set --subscription $SUBSCRIPTION

Настройка общедоступного доменного имени в Azure Spring Apps

Трафик будет входить в приложение, развернутое в Azure Spring Apps, с помощью общедоступного доменного имени. Чтобы настроить в приложении ожидание передачи данных по протоколу HTTP на этом имени узла, выполните следующие команды, которые добавляют личный домен в приложение, заменив заполнители <...> реальными значениями:

export KV_NAME='<name-of-key-vault>'
export KV_RG='<resource-group-name-of-key-vault>'
export CERT_NAME_IN_KV='<name-of-certificate-with-intermediaries-in-key-vault>'
export DOMAIN_NAME=myapp.mydomain.com

az spring app custom-domain bind \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --domain-name $DOMAIN_NAME \
    --app $APPNAME

Создание сетевых ресурсов

Создаваемый шлюз приложений будет присоединен к той же виртуальной сети, где находится экземпляр службы Azure Spring Apps. Сначала создайте новую подсеть для шлюза приложений в виртуальной сети, затем создайте общедоступный IP-адрес в качестве внешнего интерфейса шлюза приложений, как показано в следующем примере.

export APPLICATION_GATEWAY_PUBLIC_IP_NAME='app-gw-public-ip'
az network vnet subnet create \
    --name $APPLICATION_GATEWAY_SUBNET_NAME \
    --resource-group $RESOURCE_GROUP \
    --vnet-name $VIRTUAL_NETWORK_NAME \
    --address-prefix $APPLICATION_GATEWAY_SUBNET_CIDR
az network public-ip create \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --allocation-method Static \
    --sku Standard

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

Для чтения сертификата вашему шлюзу приложений необходим доступ к Key Vault. Для этого шлюз приложений будет использовать управляемое удостоверение, назначаемое пользователем. Дополнительные сведения см. в статье "Что такое управляемые удостоверения для ресурсов Azure"? Создайте управляемое удостоверение с помощью следующей команды, заменив <заполнитель ...>

export APPGW_IDENTITY_NAME='<name-for-appgw-managed-identity>'
az identity create \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME

Затем выполните следующую команду, чтобы получить управляемое удостоверение objectId. Это значение будет использоваться позже для предоставления прав доступа к сертификату в Key Vault.

export APPGW_IDENTITY_CLIENTID=$(az identity show \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME \
    --query clientId \
    --output tsv)
export APPGW_IDENTITY_OID=$(az ad sp show \
    --id $APPGW_IDENTITY_CLIENTID \
    --query objectId \
    --output tsv)

Настройка политики в Key Vault

Настройте Key Vault с помощью следующей команды, чтобы управляемому удостоверению для шлюза приложений был разрешен доступ к сертификату в Key Vault:

az keyvault set-policy \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --object-id $APPGW_IDENTITY_OID \
    --secret-permissions get list \
    --certificate-permissions get list

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

Создайте шлюз приложений, используя az network application-gateway create, и укажите частное полное доменное имя (FQDN) приложения в качестве серверов в серверном пуле. Обязательно используйте управляемое удостоверение, назначаемое пользователем, и укажите сертификат в Key Vault с помощью идентификатора секрета сертификата.

export APPGW_NAME='<name-for-application-gateway>'
export CERT_NAME_IN_KV='<name-of-certificate-in-key-vault>'
export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
    --name $CERT_NAME_IN_KV \
    --vault-name $KV_NAME \
    --query sid \
    --output tsv)

az network application-gateway create \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --capacity 2 \
    --sku Standard_v2 \
    --frontend-port 443 \
    --http-settings-cookie-based-affinity Disabled \
    --http-settings-port 80 \
    --http-settings-protocol Http \
    --public-ip-address $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --vnet-name $VIRTUAL_NETWORK_NAME \
    --subnet $APPLICATION_GATEWAY_SUBNET_NAME \
    --servers $SPRING_APP_PRIVATE_FQDN \
    --key-vault-secret-id $KEYVAULT_SECRET_ID_FOR_CERT \
    --identity $APPGW_IDENTITY_NAME

Чтобы создать шлюз приложения в Azure, может понадобиться до 30 минут.

Изменение параметров HTTP для использования доменного имени для серверной части

Измените параметры HTTP, чтобы использовать общедоступное доменное имя в качестве имени узла вместо суффикса домена с расширением .private.azuremicroservices.io для отправки трафика в Azure Spring Apps.

az network application-gateway http-settings update \
    --resource-group $RESOURCE_GROUP \
    --gateway-name $APPGW_NAME \
    --host-name-from-backend-pool false \
    --host-name $DOMAIN_NAME \
    --name appGatewayBackendHttpSettings

Проверка развертывания шлюза приложений

После создания серверной части проверьте ее работоспособность с помощью приведенной ниже команды. Выходные данные этой команды позволяют определить, достигает ли шлюз приложений вашего приложения через частное полное доменное имя (FQDN).

az network application-gateway show-backend-health \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP

Выходные данные указывают на состояние работоспособности внутреннего пула, как показано в следующем примере:

{
  "backendAddressPools": [
    {
      "backendHttpSettingsCollection": [
        {
          "servers": [
            {
              "address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
              "health": "Healthy",
              "healthProbeLog": "Success. Received 200 status code",
              "ipConfiguration": null
            }
          ]
        }
      ]
    }
  ]
}

Настройка DNS и доступ к приложению

Настройте общедоступную службу доменных имен (DNS), чтобы она указывала на шлюз приложений, используя запись CNAME или A. Общедоступный адрес для шлюза приложений можно найти с помощью следующей команды:

az network public-ip show \
    --resource-group $RESOURCE_GROUP \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --query [ipAddress] \
    --output tsv

Теперь вы можете получить доступ к приложению с помощью общедоступного доменного имени.

Очистка ресурсов

Если вы планируете продолжить работу с последующими статьями, эти ресурсы можно не удалять. Удалите ненужную группу ресурсов. Ресурсы в ней будут также удалены. Чтобы удалить группу ресурсов с помощью Azure CLI, используйте следующую команду:

az group delete --name $RESOURCE_GROUP

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