Exposición de aplicaciones a Internet con terminación de Seguridad de la capa de transporte (TLS) en Application Gateway
Nota:
Los planes de Básico, Estándar y Enterprise quedarán en desuso a partir de mediados de marzo de 2025, con un período de retiro de 3 años. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte el anuncio de retirada de Azure Spring Apps.
El plan de consumo estándar y dedicado quedará obsoleto a partir del 30 de septiembre de 2024, con un cierre completo al cabo de seis meses. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte Migrar el plan Estándar por consumo y dedicado de Azure Spring Apps a Azure Container Apps.
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
- CLI de Azure, versión 2.0.4 o posterior.
- Una instancia de servicio de Azure Spring Apps implementada en una red virtual con una aplicación accesible a través de una red privada mediante el sufijo de dominio
.private.azuremicroservices.io
predeterminado. Para más información, consulte Implementación de Azure Spring Apps en una red virtual - Dominio personalizado que se va a usar para acceder a la aplicación.
- Un certificado, almacenado en Key Vault, que coincide con el dominio personalizado que se va a usar para establecer el agente de escucha HTTPS. Para más información, vea Tutorial: Importación de un certificado en Azure Key Vault.
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.
- Siga las instrucciones de Implementación de Azure Spring Apps en una red virtual.
- Siga las instrucciones de Acceso a una aplicación en una red privada.
- 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.
- 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.
- 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
.
- Use Azure Spring Apps en el grupo de back-end, al que hace referencia el dominio con el sufijo
- 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 obtener más información, consulte ¿Qué son las identidades administradas para recursos de Azure? Cree la identidad administrada mediante el siguiente comando, 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