Exponera program med TLS från slutpunkt till slutpunkt i ett virtuellt nätverk

Kommentar

Azure Spring Apps är det nya namnet på Azure Spring Cloud-tjänsten. Även om tjänsten har ett nytt namn ser du det gamla namnet på vissa platser ett tag medan vi arbetar med att uppdatera tillgångar som skärmbilder, videor och diagram.

Den här artikeln gäller för: ✔️ Basic/Standard ✔️ Enterprise

Den här artikeln beskriver hur du exponerar program på Internet med Application Gateway. När en Azure Spring Apps-tjänstinstans distribueras i ditt virtuella nätverk är program på tjänstinstansen endast tillgängliga i det privata nätverket. För att göra programmen tillgängliga på Internet måste du integrera med Azure Application Gateway.

Förutsättningar

Konfigurera Application Gateway för Azure Spring Apps

Vi rekommenderar att domännamnet, som det visas i webbläsaren, är samma som det värdnamn som Application Gateway använder för att dirigera trafik till Azure Spring Apps-serverdelen. Den här rekommendationen ger den bästa upplevelsen när du använder Application Gateway för att exponera program som finns i Azure Spring Apps och som finns i ett virtuellt nätverk. Om domänen som exponeras av Application Gateway skiljer sig från den domän som accepteras av Azure Spring Apps kan cookies och genererade omdirigerings-URL:er (till exempel) brytas. Mer information finns i Bevarande av värdnamn.

Använd följande steg för att konfigurera Application Gateway framför Azure Spring Apps.

  1. Följ anvisningarna i Distribuera Azure Spring Apps i ett virtuellt nätverk.
  2. Följ anvisningarna i Access your application in a private network (Åtkomst till ditt program i ett privat nätverk).
  3. Skaffa ett certifikat för valfri domän och lagra det i Key Vault. Mer information finns i Självstudie: Importera ett certifikat i Azure Key Vault.
  4. Konfigurera en anpassad domän och motsvarande certifikat från Key Vault i en app som distribueras till Azure Spring Apps. Mer information finns i Självstudie: Mappa en befintlig anpassad domän till Azure Spring Apps.
  5. Distribuera Application Gateway i ett virtuellt nätverk som konfigurerats enligt följande lista:
    • Använd Azure Spring Apps i serverdelspoolen, som refereras av domänsuffixet med private.azuremicroservices.io.
    • Inkludera en HTTPS-lyssnare med samma certifikat från Key Vault.
    • Konfigurera det virtuella nätverket med HTTP-inställningar som använder det anpassade domännamnet som konfigurerats i Azure Spring Apps i stället för domänsuffixet med private.azuremicroservices.io.
  6. Konfigurera din offentliga DNS så att den pekar på Application Gateway.

Definiera variabler

Använd sedan följande kommandon för att definiera variabler för resursgruppen och det virtuella nätverk som du skapade enligt anvisningarna i Distribuera Azure Spring Apps i ett virtuellt nätverk. Anpassa värdena baserat på din verkliga miljö. När du definierar SPRING_APP_PRIVATE_FQDNtar du bort https:// från URI:n.

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'

Logga in på Azure

Använd följande kommando för att logga in på Azure CLI och välja din aktiva prenumeration.

az login
az account set --subscription $SUBSCRIPTION

Hämta ett certifikat

För produktionsdistributioner använder du sannolikt ett offentligt signerat certifikat. I det här fallet importerar du certifikatet i Azure Key Vault. Mer information finns i Självstudie: Importera ett certifikat i Azure Key Vault. Kontrollera att certifikatet innehåller hela certifikatkedjan.

Konfigurera det offentliga domännamnet i Azure Spring Apps

Trafik anger programmet som distribueras i Azure Spring Apps med hjälp av det offentliga domännamnet. Om du vill konfigurera programmet att lyssna på det här värdnamnet och göra det via HTTPS använder du följande kommandon för att lägga till en anpassad domän i din 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

Skapa nätverksresurser

Azure Application Gateway som ska skapas ansluter samma virtuella nätverk som - eller peer-kopplat virtuellt nätverk till - Azure Spring Apps-tjänstinstansen. Skapa först ett nytt undernät för Application Gateway i det virtuella nätverket med hjälp av az network vnet subnet createoch skapa även en offentlig IP-adress som klientdel för Application Gateway med .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

Skapa en hanterad identitet för Application Gateway

Application Gateway måste kunna komma åt Key Vault för att kunna läsa certifikatet. För att göra det använder den en användartilldelad hanterad identitet. Skapa den hanterade identiteten med hjälp av följande kommando:

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

Hämta sedan objectId för den hanterade identiteten eftersom det kommer att användas senare för att ge behörighet att komma åt certifikatet i 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)

Ange princip för Key Vault

Konfigurera Key Vault med följande kommando så att den hanterade identiteten för Application Gateway får åtkomst till certifikatet som lagras i 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

Skapa Application Gateway

Skapa en programgateway med och az network application-gateway create ange programmets privata fullständigt kvalificerade domännamn (FQDN) som servrar i serverdelspoolen. Se till att använda den användartilldelade hanterade identiteten och peka på certifikatet i Key Vault med hjälp av certifikatets hemliga ID. Uppdatera sedan HTTP-inställningen med hjälp av az network application-gateway http-settings update det offentliga värdnamnet.

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

Det kan ta upp till 30 minuter för Azure att skapa programgatewayen.

Uppdatera HTTP-Inställningar för att använda domännamnet mot serverdelen

Uppdatera HTTP-inställningarna så att det offentliga domännamnet används som värdnamn i stället för domänsuffixet med ".private.azuremicroservices.io" för att skicka trafik till Azure Spring Apps med.

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

Kontrollera distributionen av Application Gateway

När den har skapats kontrollerar du serverdelshälsan med hjälp av följande kommando. Med utdata från det här kommandot kan du avgöra om programgatewayen når ditt program via dess privata fullständiga domännamn.

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

Utdata anger den felfria statusen för serverdelspoolen, som du ser i följande exempel:

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

Konfigurera DNS och få åtkomst till programmet

Konfigurera nu den offentliga DNS:en så att den pekar på Application Gateway med hjälp av en CNAME- eller A-post. Du hittar den offentliga adressen för Application Gateway med hjälp av följande kommando:

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

Nu kan du komma åt programmet med hjälp av det offentliga domännamnet.

Nästa steg