Självstudie: Isolera serverdelskommunikation i Azure App Service med Virtual Network integration
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 Självstudie: 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 har åtkomst till både Key Vault- och Azure AI-tjänster via ett virtuellt Azure-nätverk, och ingen annan trafik tillåts komma åt dessa serverdelsresurser. All trafik isoleras i ditt virtuella nätverk med hjälp av integrering av virtuella nätverk och privata slutpunkter.
Som en tjänst med flera klientorganisationer delar utgående nätverkstrafik från din App Service-app 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 serverdelskommunikationen från annan nätverkstrafik. Dessa scenarier är vanligtvis tillgängliga för stora företag med hög expertisnivå, men App Service gör det inom räckhåll med integrering av virtuella nätverk.
Med 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å serverdelstjänsterna.
- App Service kan utföra DNS-matchning till serverdelstjänsterna via de privata DNS-zonerna.
Det här får du lära dig:
- Skapa ett virtuellt nätverk och undernät för App Service integrering av virtuella nätverk
- Skapa privata DNS-zoner
- Skapa privata slutpunkter
- Konfigurera integrering av virtuella nätverk i App Service
Förutsättningar
Självstudien förutsätter att du har följt självstudien: Säker Cognitive Service-anslutning från App Service med hjälp av Key Vault och skapat språkidentifieringsappen.
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 virtuella nätverk och undernät
Skapa ett virtuellt nätverk. 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
Skapa ett undernät för integrering av App Service virtuella nätverk.
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 --disable-private-endpoint-network-policies false
För App Service rekommenderas undernätet för integrering av virtuella nätverk att minst ha ett CIDR-block (se Krav för undernät för integrering av
/26
virtuella nätverk)./24
är mer än tillräckligt.--delegations Microsoft.Web/serverfarms
anger att undernätet har delegerats för App Service integrering av virtuella nätverk.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 --disable-private-endpoint-network-policies true
För privata slutpunktsundernät måste du inaktivera nätverksprinciper för privata slutpunkter.
Skapa privata DNS-zoner
Eftersom dina Key Vault- och Azure AI-tjänstresurser ligger 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 att klienterna kan hitta serverdelstjänsterna efter namn.
Skapa två privata DNS-zoner, en för din Azure AI-tjänstresurs 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 privat slutpunkt i Azure
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
I det privata slutpunktsundernätet för ditt virtuella nätverk skapar du en privat slutpunkt för din Cognitive Service.
# 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
Skapa en DNS-zongrupp för den privata slutpunkten för Azure AI-tjänster. DNS-zongrupp ä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
Blockera offentlig trafik till Azure AI-tjänstresursen.
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 se beteendeförändringen i exempelappen. Du kan fortfarande läsa in appen, men om du försöker klicka på knappen Identifiera får du ettHTTP 500
felmeddelande. Appen har förlorat anslutningen till Azure AI-tjänstresursen via det delade nätverket.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
Framtvinga en omedelbar refetch av key vault-referenser 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 se beteendeförändringen i exempelappen. Du kan inte längre läsa in appen eftersom den inte längre kan komma åt key vault-referenser. 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 via sidan Hemligheter i Azure Portal, eftersom portalen kommer åt dem via det offentliga Internet (se Hantera låsta resurser).
Konfigurera integrering av virtuella nätverk i din app
Skala upp appen till en prisnivå som stöds (se Integrera din app med ett virtuellt Azure-nätverk).
az appservice plan update --name $appName --resource-group $groupName --sku S1
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
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
Integrering av virtuella nätverk gör att utgående trafik kan 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 virtuella nätverk, till exempel via en Azure Virtual Network NAT eller en Azure Firewall.
I webbläsaren navigerar du till
<app-name>.azurewebsites.net
igen 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 Azure AI-tjänsternas slutpunkt med key vault-referenser.Anteckning
Om http 500-fel fortsätter att visas efter en längre tid kan det hjälpa till att framtvinga en refetch av key vault-referenser 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 följer 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 de privata slutpunktsskyddade hemligheterna.
- Om ditt lokala nätverk utökas till det virtuella Azure-nätverket via en VPN-gateway eller ExpressRoute kan du hantera de privata slutpunktsskyddade resurserna direkt från ditt lokala nätverk.
- Hantera privata slutpunktsskyddade resurser 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.