Zelfstudie: Back-endcommunicatie isoleren in Azure App Service met Virtual Network-integratie

In dit artikel configureert u een App Service-app met beveiligde, netwerk-geïsoleerde communicatie met back-endservices. Het voorbeeldscenario dat wordt gebruikt, vindt u in Zelfstudie: Secure Cognitive Service-verbinding van App Service met behulp van Key Vault. Wanneer u klaar bent, hebt u een App Service-app die toegang heeft tot zowel Key Vault- als Azure AI-services via een virtueel Azure-netwerk. Er is geen ander verkeer toegestaan om toegang te krijgen tot deze back-endresources. Al het verkeer wordt geïsoleerd binnen uw virtuele netwerk met behulp van integratie van virtuele netwerken en privé-eindpunten.

Als een 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, vereisen bepaalde scenario's mogelijk een extra beveiligingsniveau door back-endcommunicatie te isoleren van ander netwerkverkeer. Deze scenario's zijn doorgaans toegankelijk voor grote ondernemingen met een hoog expertiseniveau, maar App Service het binnen handbereik brengt met de integratie van virtuele netwerken.

scenarioarchitectuur

Met deze architectuur:

  • Openbaar verkeer naar de back-endservices wordt geblokkeerd.
  • Uitgaand verkeer van App Service wordt doorgestuurd naar het virtuele netwerk en kan de back-endservices bereiken.
  • App Service kan DNS-omzetting uitvoeren naar de back-endservices via de privé-DNS-zones.

U leert het volgende:

  • Een virtueel netwerk en subnetten maken voor App Service virtuele netwerkintegratie
  • Privé-DNS-zones maken
  • Privé-eindpunten maken
  • Integratie van virtuele netwerken configureren in App Service

Vereisten

In de zelfstudie wordt ervan uitgegaan dat u de Zelfstudie: Cognitive Service-verbinding beveiligen vanuit App Service met behulp van Key Vault hebt gevolgd en de taaldetectie-app hebt gemaakt.

In de zelfstudie worden de volgende omgevingsvariabelen uit de vorige zelfstudie gebruikt. Zorg ervoor dat u ze goed instelt.

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

Virtueel netwerk en subnetten maken

  1. Maak een virtueel netwerk. 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/16
    
  2. Maak een subnet voor de App Service virtuele netwerkintegratie.

    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
    

    Voor App Service wordt het subnet voor integratie van virtuele netwerken aanbevolen om minimaal een CIDR-blok van /26 te hebben (zie Vereisten voor het subnet voor integratie van virtuele netwerken). /24 is meer dan voldoende. --delegations Microsoft.Web/serverfarmsgeeft aan dat het subnet is gedelegeerd voor App Service virtuele netwerkintegratie.

  3. Maak een ander 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-policies true
    

    Voor subnetten van privé-eindpunten moet u netwerkbeleid voor privé-eindpunten uitschakelen.

Privé-DNS-zones maken

Omdat uw Key Vault- en Azure AI-servicesresources zich achter privé-eindpunten bevinden, moet u privé-DNS-zones voor hen definiëren. Deze zones worden gebruikt om de DNS-records voor privé-eindpunten te hosten en de clients in staat te stellen de back-endservices op naam te vinden.

  1. Maak twee privé-DNS-zones, één voor uw Azure AI-servicesresource 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.net
    

    Zie DNS-configuratie van Azure-privé-eindpunt voor meer informatie over deze instellingen.

  2. Koppel de privé-DNS-zones aan het virtuele netwerk.

    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

  1. Maak in het subnet van het privé-eindpunt van uw virtuele netwerk een privé-eindpunt voor uw 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
    
  2. Maak een DNS-zonegroep voor het privé-eindpunt van Azure AI-services. 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 voor het privé-eindpunt is.

    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. Openbaar verkeer naar de Azure AI-servicesresource 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.provisioningState
    

    Notitie

    Zorg ervoor dat de inrichtingsstatus van uw wijziging is "Succeeded". 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, krijgt u een HTTP 500 foutmelding. De verbinding van de app met de Azure AI-servicesresource via het gedeelde netwerk is verbroken.

  4. 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 Deny
    
  5. Forceer een onmiddellijke herverwijzing van de sleutelkluisverwijzingen in uw app door de app-instellingen opnieuw in te stellen (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

    Nogmaals, u kunt de gedragswijziging in de voorbeeld-app observeren. U kunt de app niet meer laden omdat deze geen toegang meer heeft tot de verwijzingen naar de sleutelkluis. De verbinding van de app met de sleutelkluis via het gedeelde netwerk is verbroken.

De twee privé-eindpunten zijn alleen toegankelijk voor clients in het virtuele netwerk 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 ze opent via het openbare internet (zie De vergrendelde resources beheren).

Integratie van virtuele netwerken configureren in uw app

  1. Schaal de app omhoog naar een ondersteunde prijscategorie (zie Uw app integreren met een virtueel Azure-netwerk).

    az appservice plan update --name $appName --resource-group $groupName --sku S1
    
  2. Niet gerelateerd aan ons scenario, maar ook belangrijk, https afdwingen voor inkomende aanvragen.

    az webapp update --resource-group $groupName --name $appName --https-only
    
  3. Schakel de integratie van virtuele netwerken in voor uw app.

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

    Dankzij de integratie van een virtueel netwerk kan uitgaand verkeer rechtstreeks naar het virtuele netwerk stromen. Standaard wordt alleen lokaal IP-verkeer dat is gedefinieerd in RFC-1918 doorgestuurd naar het virtuele netwerk, wat u nodig hebt voor de privé-eindpunten. Zie Routering van virtuele netwerkintegratie beheren om al uw verkeer naar het virtuele netwerk te routeren. Routering van al het verkeer kan ook worden gebruikt als u internetverkeer wilt routeren via uw virtuele netwerk, zoals via een Azure Virtual Network NAT of een Azure Firewall.

  4. Navigeer in de browser opnieuw naar <app-name>.azurewebsites.net en wacht totdat de integratie van kracht wordt. Als u een HTTP 500-fout krijgt, wacht u een paar minuten en probeert u het opnieuw. Als u de pagina kunt laden en detectieresultaten kunt ophalen, maakt u verbinding met het Azure AI-services-eindpunt met sleutelkluisverwijzingen.

    Notitie

    Als na lange tijd HTTP 500-fouten blijven optreden, kan het helpen om de verwijzingen naar de sleutelkluis opnieuw te verleggen, 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 de met het privé-eindpunt beveiligde resources mogelijk niet beheren via de Azure Portal, Azure CLI of Azure PowerShell (bijvoorbeeld Key Vault). Deze hulpprogramma's doen allemaal REST API-aanroepen om toegang te krijgen tot de resources via het openbare internet en worden geblokkeerd door uw configuratie. Hier volgen enkele opties voor toegang tot de vergrendelde resources:

  • Voor Key Vault voegt u het openbare IP-adres van uw lokale computer toe om de met een privé-eindpunt beveiligde geheimen weer te geven of bij te werken.
  • Als uw on-premises netwerk wordt uitgebreid naar het virtuele Azure-netwerk via een VPN-gateway of ExpressRoute, kunt u de met het privé-eindpunt beveiligde resources rechtstreeks vanuit uw on-premises netwerk beheren.
  • Beheer de met het privé-eindpunt beveiligde resources vanaf een jumpserver in het virtuele netwerk.
  • Implementeer Cloud Shell in het virtuele netwerk.

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.

Volgende stappen