Zelfstudie: Back-endcommunicatie isoleren in Azure App Service met Virtual Network-integratie
In dit artikel configureert u een App Service-app met veilige, netwerkgeisoleerde communicatie met back-endservices. Het voorbeeldscenario dat wordt gebruikt, is in Zelfstudie: Cognitive Service-verbindingbeveiligen vanuit App Service met behulp Key Vault . Wanneer u klaar bent, hebt u een App Service-app die toegang heeft tot zowel Key Vault als Cognitive Services via een virtueel Azure-netwerk (VNet), en geen ander verkeer toegang heeft tot deze back-endbronnen. Al het verkeer wordt geïsoleerd binnen uw VNet met behulp van VNet-integratie en privé-eindpunten.
Als service met meerdere tenants deelt uitgaand netwerkverkeer van uw App Service-app naar andere Azure-services dezelfde omgeving met andere apps of zelfs andere abonnementen. Hoewel het verkeer zelf kan worden versleuteld, is voor bepaalde scenario's mogelijk een extra beveiligingsniveau vereist door back-endcommunicatie te isoleren van ander netwerkverkeer. Deze scenario's zijn doorgaans toegankelijk voor grote ondernemingen met een hoge mate van expertise, maar App Service binnen bereik brengen met VNet-integratie.

Met deze architectuur:
- Openbaar verkeer naar de back-endservices wordt geblokkeerd.
- Uitgaand verkeer van App Service wordt doorgeleid naar het VNet en kan de back-endservices bereiken.
- App Service kan DNS-resolutie uitvoeren voor de back-endservices via de privé-DNS-zones.
U leert het volgende:
- Een VNet en subnetten maken voor App Service VNet-integratie
- Privé-DNS-zones maken
- Privé-eindpunten maken
- VNet-integratie configureren in App Service
Vereisten
In de zelfstudie wordt ervan uitgenomen dat u de zelfstudie: Secure Cognitive Service connection from App Service using Key Vault hebt gevolgd en de taaldetector-app hebt gemaakt.
In de zelfstudie worden de volgende omgevingsvariabelen uit de vorige zelfstudie gebruikt. Zorg ervoor dat u ze goed in stelt.
groupName=myKVResourceGroup
region=westeurope
csResourceName=<cs-resource-name>
appName=<app-name>
vaultName=<vault-name>
VNet en subnetten maken
Maak een VNet. Vervang <virtual-network-name> door een unieke naam.
# 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/16Maak een subnet voor de App Service VNet-integratie.
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/serverfarmsVoor App Service wordt het VNet-integratiesubnet aanbevolen om minimaal een CIDR-blok te hebben (zie Vereisten voor
/26VNet-integratiesubnet)./24is meer dan voldoende.--delegations Microsoft.Web/serverfarmsgeeft aan dat het subnet is gedelegeerd voor App Service VNet-integratie.Maak nog een subnet voor de privé-eindpunten.
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-policiesVoor privé-eindpuntsubnetten moet u netwerkbeleid voor privé-eindpunten uitschakelen.
Privé-DNS-zones maken
Omdat uw Key Vault en Cognitive Services zich achter privé-eindpunten bevinden,moet u er privé-DNS-zones voor definiëren. Deze zones worden gebruikt om de DNS-records voor privé-eindpunten te hosten en de clients toe te staan de back-endservices op naam te vinden.
Maak twee privé-DNS-zones, één voor uw Cognitive Services resource en één voor uw sleutelkluis.
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.netZie Azure Private Endpoint DNS configuration (DNS-configuratie van Azure-privé-eindpunt) voor meer informatie over deze instellingen
Koppel de privé-DNS-zones aan het VNet.
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
Privé-eindpunten maken
Maak in het subnet van het privé-eindpunt van uw VNet een privé-eindpunt voor uw sleutelkluis.
# 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-subnetMaak een DNS-zonegroep voor het Cognitive Services privé-eindpunt. DNS-zonegroep is een koppeling tussen de privé-DNS-zone en het privé-eindpunt. Met deze koppeling kunt u de privé-DNS-zone automatisch bijwerken wanneer er een update is voor het privé-eindpunt.
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.comOpenbaar verkeer naar de Cognitive Services blokkeren.
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.provisioningStateNotitie
Zorg ervoor dat de inrichtingstoestand van uw wijziging
"Succeeded"is. Vervolgens kunt u de gedragswijziging in de voorbeeld-app observeren. U kunt de app nog steeds laden, maar als u op de knop Detecteren klikt, wordt er eenHTTP 500foutbericht weergegeven. De app heeft geen verbinding meer met de Cognitive Services via de gedeelde netwerken.Herhaal de bovenstaande stappen voor de sleutelkluis.
# 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 DenyForceer een onmiddellijke refetch van de sleutelkluisverwijzingen in uw app door de app-instellingen opnieuw in te passen (zie Rotatie voor meer informatie).
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)"Notitie
Ook hier ziet u de gedragswijziging in de voorbeeld-app. U kunt de app niet meer laden omdat deze geen toegang meer heeft tot de sleutelkluisverwijzingen. De app heeft geen verbinding meer met de sleutelkluis via de gedeelde netwerken.
De twee privé-eindpunten zijn alleen toegankelijk voor clients in het VNet dat u hebt gemaakt. U hebt zelfs geen toegang tot de geheimen in de sleutelkluis via de pagina Geheimen in de Azure Portal, omdat de portal er toegang toe heeft via het openbare internet (zie De vergrendelde resources beheren).
VNet-integratie configureren in uw app
Schaal de app op naar de Standard-laag. Voor VNet-integratie is de Standard-laag of hoger vereist (zie Uw app integreren met een virtueel Azure-netwerk).
az appservice plan update --name $appName --resource-group $groupName --sku S1Niet gerelateerd aan ons scenario, maar ook belangrijk, HTTPS afdwingen voor binnenkomende aanvragen.
az webapp update --resource-group $groupName --name $appName --https-onlySchakel VNet-integratie in uw app in.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetMet VNet-integratie kan uitgaand verkeer rechtstreeks naar het VNet stromen. Standaard wordt alleen lokaal IP-verkeer dat is gedefinieerd in RFC-1918, gerouteerd naar het VNet. Dit is wat u nodig hebt voor de privé-eindpunten. Zie Manage virtual network integration routing (Virtuele netwerkintegratieroutering beheren) als u al uw verkeer naar het VNet wilt routeren. Al het verkeer kan ook worden omgeleid als u internetverkeer wilt routeren via uw VNet, zoals via een Azure VNet NAT of een Azure Firewall.
Navigeer in de browser
<app-name>.azurewebsites.netopnieuw naar en wacht tot de integratie van kracht is. Als er een HTTP 500-fout wordt weergegeven, wacht u een paar minuten en probeert u het opnieuw. Als u de pagina kunt laden en detectieresultaten kunt krijgen, maakt u verbinding met het Cognitive Services eindpunt met key vault-verwijzingen.Notitie
Als u na lange tijd HTTP 500-fouten blijft krijgen, kan het helpen om het opnieuw op te halen van de sleutelkluisverwijzingen, zoals:
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)"
De vergrendelde resources beheren
Afhankelijk van uw scenario's kunt u mogelijk de met privé-eindpunt beveiligde resources niet beheren via de Azure Portal, Azure CLI of Azure PowerShell (bijvoorbeeld Key Vault). Deze hulpprogramma's maken REST API toegang tot de resources via het openbare internet en worden geblokkeerd door uw configuratie. Hier zijn enkele opties voor toegang tot de vergrendelde resources:
- Voeg Key Vault openbare IP-adres van uw lokale computer toe om de geheimen die zijn beveiligd met een privé-eindpunt weer te geven of bij te werken.
- Als uw on-premises netwerk wordt uitgebreid naar het Azure-VNet via een VPN-gateway of ExpressRoute,kunt u de met privé-eindpunt beveiligde resources rechtstreeks vanuit uw on-premises netwerk beheren.
- Beheer de met privé-eindpunt beveiligde resources vanaf een jumpserver in het VNet.
- Implementeer Cloud Shell in het VNet.
Resources opschonen
In de voorgaande stappen hebt u Azure-resources in een resourcegroep gemaakt. Als u deze resources niet meer nodig denkt te hebben, verwijdert u de resourcegroep door de volgende opdracht in Cloud Shell uit te voeren:
az group delete --name $groupName
Het kan een minuut duren voordat deze opdracht is uitgevoerd.