Freigeben über


Verfügbarmachen von Anwendungen mit End-to-End-TLS in einem virtuellen Netzwerk

Hinweis

Die Pläne Basic, Standard und Enterprise gelten ab Mitte März 2025 als veraltet und werden über einen Zeitraum von 3 Jahren eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie in der Ankündigung zur Einstellung von Azure Spring Apps.

Der Standardverbrauchs- und dedizierte Plan wird ab dem 30. September 2024 als veraltet gekennzeichnet und nach sechs Monaten vollständig eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie unter Migrieren vom Standardverbrauchs- und dedizierten Plan von Azure Spring Apps zu Azure Container Apps.

Dieser Artikel gilt für: ✔️ Basic/Standard ✔️ Enterprise

In diesem Artikel wird die Vorgehensweise beim Verfügbarmachen von Anwendungen für das Internet mithilfe von Application Gateway erläutert. Wenn eine Azure Spring Apps-Dienstinstanz in Ihrem virtuellen Netzwerk bereitgestellt wird, kann auf Anwendungen in der Dienstinstanz nur im privaten Netzwerk zugegriffen werden. Um die Anwendungen über das Internet verfügbar zu machen, müssen Sie eine Integration in Azure Application Gateway durchführen.

Voraussetzungen

Konfigurieren von Application Gateway für Azure Spring Apps

Es wird empfohlen, dass der Domänenname, wie er vom Browser angezeigt wird, mit dem Hostnamen identisch ist, den Application Gateway verwendet, um Datenverkehr an das Azure Spring Apps-Back-End weiterzuleiten. Diese Empfehlung bietet die beste Erfahrung bei der Verwendung von Application Gateway, um Anwendungen verfügbar zu machen, die in Azure Spring Apps gehostet werden und sich in einem virtuellen Netzwerk befinden. Wenn sich die von Application Gateway verfügbar gemachte Domäne von der Domäne unterscheidet, die von Azure Spring Apps akzeptiert wird, können Cookies und generierte Umleitungs-URLs (als Beispiel) beschädigt werden. Weitere Informationen finden Sie unter Beibehalten von Hostnamen.

Führen Sie die folgenden Schritte aus, um Application Gateway vor Azure Spring Apps zu konfigurieren.

  1. Befolgen Sie die Anweisungen unter Bereitstellen von Azure Spring Apps in einem virtuellen Netzwerk.
  2. Befolgen Sie die Anweisungen unter Zugreifen auf eine Anwendung im privaten Netzwerk.
  3. Rufen Sie ein Zertifikat für Ihre gewünschte Domäne ab, und speichern Sie es in Key Vault. Weitere Informationen finden Sie unter Tutorial: Importieren eines Zertifikats in Azure Key Vault.
  4. Konfigurieren Sie eine benutzerdefinierte Domäne und ein entsprechendes Zertifikat aus Key Vault in einer App, die unter Azure Spring Apps bereitgestellt wird. Weitere Informationen finden Sie unter Tutorial: Zuordnen einer bereits vorhandenen benutzerdefinierten Domäne zu Azure Spring Apps.
  5. Stellen Sie Application Gateway in einem virtuellen Netzwerk bereit, das gemäß der folgenden Liste konfiguriert ist:
    • Verwenden Sie Azure Spring Apps im Back-End-Pool, auf den die Domäne mit dem Suffix private.azuremicroservices.io verweist.
    • Schließen Sie einen HTTPS-Listener ein, der dasselbe Zertifikat von Key Vault verwendet.
    • Konfigurieren Sie das virtuelle Netzwerk mit HTTP-Einstellungen, die den auf Azure Spring Apps konfigurierten benutzerdefinierten Domänennamen anstelle der Domäne mit dem Suffix private.azuremicroservices.io verwenden.
  6. Konfigurieren Sie Ihr öffentliches DNS so, dass es auf Application Gateway verweist.

Definieren von Variablen

Verwenden Sie als nächstes die folgenden Befehle, um die Variablen für die Ressourcengruppe und das virtuelle Netzwerk zu definieren, die Sie gemäß der Beschreibung unter Bereitstellen von Azure Spring Apps in einem virtuellen Netzwerk erstellt haben. Passen Sie die Werte basierend auf Ihrer realen Umgebung an. Wenn Sie SPRING_APP_PRIVATE_FQDN definieren, entfernen Sie https:// aus dem 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'

Anmelden bei Azure

Verwenden Sie den folgenden Befehl, um sich bei der Azure CLI anzumelden und Ihr aktives Abonnement auszuwählen.

az login
az account set --subscription $SUBSCRIPTION

Abrufen eines Zertifikats

Für Produktionsbereitstellungen verwenden Sie höchstwahrscheinlich ein öffentlich signiertes Zertifikat. Importieren Sie in diesem Fall das Zertifikat in Azure Key Vault. Weitere Informationen finden Sie unter Tutorial: Importieren eines Zertifikats in Azure Key Vault. Stellen Sie sicher, dass das Zertifikat die gesamte Zertifikatkette enthält.

Konfigurieren des öffentlichen Domänennamens unter Azure Spring Apps

Der Datenverkehr wird mithilfe des öffentlichen Domänennamens in die unter Azure Spring Apps bereitgestellte Anwendung gelangen. Um Ihre Anwendung so zu konfigurieren, dass sie auf diesen Hostnamen über HTTPS lauscht, verwenden Sie die folgenden Befehle, um Ihrer App eine benutzerdefinierte Domäne hinzuzufügen:

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

Erstellen von Netzwerkressourcen

Das zu erstellende Azure Application Gateway wird zum gleichen virtuellen Netzwerk wie die Azure Spring Apps-Dienstinstanz oder als virtuelles Peeringnetzwerk hinzugefügt. Erstellen Sie zunächst mithilfe von az network vnet subnet create ein neues Subnetz für das Application Gateway im virtuellen Netzwerk, und erstellen Sie außerdem mithilfe von az network public-ip create eine öffentliche IP-Adresse als Front-End der Application Gateway-Instanz.

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

Erstellen einer verwalteten Identität für Application Gateway

Application Gateway muss auf Key Vault zugreifen können, um das Zertifikat zu lesen. Dazu wird eine benutzerseitig zugewiesene verwaltete Identität verwendet. Erstellen Sie die verwaltete Identität mit dem folgenden Befehl:

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

Rufen Sie dann die „objectId“ für die verwaltete Identität ab, da diese später verwendet wird, um Zugriffsberechtigungen auf das Zertifikat in Key Vault zu erteilen:

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)

Festlegen der Richtlinie für Key Vault

Konfigurieren Sie Key Vault mit dem folgenden Befehl, damit die verwaltete Identität für Application Gateway auf das in Key Vault gespeicherte Zertifikat zugreifen kann:

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

Erstellen einer Application Gateway-Instanz

Erstellen Sie ein Anwendungsgateway mit az network application-gateway create, und geben Sie den privaten vollqualifizierten Domänennamen (FQDN) Ihrer Anwendung als Server im Back-End-Pool an. Stellen Sie sicher, dass Sie die benutzerseitig zugewiesene verwaltete Identität verwenden und auf das Zertifikat in Key Vault verweisen, indem Sie die Geheimnis-ID des Zertifikats verwenden. Aktualisieren Sie dann die HTTP-Einstellung mit az network application-gateway http-settings update, um den öffentlichen Hostnamen zu verwenden.

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

Die Erstellung des Anwendungsgateways in Azure kann bis zu 30 Minuten in Anspruch nehmen.

Aktualisieren der HTTP-Einstellungen zur Verwendung des Domänennamens für das Back-End

Aktualisieren Sie die HTTP-Einstellungen so, dass der öffentliche Domänenname als Hostname anstelle der Domäne mit dem Suffix „.private.azuremicroservices.io“ verwendet wird, um den Datenverkehr an Azure Spring Apps zu senden.

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

Überprüfen der Bereitstellung von Application Gateway

Überprüfen Sie nach der Erstellung die Back-End-Integrität mit dem folgenden Befehl. Mit der Ausgabe dieses Befehls können Sie bestimmen, ob das Anwendungsgateway Ihre Anwendung über seinen privaten FQDN erreicht.

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

Die Ausgabe gibt den fehlerfreien Status des Back-End-Pools an, wie im folgenden Beispiel gezeigt:

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

Konfigurieren von DNS und Zugreifen auf die Anwendung

Konfigurieren Sie nun das öffentliche DNS so, dass es mithilfe eines CNAME- oder A-Eintrags auf Application Gateway verweist. Sie können die öffentliche Adresse für Application Gateway mithilfe des folgenden Befehls ermitteln:

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

Sie können jetzt mithilfe des öffentlichen Domänennamens auf die Anwendung zugreifen.

Nächste Schritte