Zelfstudie: Back-endcommunicatie isoleren in Azure App Service met behulp van integratie van virtuele netwerken

In dit artikel configureert u een App Service-app met beveiligde, netwerk-geïsoleerde communicatie naar back-endservices. Het gebruikte voorbeeldscenario komt uit Tutorial: Secure Cognitive Service connection from App Service using Key Vault. Wanneer u klaar bent, hebt u een App Service-app die toegang heeft tot zowel Key Vault als Foundry Tools via een virtueel Azure-netwerk. Geen ander verkeer mag toegang hebben tot die back-endbronnen. Al het verkeer wordt geïsoleerd binnen uw virtuele netwerk via integratie van virtuele netwerken en privé-eindpunten.

In 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 via isolatie van back-endcommunicatie van ander netwerkverkeer. Deze scenario's zijn doorgaans toegankelijk voor grote ondernemingen met een hoog expertiseniveau, maar App Service brengt deze binnen handbereik met integratie van virtuele netwerken.

Diagram met de scenarioarchitectuur.

In 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.

Wat u leert:

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

Vereiste voorwaarden

Een virtueel netwerk en subnetten maken

  1. Maak een virtueel netwerk. Vervang <de naam> van het virtuele netwerk door een unieke naam.

    # 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. Maak een subnet voor de integratie van het virtuele App Service-netwerk.

    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
    

    Voor App Service is de aanbeveling dat het subnet voor integratie van het virtueel netwerk minimaal een CIDR-blok van /26 heeft. (Zie vereisten voor subnet voor virtuele netwerkintegratie.) /24 is meer dan voldoende. --delegations Microsoft.Web/serverfarms geeft 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 --private-endpoint-network-policies Disabled
    

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

Privé-DNS-zones maken

Omdat uw resources voor Key Vault en Foundry Tools zich achter privé-eindpunten bevinden, moet u hiervoor privé-DNS-zones 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 Foundry Tools-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.net
    

    Zie Azure Private Endpoint DNS-configuratie 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 Foundry Tools-resource.

    # 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. Maak een DNS-zonegroep voor het privé-eindpunt Foundry Tools. Een 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 het privé-eindpunt wordt bijgewerkt.

    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 Foundry Tools-resource blokkeren.

    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
    

    Opmerking

    Zorg ervoor dat de provisioningstatus 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 de knop Detecteren probeert te selecteren, krijgt u een HTTP 500 foutmelding. De app heeft de connectiviteit met de Foundry Tools-resource verbroken via het gedeelde netwerk.

  4. Herhaal de voorgaande stappen voor de sleutelkluis.

    # 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. Dwing een onmiddellijke refetch van de sleutelkluisverwijzingen in uw app af 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)"
    

    Opmerking

    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 Key Vault-verwijzingen. De app heeft de verbinding met de sleutelkluis verloren via het gedeelde netwerk.

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 vanaf de pagina Geheimen in Azure Portal, omdat de portal ze opent via het openbare internet. (Zie Vergrendelde bronnen 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 $planName --resource-group $groupName --sku S1
    
  2. HTTPS afdwingen voor binnenkomende aanvragen. (Deze stap is niet gerelateerd aan het huidige scenario, maar het is belangrijk.)

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

    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. Dit is wat u nodig hebt voor de privé-eindpunten. Zie Routering van virtuele netwerkintegratie beheren voor meer informatie over het routeren van al uw verkeer naar het virtuele netwerk. U kunt ook al het verkeer routeren als u internetverkeer wilt routeren via uw virtuele netwerk, via bijvoorbeeld Azure NAT Gateway of Azure Firewall.

  4. Ga in een browser naar <app-name>.azurewebsites.net en wacht totdat de integratie van kracht wordt. Als u een HTTP 500-fout krijgt, wacht u enkele minuten en probeert u het opnieuw. Als u de pagina kunt laden en detectieresultaten kunt ophalen, maakt u verbinding met het eindpunt Foundry Tools met behulp van key vault-verwijzingen.

    Opmerking

    Als u HTTP 500-fouten gedurende lange tijd blijft ophalen, kan dit helpen om opnieuw een verwijzing naar de sleutelkluis af te dwingen:

    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 bronnen beheren

Afhankelijk van uw scenario's kunt u de met een privé-eindpunt beveiligde resources mogelijk niet beheren via Azure Portal, Azure CLI of Azure PowerShell (bijvoorbeeld Key Vault). Deze hulpprogramma's maken allemaal REST API-aanroepen voor toegang tot de resources via het openbare internet en worden geblokkeerd door uw configuratie. Hier volgen enkele opties voor toegang tot de vergrendelde resources:

  • Voeg voor Key Vault het openbare IP-adres van uw lokale computer toe om de geheimen te bekijken of bij te werken die worden beveiligd door privé-eindpunten.
  • Als uw on-premises netwerk wordt uitgebreid naar het virtuele Azure-netwerk via een VPN-gateway of Azure ExpressRoute, kunt u de beveiligde privé-eindpuntresources rechtstreeks vanuit uw on-premises netwerk beheren.
  • Beheer de met een privé-eindpunt beveiligde resources vanaf een jumpserver in het virtuele netwerk.
  • Deploy Cloud Shell in het virtuele netwerk.

De hulpbronnen opschonen

In de voorgaande stappen hebt u in een resourcegroep Azure-resources gemaakt. Als u deze resources in de toekomst niet meer nodig hebt, verwijdert u de resourcegroep door de volgende opdracht uit te voeren in de Cloud Shell:

az group delete --name $groupName

Het uitvoeren van deze opdracht kan een minuut duren.

Volgende stappen