Partager via


Exposer des applications à Internet avec terminaison TLS au niveau d’Application Gateway

Remarque

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

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

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.

  1. Suivez les instructions décrites dans Déploiement d’Azure Spring Apps dans un réseau virtuel.
  2. Suivez les instructions fournies dans Accéder à votre application sur un réseau privé.
  3. 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.
  4. 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.
  5. Déployez Application Gateway dans un réseau virtuel configuré en fonction de 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.
  6. 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 Qu’est-ce que 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

Étapes suivantes