Esporre applicazioni con TLS end-to-end in una rete virtuale

Nota

I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.

Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.

Questo articolo si applica a: ✔️ Basic/Standard ✔️ Enterprise

Questo articolo illustra come esporre le applicazioni a Internet tramite gateway applicazione. Quando un'istanza del servizio Azure Spring Apps viene distribuita nella rete virtuale, le applicazioni nell'istanza del servizio sono accessibili solo nella rete privata. Per rendere accessibili le applicazioni su Internet, è necessario integrarsi con app Azure lication Gateway.

Prerequisiti

Configurare gateway applicazione per Le app Azure Spring

È consigliabile che il nome di dominio, come illustrato dal browser, corrisponda al nome host usato gateway applicazione per indirizzare il traffico al back-end di Azure Spring Apps. Questa raccomandazione offre la migliore esperienza quando si usa gateway applicazione per esporre le applicazioni ospitate in App Spring di Azure e che risiedono in una rete virtuale. Se il dominio esposto da gateway applicazione è diverso dal dominio accettato da Azure Spring Apps, i cookie e gli URL di reindirizzamento generati (ad esempio) possono essere interrotti. Per altre informazioni, vedere Conservazione dei nomi host.

Per configurare gateway applicazione davanti ad Azure Spring Apps, seguire questa procedura.

  1. Seguire le istruzioni in Distribuire App Azure Spring in una rete virtuale.
  2. Seguire le istruzioni in Accedere all'applicazione in una rete privata.
  3. Acquisire un certificato per il dominio preferito e archiviare tale certificato in Key Vault. Per ulteriori informazioni, vedere Esercitazione: Importare un certificato in Azure Key Vault.
  4. Configurare un dominio personalizzato e il certificato corrispondente da Key Vault in un'app distribuita in Azure Spring Apps. Per altre informazioni, vedere Esercitazione: Eseguire il mapping di un dominio personalizzato esistente ad Azure Spring Apps.
  5. Distribuire gateway applicazione in una rete virtuale configurata in base all'elenco seguente:
    • Usare Azure Spring Apps nel pool back-end, a cui fa riferimento il suffisso del dominio con private.azuremicroservices.io.
    • Includere un listener HTTPS usando lo stesso certificato di Key Vault.
    • Configurare la rete virtuale con le impostazioni HTTP che usano il nome di dominio personalizzato configurato in Azure Spring Apps anziché il suffisso di dominio con private.azuremicroservices.io.
  6. Configurare il DNS pubblico in modo che punti a gateway applicazione.

Definire le variabili

Usare quindi i comandi seguenti per definire le variabili per il gruppo di risorse e la rete virtuale creati come indicato in Distribuire Azure Spring Apps in una rete virtuale. Personalizzare i valori in base all'ambiente reale. Quando si definisce SPRING_APP_PRIVATE_FQDN, rimuovere https:// dall'URI.

export SUBSCRIPTION='subscription-id'
export RESOURCE_GROUP='my-resource-group'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='name-of-spring-cloud-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'

Accedere ad Azure

Usare il comando seguente per accedere all'interfaccia della riga di comando di Azure e scegliere la sottoscrizione attiva.

az login
az account set --subscription $SUBSCRIPTION

Acquisire un certificato

Per le distribuzioni di produzione, probabilmente si userà un certificato firmato pubblicamente. In questo caso, importare il certificato in Azure Key Vault. Per ulteriori informazioni, vedere Esercitazione: Importare un certificato in Azure Key Vault. Assicurarsi che il certificato includa l'intera catena di certificati.

Configurare il nome di dominio pubblico in Azure Spring Apps

Il traffico immetterà l'applicazione distribuita in Azure Spring Apps usando il nome di dominio pubblico. Per configurare l'applicazione per l'ascolto di questo nome host e farlo tramite HTTPS, usare i comandi seguenti per aggiungere un dominio personalizzato all'app:

export KV_NAME='name-of-key-vault'
export KV_RG='resource-group-name-of-key-vault'
export CERT_NAME_IN_AZURE_SPRING_APPS='name-of-certificate-in-Azure-Spring-Apps'
export CERT_NAME_IN_KEY_VAULT='name-of-certificate-with-intermediaries-in-key-vault'
export DOMAIN_NAME=myapp.mydomain.com

# provide permissions to Azure Spring Apps to read the certificate from Key Vault:
export VAULTURI=$(az keyvault show \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --query properties.vaultUri \
    --output tsv)

# get the object id for the Azure Spring Apps Domain-Management Service Principal:
export ASADM_OID=$(az ad sp show \
    --id 03b39d0f-4213-4864-a245-b1476ec03169 \
    --query objectId \
    --output tsv)

# allow this Service Principal to read and list certificates and secrets from Key Vault:
az keyvault set-policy \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --object-id $ASADM_OID \
    --certificate-permissions get list \
    --secret-permissions get list

# add custom domain name and configure TLS using the certificate:
az spring certificate add \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --name $CERT_NAME_IN_AZURE_SPRING_APPS \
    --vault-certificate-name $CERT_NAME_IN_KEY_VAULT \
    --vault-uri $VAULTURI
az spring app custom-domain bind \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --domain-name $DOMAIN_NAME \
    --certificate $CERT_NAME_IN_AZURE_SPRING_APPS \
    --app $APPNAME

Creare risorse di rete

Il gateway di app Azure lication da creare verrà aggiunto alla stessa rete virtuale della rete virtuale con peering o all'istanza del servizio Azure Spring Apps. Creare prima di tutto una nuova subnet per il gateway applicazione nella rete virtuale usando az network vnet subnet createe creare anche un indirizzo IP pubblico come front-end del gateway applicazione usando az network public-ip create.

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

Creare un'identità gestita per gateway applicazione

gateway applicazione dovrà essere in grado di accedere a Key Vault per leggere il certificato. A tale scopo, userà un'identità gestita assegnata dall'utente. Creare l'identità gestita usando il comando seguente:

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

Recuperare quindi l'objectId per l'identità gestita perché verrà usato in un secondo momento per concedere i diritti di accesso al certificato in 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)

Impostare i criteri in Key Vault

Configurare Key Vault usando il comando seguente in modo che l'identità gestita per gateway applicazione sia autorizzata ad accedere al certificato archiviato in Key Vault:

az keyvault set-policy \
    --name $KV_NAME \
    --resource-group $KV_RG \
    --object-id $APPGW_IDENTITY_OID \
    --secret-permissions get list \
    --certificate-permissions get list

Creare un gateway applicazione

Creare un gateway applicazione usando az network application-gateway create e specificare il nome di dominio completo (FQDN) privato dell'applicazione come server nel pool back-end. Assicurarsi di usare l'identità gestita assegnata dall'utente e di puntare al certificato in Key Vault usando l'ID segreto del certificato. Aggiornare quindi l'impostazione HTTP usando az network application-gateway http-settings update per usare il nome host pubblico.

export APPGW_NAME='name-for-application-gateway'

export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
    --name $CERT_NAME_IN_KEY_VAULT \
    --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 443 \
    --http-settings-protocol Https \
    --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

Il processo di creazione del gateway applicazione in Azure può richiedere fino a 30 minuti.

Aggiornare le impostazioni HTTP per usare il nome di dominio verso il back-end

Aggiornare le impostazioni HTTP per usare il nome di dominio pubblico come nome host anziché il suffisso di dominio con ".private.azuremicroservices.io" per inviare il traffico ad Azure Spring Apps con .

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

Controllare la distribuzione di gateway applicazione

Dopo la creazione, controllare l'integrità del back-end usando il comando seguente. L'output di questo comando consente di determinare se il gateway applicazione raggiunge l'applicazione tramite il relativo FQDN privato.

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

L'output indica lo stato integro del pool back-end, come illustrato nell'esempio seguente:

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

Configurare DNS e accedere all'applicazione

Configurare ora il DNS pubblico in modo che punti a gateway applicazione usando un record CNAME o A. È possibile trovare l'indirizzo pubblico per gateway applicazione usando il comando seguente:

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

È ora possibile accedere all'applicazione usando il nome di dominio pubblico.

Passaggi successivi