Exposer des applications à Internet avec terminaison TLS au niveau d’Application Gateway
Remarque
Les plans Essentiel, Standard et Entreprise seront déconseillés à compter de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de mise hors service d’Azure Spring Apps.
Le plan de consommation standard et dédiée sera déconseillé à compter du 30 septembre 2024, avec un arrêt complet après six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation standard et dédiée Azure Spring Apps vers Azure Container Apps.
Cet article explique comment exposer des applications à Internet avec Application Gateway.
Lorsqu’une instance de service Azure Spring Apps est déployée dans votre réseau virtuel, les applications de l’instance de service sont accessibles uniquement dans le réseau privé. Pour rendre les applications accessibles sur Internet, vous devez effectuer une intégration avec Azure Application Gateway. Le trafic chiffré entrant peut être déchiffré au niveau de la passerelle applicative ou il peut être passé à Azure Spring Apps chiffré pour obtenir un TLS/SSL de bout en bout. À des fins de développement et de test, vous pouvez commencer avec la terminaison SSL au niveau de la passerelle applicative, ce qui est abordé dans ce guide. Pour la production, nous recommandons le protocole TLS/SSL de bout en bout avec un certificat privé, comme décrit dans Exposer des applications avec le protocole TLS de bout en bout dans un réseau virtuel.
Prérequis
- Azure CLI version 2.0.4 ou ultérieure.
- Une instance de service Azure Spring Apps déployée dans un réseau virtuel avec une application accessible sur le réseau privé à l’aide du suffixe de domaine
.private.azuremicroservices.io
par défaut. Pour plus d’informations, consultez Déploiement d’Azure Spring Apps dans un réseau virtuel - Un domaine personnalisé servant à accéder à l’application.
- Un certificat, stocké dans Key Vault, correspondant au domaine personnalisé à utiliser pour établir l’écouteur HTTPS. Pour plus d’informations, consultez Tutoriel : Importation d’un certificat dans Azure Key Vault.
Configuration d’Application Gateway pour Azure Spring Apps
Nous vous recommandons de faire en sorte que le nom de domaine visible par le navigateur soit le même que le nom d’hôte utilisé par Application Gateway pour diriger le trafic vers le backend Azure Spring Apps. L’expérience est alors optimale lorsqu’il s’agit d’utiliser Application Gateway pour exposer des applications hébergées dans Azure Spring Apps et résidant dans un réseau virtuel. Si le domaine exposé par Application Gateway est différent du domaine accepté par Azure Spring Apps, les cookies et les URL de redirection générées (par exemple) risquent d’être rompus. Pour plus d’informations, consultez Conservation du nom d’hôte.
Pour configurer Application Gateway devant Azure Spring Apps dans un réseau virtuel privé, procédez comme suit.
- Suivez les instructions décrites dans Déploiement d’Azure Spring Apps dans un réseau virtuel.
- Suivez les instructions fournies dans Accéder à votre application sur un réseau privé.
- Obtenez un certificat pour le domaine de votre choix et stockez-le dans Key Vault. Pour plus d’informations, consultez Tutoriel : Importation d’un certificat dans Azure Key Vault.
- Configurez un domaine personnalisé et le certificat correspondant issu de Key Vault dans une application déployée sur Azure Spring Apps. Pour plus d’informations, consultez Tutoriel : Mappage d’un domaine personnalisé existant à Azure Spring Apps.
- Déployez Application Gateway dans un réseau virtuel configuré conformément à la liste suivante :
- Utilisez Azure Spring Apps dans le pool backend, indiqué par le suffixe de domaine
private.azuremicroservices.io
. - Incluez un écouteur HTTPS avec le même certificat issu de Key Vault.
- Configurez le réseau virtuel avec des paramètres HTTP qui utilisent le nom de domaine personnalisé configuré sur Azure Spring Apps au lieu du suffixe de domaine
private.azuremicroservices.io
.
- Utilisez Azure Spring Apps dans le pool backend, indiqué par le suffixe de domaine
- Configurez votre DNS public de sorte qu’il pointe vers Application Gateway.
Définir des variables
Maintenant, utilisez les commandes suivantes afin de définir des variables pour le groupe de ressources et le réseau virtuel créés (cf. Déploiement d’Azure Spring Apps dans un réseau virtuel). Remplacez les espaces réservés <...> par des valeurs réelles basées sur votre environnement réel. Lorsque vous définissez SPRING_APP_PRIVATE_FQDN
, supprimez https://
de l’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'
Connexion à Azure
Utilisez la commande suivante pour vous connecter à Azure CLI et choisir votre abonnement actif.
az login
az account set --subscription $SUBSCRIPTION
Configuration du nom de domaine public sur Azure Spring Apps
Le trafic entre dans l’application déployée sur Azure Spring Apps avec le nom de domaine public. Pour configurer votre application afin qu’elle écoute ce nom d’hôte via HTTP, utilisez les commandes suivantes pour ajouter un domaine personnalisé à votre application, en remplaçant les caractères génériques <...> par des valeurs réelles :
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
Créer des ressources réseau
La passerelle applicative qui sera créée rejoindra le même réseau virtuel que l’instance de service Azure Spring Apps. Tout d’abord, créez un nouveau sous-réseau pour la passerelle applicative dans le réseau virtuel, puis créez une adresse IP publique comme frontal de la passerelle applicative, comme le montre l’exemple suivant.
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
Création d’une identité managée pour la passerelle applicative
Votre passerelle applicative doit avoir accès à Key Vault pour lire le certificat. Pour ce faire, la passerelle applicative utilise une identité managée affectée par l’utilisateur. Pour plus d’informations, consultez Que sont les identités managées pour les ressources Azure ? Créez l’identité managée à l’aide de la commande suivante, en remplaçant l’espace réservé <...> :
export APPGW_IDENTITY_NAME='<name-for-appgw-managed-identity>'
az identity create \
--resource-group $RESOURCE_GROUP \
--name $APPGW_IDENTITY_NAME
Utilisez ensuite la commande suivante pour récupérer le objectId
pour l’identité managée. Cette valeur sera utilisée plus tard pour donner des droits d’accès au certificat dans 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)
Définition de la stratégie sur Key Vault
Configurez Key Vault avec la commande suivante afin que l’identité managée pour la passerelle applicative soit autorisée à accéder au certificat stocké dans 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
Créer une passerelle Application Gateway
Créez une passerelle applicative en utilisant az network application-gateway create
et spécifiez le nom de domaine complet (FQDN) privé de votre application en tant que serveurs dans le pool principal. Veillez à utiliser l’identité managée affectée par l’utilisateur et à pointer sur le certificat dans Key Vault avec l’ID de secret du certificat.
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 création de la passerelle d’application par Azure peut prendre jusqu’à 30 minutes.
Mise à jour des paramètres HTTP pour utiliser le nom de domaine vers le backend
Mettez à jour les paramètres HTTP de façon à utiliser le nom de domaine public comme nom d’hôte au lieu du suffixe de domaine .private.azuremicroservices.io
pour envoyer le trafic vers 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
Vérification du déploiement de la passerelle applicative
Après sa création, vérifiez l’intégrité du backend avec la commande suivante. La sortie de cette commande vous permet de déterminer si la passerelle applicative atteint votre application par le biais de son nom de domaine complet privé.
az network application-gateway show-backend-health \
--name $APPGW_NAME \
--resource-group $RESOURCE_GROUP
La sortie indique un état sain du pool principal, comme le montre l’exemple suivant :
{
"backendAddressPools": [
{
"backendHttpSettingsCollection": [
{
"servers": [
{
"address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
"health": "Healthy",
"healthProbeLog": "Success. Received 200 status code",
"ipConfiguration": null
}
]
}
]
}
]
}
Configuration du DNS et accès à l’application
Configurez le DNS public de sorte qu’il pointe vers la passerelle applicative à l’aide d’un enregistrement CNAME ou A. Vous trouverez l’adresse publique de la passerelle applicative avec la commande suivante :
az network public-ip show \
--resource-group $RESOURCE_GROUP \
--name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
--query [ipAddress] \
--output tsv
Vous pouvez maintenant accéder à l’application avec le nom de domaine public.
Nettoyer les ressources
Si vous prévoyez d’utiliser d’autres articles, vous pouvez conserver ces ressources. Quand vous n’en avez plus besoin, supprimez le groupe de ressources, ce qui supprime également les ressources qu’il contient. Pour supprimer le groupe de ressources à l’aide d’Azure CLI, utilisez la commande suivante :
az group delete --name $RESOURCE_GROUP