Delen via


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 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 Azure virtueel netwerk en geen ander verkeer toegang heeft 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, kunnen bepaalde scenario's een extra beveiligingsniveau vereisen door back-endcommunicatie van ander netwerkverkeer te isoleren. 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.

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 integratie van virtueel App Service-netwerk
  • Privé-DNS-zones maken
  • Privé-eindpunten maken
  • Integratie van virtuele netwerken configureren in App Service

Vereiste voorwaarden

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

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

    groupName=myKVResourceGroup
    region=westeurope
    csResourceName=<cs-resource-name>
    appName=<app-name>
    vaultName=<vault-name>
    planName=<plan-name>
    csResourceKVUri=<cs-resource-kv-uri>
    csKeyKVUri=<cs-key-kv-uri>

Virtueel netwerk en subnetten maken

  1. Maak een virtueel netwerk. Vervang <de naam> van het virtuele netwerk 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 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 wordt het subnet voor de integratie van /26 virtuele netwerken aanbevolen om minimaal een CIDR-blok te hebben (zie subnetvereisten 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 Key Vault- en Azure AI services-resources zich achter private-eindpunten bevinden, moet u private 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 Azure AI 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.net
    

    Zie Azure DNS-configuratie voor privé-eindpunten 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 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 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 Azure AI services-resource blokkeren.

    az rest --uri $csResourceId?api-version=2024-10-01 --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
    

    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 op de knop Detecteren klikt, krijgt u een HTTP 500 foutmelding. De app heeft de connectiviteit met de Azure AI services resource verbroken via het gedeelde netwerk.

  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 vernieuwen van de sleutelkluisverwijzingen in uw app door de instellingen van de app te resetten (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 via Secrets pagina in de Azure-portal, omdat de portal deze opent via het openbare internet (zie Beheer van de vergrendelde resources).

Integratie van virtuele netwerken configureren in uw app

  1. Schaal de app naar een ondersteunde prijscategorie (zie Integrate your app with an Azure virtual network).

    az appservice plan update --name $planName --resource-group $groupName --sku S1
    
  2. Niet gerelateerd aan ons scenario, maar ook belangrijk, dwing HTTPS af voor binnenkomende aanvragen.

    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 om al uw verkeer naar het virtuele netwerk te routeren. U kunt al het verkeer ook routeren 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 enkele 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 key vault-verwijzingen.

    Opmerking

    Als u na lange tijd HTTP 500-fouten blijft krijgen, kan het helpen om de verwijzingen naar de sleutelkluis opnieuw op te halen door een nieuwe ophaaloperatie af te dwingen, 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 bronnen beheren

Afhankelijk van uw scenario's kunt u de met privé-eindpunt beveiligde resources mogelijk niet beheren via de 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 beveiligde geheimen van het privé-eindpunt weer te geven of bij te werken.
  • Als uw on-premises netwerk wordt uitgebreid naar het Azure virtuele netwerk via een VPN-gateway of ExpressRoute, kunt u de beveiligde privé-eindpuntbronnen rechtstreeks vanuit uw on-premises netwerk beheren.
  • Beheer de resources die met een privé-eindpunt zijn beveiligd vanaf een jump server 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 kan een minuut duren voordat deze opdracht is uitgevoerd.

Volgende stappen