Självstudie: Isolera backend-kommunikation i Azure App Service med Virtual Network integrering

I den här artikeln konfigurerar du App Service en app med säker, nätverks isolerad kommunikation till backend-tjänster. Exempelscenariot som används är i Självstudie: Säker Cognitive Service-anslutning från App Service med Key Vault. När du är klar har du en App Service-app som kommer åt både Key Vault och Cognitive Services via ett virtuellt Azure-nätverk (VNet) och ingen annan trafik tillåts komma åt dessa serverresurser. All trafik isoleras i ditt VNet med VNet-integrering och privata slutpunkter.

Som en tjänst med flera klienter delar utgående nätverkstrafik från din App Service till andra Azure-tjänster samma miljö med andra appar eller till och med andra prenumerationer. Även om själva trafiken kan krypteras kan vissa scenarier kräva en extra säkerhetsnivå genom att isolera backend-kommunikationen från annan nätverkstrafik. De här scenarierna är vanligtvis tillgängliga för stora företag med hög expertis, men de App Service inom räckhåll med VNet-integrering.

scenarioarkitektur

Med den här arkitekturen:

  • Offentlig trafik till backend-tjänsterna blockeras.
  • Utgående trafik från App Service dirigeras till det virtuella nätverket och kan nå backend-tjänsterna.
  • App Service kan utföra DNS-upplösning till servertjänster via privata DNS-zoner.

Det här får du lära dig:

  • Skapa ett VNet och undernät för App Service VNet-integrering
  • Skapa privata DNS-zoner
  • Skapa privata slutpunkter
  • Konfigurera VNet-integrering i App Service

Förutsättningar

Självstudien förutsätter att du har följt Självstudie: Säker Cognitive Service-anslutning från App Service med Key Vault och skapat språkdetektorappen.

Självstudien fortsätter att använda följande miljövariabler från föregående självstudie. Se till att du ställer in dem korrekt.

    groupName=myKVResourceGroup
    region=westeurope
    csResourceName=<cs-resource-name>
    appName=<app-name>
    vaultName=<vault-name>

Skapa VNet och undernät

  1. Skapa ett VNet. Ersätt <virtual-network-name> med ett unikt namn.

    # Save vnet name as variable for convenience
    vnetName=<virtual-network-name>
    
    az network vnet create --resource-group $groupName --location $region --name $vnetName --address-prefixes 10.0.0.0/16
    
  2. Skapa ett undernät för App Service VNet-integrering.

    az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name vnet-integration-subnet --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms
    

    För App Service rekommenderar vi att undernätet för VNet-integrering har minst ett CIDR-block /26 (se krav för undernät för VNet-integrering). /24 är mer än tillräckligt. --delegations Microsoft.Web/serverfarmsanger att undernätet är delegerat för App Service VNet-integrering .

  3. Skapa ett till undernät för de privata slutpunkterna.

    az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --disable-private-endpoint-network-policies
    

    För privata slutpunktsundernät måste du inaktivera nätverksprinciper för privata slutpunkter.

Skapa privata DNS-zoner

Eftersom dina Key Vault och Cognitive Services-resurser finns bakom privata slutpunktermåste du definiera privata DNS-zoner för dem. Dessa zoner används som värd för DNS-posterna för privata slutpunkter och gör att klienterna kan hitta servertjänster efter namn.

  1. Skapa två privata DNS-zoner, en för Cognitive Services resurs och en för ditt nyckelvalv.

    az network private-dns zone create --resource-group $groupName --name privatelink.cognitiveservices.azure.com
    az network private-dns zone create --resource-group $groupName --name privatelink.vaultcore.azure.net
    

    Mer information om de här inställningarna finns i DNS-konfiguration för privata slutpunkter i Azure

  2. Länka de privata DNS-zonerna till det virtuella nätverket.

    az network private-dns link vnet create --resource-group $groupName --name cognitiveservices-zonelink --zone-name privatelink.cognitiveservices.azure.com --virtual-network $vnetName --registration-enabled False
    az network private-dns link vnet create --resource-group $groupName --name vaultcore-zonelink --zone-name privatelink.vaultcore.azure.net --virtual-network $vnetName --registration-enabled False
    

Skapa privata slutpunkter

  1. Skapa en privat slutpunkt för nyckelvalvet i det privata slutpunktsundernätet för ditt VNet.

    # Get Cognitive Services resource ID
    csResourceId=$(az cognitiveservices account show --resource-group $groupName --name $csResourceName --query id --output tsv)
    
    az network private-endpoint create --resource-group $groupName --name securecstext-pe --location $region --connection-name securecstext-pc --private-connection-resource-id $csResourceId --group-id account --vnet-name $vnetName --subnet private-endpoint-subnet
    
  2. Skapa en DNS-zongrupp för Cognitive Services privata slutpunkten. DNS-zongruppen är en länk mellan den privata DNS-zonen och den privata slutpunkten. Den här länken hjälper dig att uppdatera den privata DNS-zonen automatiskt när det finns en uppdatering av den privata slutpunkten.

    az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securecstext-pe --name securecstext-zg --private-dns-zone privatelink.cognitiveservices.azure.com --zone-name privatelink.cognitiveservices.azure.com
    
  3. Blockera offentlig trafik till den Cognitive Services resursen.

    az rest --uri $csResourceId?api-version=2021-04-30 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json'
    
    # Repeat following command until output is "Succeeded"
    az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningState
    

    Anteckning

    Kontrollera att etableringstillståndet för ändringen är "Succeeded" . Sedan kan du observera beteendeändringen i exempelappen. Du kan fortfarande läsa in appen, men om du försöker klicka på knappen Identifiera visas ett HTTP 500 felmeddelande. Appen har förlorat anslutningen till Cognitive Services via det delade nätverket.

  4. Upprepa stegen ovan för nyckelvalvet.

    # Create private endpoint for key vault
    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    az network private-endpoint create --resource-group $groupName --name securekeyvault-pe --location $region --connection-name securekeyvault-pc --private-connection-resource-id $vaultResourceId --group-id vault --vnet-name $vnetName --subnet private-endpoint-subnet
    # Create DNS zone group for the endpoint
    az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securekeyvault-pe --name securekeyvault-zg --private-dns-zone privatelink.vaultcore.azure.net --zone-name privatelink.vaultcore.azure.net
    # Block public traffic to key vault
    az keyvault update --name $vaultName --default-action Deny
    
  5. Tvinga en omedelbar återbetingning av nyckelvalvsreferenserna i din app genom att återställa appinställningarna (mer information finns i Rotation).

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    

    Anteckning

    Återigen kan du observera beteendeändringen i exempelappen. Du kan inte längre läsa in appen eftersom den inte längre kan komma åt nyckelvalvsreferenserna. Appen har förlorat anslutningen till nyckelvalvet via det delade nätverket.

De två privata slutpunkterna är bara tillgängliga för klienter i det virtuella nätverk som du skapade. Du kan inte ens komma åt hemligheterna i nyckelvalvet via sidan Hemligheter i Azure Portal, eftersom portalen kommer åt dem via det offentliga Internet (se Hantera låsta resurser).

Konfigurera VNet-integrering i din app

  1. Skala upp appen till standardnivån. VNet-integrering kräver standardnivån eller högre (se Integrera din app med ett virtuellt Azure-nätverk).

    az appservice plan update --name $appName --resource-group $groupName --sku S1
    
  2. Inte relaterat till vårt scenario, men också viktigt, framtvinga HTTPS för inkommande begäranden.

    az webapp update --resource-group $groupName --name $appName --https-only
    
  3. Aktivera VNet-integrering i din app.

    az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnet
    

    Med VNet-integrering kan utgående trafik flöda direkt till det virtuella nätverket. Som standard dirigeras endast lokal IP-trafik som definierats i RFC-1918 till det virtuella nätverket, vilket är vad du behöver för de privata slutpunkterna. Information om hur du dirigerar all trafik till det virtuella nätverket finns i Hantera routning för integrering av virtuella nätverk. Routning av all trafik kan också användas om du vill dirigera Internettrafik via ditt VNet, till exempel via en Azure VNet NAT eller en Azure Firewall.

  4. Gå till i webbläsaren igen <app-name>.azurewebsites.net och vänta tills integreringen har verkställt. Om du får ett HTTP 500-fel väntar du några minuter och försöker igen. Om du kan läsa in sidan och få identifieringsresultat ansluter du till slutpunkten för Cognitive Services med nyckelvalvsreferenser.

    Anteckning

    Om http 500-fel fortsätter att visas efter lång tid kan det hjälpa att tvinga fram en refetch av nyckelvalvsreferenserna igen, så här:

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    

Hantera låsta resurser

Beroende på dina scenarier kanske du inte kan hantera de privata slutpunktsskyddade resurserna via Azure Portal, Azure CLI eller Azure PowerShell (till exempel Key Vault). Alla dessa verktyg gör REST API anrop för att få åtkomst till resurserna via det offentliga Internet och blockeras av din konfiguration. Här är några alternativ för att komma åt låsta resurser:

  • För Key Vault lägger du till den offentliga IP-adressen för den lokala datorn för att visa eller uppdatera de privata slutpunktsskyddade hemligheterna.
  • Om ditt lokala nätverk utökas till Det virtuella Azure-nätverket via en VPN-gateway eller ExpressRoutekan du hantera de privata slutpunktsskyddade resurserna direkt från ditt lokala nätverk.
  • Hantera de privata slutpunktsskyddade resurserna från en hoppserver i det virtuella nätverket.
  • Distribuera Cloud Shell till det virtuella nätverket.

Rensa resurser

I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:

az group delete --name $groupName

Det kan några minuter att köra kommandot.

Nästa steg