Expor aplicativos à Internet com a terminação TLS no Gateway de Aplicativo

Observação

Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.

O plano Standard de consumo e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para Aplicativos de Contêiner do Azure. Para mais informações, confira Migrar o plano Standard de consumo e dedicado dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo explica como expor aplicativos à Internet usando o Gateway de Aplicativo.

Quando uma instância de serviço do Azure Spring Apps é implantada na VNET (rede virtual), os aplicativos na instância do serviço só podem ser acessados na rede privada. Para tornar os aplicativos acessíveis na Internet, você precisa ter a integração com o Gateway de Aplicativo do Azure. O tráfego criptografado de entrada pode ser descriptografado no gateway de aplicativo ou pode ser passado para o Azure Spring Apps criptografado para obter TLS/SSL de ponta a ponta. Para fins de desenvolvimento e teste, você pode começar com a terminação SSL no gateway de aplicativo, que é abordado neste guia. Para produção, recomendamos TLS/SSL de ponta a ponta com certificado privado, conforme descrito em Expor aplicativos com TLS de ponta a ponta em uma rede virtual.

Pré-requisitos

Configurar o Gateway de Aplicativo para o Azure Spring Apps

Recomendamos que o nome de domínio, conforme visto pelo navegador, seja o mesmo que o nome do host que o Gateway de Aplicativo usa para direcionar o tráfego para o back-end do Azure Spring Apps. Essa recomendação fornece a melhor experiência ao usar o Gateway de Aplicativo para expor aplicativos hospedados no Azure Spring Apps e residentes em uma rede virtual. Se o domínio exposto pelo Gateway de Aplicativo for diferente do domínio aceito pelo Azure Spring Apps, os cookies e as URLs de redirecionamento geradas (por exemplo) poderão estar incorretos. Para saber mais, confira Preservação do nome do host.

Para configurar o Gateway de Aplicativo na frente do Azure Spring Apps em uma VNET privada, siga as etapas a seguir.

  1. Siga as instruções em Implantar o Azure Spring Apps em uma rede virtual.
  2. Siga as instruções em Acessar seu aplicativo em uma rede privada.
  3. Adquira um certificado para o domínio de sua escolha e armazene-o no Azure Key Vault. Para obter mais informações, consulte Tutorial: Importar um certificado no Azure Key Vault.
  4. Configure um domínio personalizado e um certificado correspondente no Key Vault em um aplicativo implantado no Azure Spring Apps. Para obter mais informações, confira Tutorial: Mapear um domínio personalizado existente para o Azure Spring Apps.
  5. Implante o Gateway de Aplicativo em uma rede virtual configurada de acordo com a lista a seguir:
    • Use o Azure Spring Apps no pool de back-end, referenciado pelo domínio com sufixo private.azuremicroservices.io.
    • Inclua um ouvinte HTTPS usando o mesmo certificado do Azure Key Vault.
    • Prepare a rede virtual com configurações de HTTP que usam o nome de domínio personalizado configurado no Azure Spring Apps em vez do domínio com sufixo private.azuremicroservices.io.
  6. Configure seu DNS público para apontar para o gateway de aplicativo.

Definir variáveis

Em seguida, use os seguintes comandos para definir variáveis para o grupo de recursos e a rede virtual que você criou conforme orientado em Implantar o Azure Spring Apps em uma rede virtual. Substitua os espaços reservados <...> por valores reais com base no seu ambiente real. Ao definir SPRING_APP_PRIVATE_FQDN, remova do 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'

Entrar no Azure

Use o comando a seguir para entrar na CLI do Azure e escolher sua assinatura ativa.

az login
az account set --subscription $SUBSCRIPTION

Configurar o nome de domínio público no Azure Spring Apps

O tráfego entrará no aplicativo implantado no Azure Spring Apps usando o nome de domínio público. Para configurar seu aplicativo para escutar esse nome do host e fazer isso por HTTP, use os seguintes comandos para adicionar um domínio personalizado ao seu aplicativo, substituindo os espaços reservados <...> por valores reais:

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

Criar recursos da rede

O gateway de aplicativo que será criado ingressará na mesma rede virtual que a instância de serviço do Azure Spring Apps. Primeiro, crie uma sub-rede do gateway de aplicativo na rede virtual e crie também um endereço IP público como o front-end do gateway de aplicativo, configurado no exemplo a seguir.

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

Criar uma identidade gerenciada para o gateway de aplicativo

O gateway de aplicativo precisará acessar o Azure Key Vault para ler o certificado. Para fazer isso, o gateway de aplicativo usará uma identidade gerenciada atribuída pelo usuário. Para obter mais informações, confira O que são as identidades gerenciadas para recursos do Azure? Crie a identidade gerenciada usando o seguinte comando, substituindo o espaço reservado <...>:

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

Em seguida, use o comando a seguir para buscar o objectId da identidade gerenciada. Esse valor será usado posteriormente para fornecer direitos de acesso ao certificado no 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)

Definir a política no Azure Key Vault

Configure o Azure Key Vault usando o seguinte comando para que a identidade gerenciada do gateway de aplicativo tenha permissão para acessar o certificado armazenado no 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

Criar um Gateway de Aplicativo

Crie um gateway de aplicativo usando az network application-gateway create e especifique o nome de domínio totalmente qualificado (FQDN) privado do aplicativo como servidores no pool de back-end. Lembre-se de usar a identidade gerenciada atribuída pelo usuário e apontar para o certificado no Key Vault usando a ID secreta do certificado.

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

Pode levar até 30 minutos para que o Azure crie o gateway de aplicativo.

Atualizar as configurações de HTTP para usar o nome de domínio no back-end

Atualize as configurações de HTTP para usar o nome de domínio público como o nome do host em vez do domínio com sufixo .private.azuremicroservices.io para enviar tráfego para o 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

Verificar a implantação do gateway de aplicativo

Depois de criado, verifique a integridade do back-end usando o comando a seguir. A saída desse comando permite que você determine se o gateway de aplicativo atinge seu aplicativo por meio do FQDN (nome de domínio totalmente qualificado) particular.

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

A saída indica o status da integridade do pool de back-end, conforme mostrado no exemplo a seguir:

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

Configurar o DNS e acessar o aplicativo

Configure o DNS público para apontar para o gateway de aplicativo usando um registro A ou CNAME. Você pode encontrar o endereço público do gateway de aplicativo usando o seguinte comando:

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

Agora você pode acessar o aplicativo usando o nome de domínio público.

Limpar os recursos

Se planejar continuar trabalhando nos próximos artigos, deixe esses recursos onde estão. Quando não for mais necessário, exclua o grupo de recursos, que excluirá os recursos no grupo de recursos. Para excluir o grupo de recursos usando a CLI do Azure, use o seguinte comando:

az group delete --name $RESOURCE_GROUP

Próximas etapas