Självstudie: Isolera serverdelskommunikation i Azure App Service med hjälp av integrering av virtuella nätverk

I den här artikeln konfigurerar du en App Service-app med säker, nätverksisolerad kommunikation till serverdelstjänster. Exempelscenariot som används är i Tutorial: Säker Cognitive Service-anslutning från App Service med hjälp av Key Vault. När du är klar har du en App Service-app som kommer åt både Key Vault och Foundry Tools via ett virtuellt Azure-nätverk. Ingen annan trafik tillåts komma åt dessa serverdelsresurser. All trafik isoleras i ditt virtuella nätverk via integrering av virtuella nätverk och privata slutpunkter.

I en tjänst med flera klientorganisationer delar utgående nätverkstrafik från App Service-appen 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å via isolering av backend-kommunikation från annan nätverkstrafik. Dessa scenarier är vanligtvis tillgängliga för stora företag med hög expertis, men App Service gör det inom räckhåll med integrering av virtuella nätverk.

Diagram som visar scenarioarkitekturen.

I den här arkitekturen:

  • Offentlig trafik till serverdelstjänsterna blockeras.
  • Utgående trafik från App Service dirigeras till det virtuella nätverket och kan nå bakändstjänsterna.
  • App Service kan utföra DNS-upplösning till back-end-tjänsterna via de privata DNS-zonerna.

Det här lär du dig:

  • Skapa ett virtuellt nätverk och undernät för integrering av virtuella App Service-nätverk
  • Skapa privata DNS-zoner
  • Skapa privata slutpunkter
  • Konfigurera integrering av virtuella nätverk i App Service

Förutsättningar

Skapa ett virtuellt nätverk och undernät

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

    # Save the virtual network name as a 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 integreringen av det virtuella Nätverket i App Service.

    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 --private-endpoint-network-policies Enabled
    

    För App Service rekommenderar vi att det virtuella nätverksintegreringsundernätet har ett CIDR-block /26 på minst. (Se Krav för integrering av undernät för virtuellt nätverk.) /24 är mer än tillräckligt. --delegations Microsoft.Web/serverfarms anger att undernätet är delegerat för integrering av virtuella App Service-nätverk.

  3. Skapa ett annat 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 --private-endpoint-network-policies Disabled
    

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

Skapa privata DNS-zoner

Eftersom dina Key Vault- och Foundry Tools-resurser finns bakom privata slutpunkter må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 det möjligt för klienterna att hitta serverdelstjänsterna efter namn.

  1. Skapa två privata DNS-zoner, en för din Foundry Tools-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. I det privata slutpunktsundernätet för ditt virtuella nätverk skapar du en privat slutpunkt för din Foundry Tools-resurs.

    # Get Foundry Tools 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 den privata slutpunkten Foundry Tools. En DNS-zongrupp är en länk mellan den privata DNS-zonen och den privata slutpunkten. Den här länken hjälper dig att automatiskt uppdatera den privata DNS-zonen 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 Foundry Tools-resursen.

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

    Anmärkning

    Kontrollera att etableringstillståndet för ändringen är "Succeeded". Du kan sedan observera beteendeförändringen i exempelappen. Du kan fortfarande läsa in appen, men om du försöker välja knappen Identifiera får du ett HTTP 500 fel. Appen har förlorat sin anslutning till Foundry Tools-resursen via det delade nätverket.

  4. Upprepa föregående steg för nyckelvalvet.

    # Create a private endpoint for the 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 a 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 the key vault
    az keyvault update --name $vaultName --default-action Deny
    
  5. Tvinga en omedelbar återhämtning 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)"
    

    Anmärkning

    Återigen kan du observera beteendeförändringen i exempelappen. Du kan inte längre läsa in appen eftersom den inte längre kan komma åt key vault-referenserna. Appen har förlorat sin anslutning till nyckelvalvet via det delade nätverket.

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

Konfigurera integrering av virtuella nätverk i din app

  1. Skala upp appen till en prisnivå som stöds. (Se Integrera din app med ett virtuellt Azure-nätverk.)

    az appservice plan update --name $planName --resource-group $groupName --sku S1
    
  2. Framtvinga HTTPS för inkommande begäranden. (Det här steget är inte relaterat till det aktuella scenariot, men det är viktigt.)

    az webapp update --resource-group $groupName --name $appName --https-only
    
  3. Aktivera integrering av virtuella nätverk i din app.

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

    Med integrering av virtuella nätverk kan utgående trafik flöda direkt till det virtuella nätverket. Som standard dirigeras endast lokal IP-trafik som definieras 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. Du kan också dirigera all trafik om du vill dirigera Internettrafik via ditt virtuella nätverk, till exempel Via Azure NAT Gateway eller Azure Firewall.

  4. I en webbläsare går du till <app-name>.azurewebsites.net och väntar tills integreringen börjar gälla. 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 Foundry Tools-slutpunkten med hjälp av nyckelvalvreferenser.

    Anmärkning

    Om du får HTTP 500-fel under lång tid kan det hjälpa att framtvinga en refetch av key vault-referenserna igen:

    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 de låsta resurserna

Beroende på dina scenarier kanske du inte kan hantera de privata slutpunktsskyddade resurserna via Azure-portalen, Azure CLI eller Azure PowerShell (till exempel Key Vault). Dessa verktyg gör alla 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 de låsta resurserna:

  • För Key Vault lägger du till den offentliga IP-adressen för den lokala datorn för att visa eller uppdatera hemligheterna som skyddas av privata slutpunkter.
  • Om ditt lokala nätverk utökas till det virtuella Azure-nätverket via en VPN-gateway eller Azure ExpressRoute kan du hantera privata slutpunktsskyddade resurser direkt från ditt lokala nätverk.
  • Hantera resurser med skyddade slutpunkter från en jump server i det virtuella nätverket.
  • Distribuera Cloud Shell i det virtuella nätverket.

Rensa resurser

I föregående steg skapade du Azure resurser i en resursgrupp. Om du inte förväntar dig att behöva 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 ta en minut att köra det här kommandot.

Nästa steg