Exposición de aplicaciones a Internet con terminación de Seguridad de la capa de transporte (TLS) en Application Gateway

Nota:

Azure Spring Apps es el nuevo nombre del servicio Azure Spring Cloud. Aunque el servicio tiene un nuevo nombre, verá el nombre antiguo en algunos lugares durante un tiempo mientras trabajamos para actualizar recursos, como capturas de pantalla, vídeos y diagramas.

En este artículo se explica cómo exponer las aplicaciones a Internet mediante Application Gateway.

Cuando se implementa una instancia de servicio de Azure Spring Apps en la red virtual (VNET), solo se puede acceder a las aplicaciones de la instancia de servicio en la red privada. Para que las aplicaciones sean accesibles en Internet, debe integrarlas con Azure Application Gateway. El tráfico cifrado entrante se puede descifrar en la puerta de enlace de la aplicación o se puede pasar cifrado a Azure Spring Apps para lograr TLS/SSL de un extremo a otro. Para fines de desarrollo y pruebas, puede empezar con la terminación SSL en la puerta de enlace de aplicación, algo que se trata en esta guía. Para producción, se recomienda TLS/SSL de un extremo a otro con certificado privado, tal como se describe en Exposición de aplicaciones con TLS de un extremo a otro en una red virtual.

Requisitos previos

Configuración de Application Gateway para Azure Spring Apps

Se recomienda que el nombre de dominio, tal como lo ve el explorador, sea el mismo que el nombre de host que Application Gateway usas para dirigir el tráfico al back-end de Azure Spring Apps. Esta recomendación proporciona la mejor experiencia al usar Application Gateway para exponer las aplicaciones hospedadas en Azure Spring Apps que residen en una red virtual. Si el dominio expuesto por Application Gateway es diferente del dominio aceptado por Azure Spring Apps, las cookies y las direcciones URL de redireccionamiento generadas (por ejemplo) se pueden interrumpir. Para más información, consulte Conservación del nombre de host HTTP original entre un proxy inverso y su aplicación web de back-end.

Para configurar Application Gateway delante de Azure Spring Apps en una VNET privada, siga estos pasos.

  1. Siga las instrucciones de Implementación de Azure Spring Apps en una red virtual.
  2. Siga las instrucciones de Acceso a una aplicación en una red privada.
  3. Adquiera un certificado para el dominio que prefiera y almacénelo en Key Vault. Para más información, vea Tutorial: Importación de un certificado en Azure Key Vault.
  4. Configure un dominio personalizado y el certificado correspondiente de Key Vault en una aplicación implementada en Azure Spring Apps. Para más información, vea Tutorial: Asignación de un dominio personalizado existente a Azure Spring Apps.
  5. Implemente Application Gateway en una red virtual configurada según la lista siguiente:
    • Use Azure Spring Apps en el grupo de back-end, al que hace referencia el dominio con el sufijo private.azuremicroservices.io.
    • Incluya un agente de escucha HTTPS usando el mismo certificado de Key Vault.
    • Configure la red virtual con las opciones HTTP que usen el nombre de dominio personalizado configurado en Azure Spring Apps, en lugar del dominio con el sufijo private.azuremicroservices.io.
  6. Configure el DNS público para que apunte a la puerta de enlace de aplicación.

Definición de variables

A continuación, use los comandos siguientes para definir las variables para el grupo de recursos y la red virtual que creó como se indicó en Implementación de Azure Spring Apps en una red virtual. Reemplace los marcadores de posición <...> por valores reales basados en su entorno real. Al definir SPRING_APP_PRIVATE_FQDN, quite https:// del identificador 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'

Inicio de sesión en Azure

Use el siguiente comando para iniciar sesión en la CLI de Azure y elija su suscripción activa.

az login
az account set --subscription $SUBSCRIPTION

Configuración del nombre de dominio público en Azure Spring Apps

El tráfico escribirá la aplicación implementada en Azure Spring Apps con el nombre de dominio público. Si desea configurar la aplicación para que escuche este nombre de host SOBRE HTTP, use los siguientes comandos para agregar un dominio personalizado a la aplicación, reemplazando los marcadores de posición <...> por valores reales:

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

Crear recursos de red

La puerta de enlace de aplicación que se va a crear unirá la misma red virtual que la instancia de servicio de Azure Spring Apps. En primer lugar, cree una nueva subred para la puerta de enlace de aplicación en la red virtual, después cree una dirección IP pública como front-end de la puerta de enlace de aplicación, tal como se muestra en el siguiente ejemplo.

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

Creación de una identidad administrada para la puerta de enlace de aplicación

La puerta de enlace de aplicación necesitará tener acceso a Key Vault para leer el certificado. Para ello, la puerta de enlace de aplicación usará una identidad administrada asignada por el usuario. Para más información, consulte ¿Qué son las identidades administradas para los recursos de Azure? Cree la identidad administrada mediante el comando siguiente, reemplazando el marcador de posición ...> :<

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

A continuación, use el siguiente comando para capturar el objectId para la identidad administrada. Este valor se usará más adelante para conceder los derechos para acceder al certificado en 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)

Establecimiento de la directiva en Key Vault

Configure Key Vault mediante el siguiente comando para que la identidad administrada de la puerta de enlace de aplicación pueda acceder al certificado almacenado en 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

Creación de una puerta de enlace de aplicaciones

Cree una puerta de enlace de aplicación mediante az network application-gateway create y especifique el nombre de dominio completo (FQDN) privado de la aplicación como servidores en el grupo de back-end. Asegúrese de usar la identidad administrada asignada por el usuario y de apuntar al certificado en Key Vault con el identificador secreto del 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

La puerta de enlace de aplicaciones puede tardar hasta 30 minutos en crearse.

Actualización de la configuración HTTP para usar el nombre de dominio hacia el back-end

Actualice la configuración HTTP para usar el nombre de dominio público como el nombre de host para enviar tráfico a Azure Spring Apps en lugar del dominio con el sufijo .private.azuremicroservices.io.

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

Comprobación de la implementación de la puerta de enlace de aplicación

Una vez creado, compruebe el estado del back-end mediante el comando siguiente. La salida de este comando le permite determinar si la puerta de enlace de aplicación llega a la aplicación mediante su nombre de dominio completo (FQDN ) privado.

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

La salida indica el estado correcto del grupo de back-end, como se muestra en el ejemplo siguiente:

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

Configuración del DNS y acceso a la aplicación

Configure el DNS público para que apunte a la puerta de enlace de aplicación mediante un registro CNAME o A. Puede encontrar la dirección pública de la puerta de enlace de aplicación mediante el siguiente comando:

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

Ahora puede acceder a la aplicación mediante el nombre de dominio público.

Limpieza de recursos

Si planea seguir trabajando en otros artículos, considere la posibilidad de dejar estos recursos activos. Cuando ya no lo necesite, elimine el grupo de recursos, que elimina los recursos que contiene. Para eliminar el grupo de recursos mediante la CLI de Azure, use el comando siguiente:

az group delete --name $RESOURCE_GROUP

Pasos siguientes