Zelfstudie: Een beveiligde N-tier-app maken in Azure App Service

Veel toepassingen hebben meer dan één onderdeel. U hebt bijvoorbeeld een front-end die openbaar toegankelijk is en verbinding maakt met een back-end-API of web-app. De back-endbronnen kunnen verbinding maken met een database, opslagaccount, sleutelkluis, een andere virtuele machine of een combinatie van deze resources. Deze architectuur vormt de basis van een N-tier-toepassing. Het is belangrijk dat toepassingen zoals deze zijn ontworpen om back-endresources zo veel mogelijk te beveiligen.

In deze zelfstudie wordt beschreven hoe u een beveiligde N-laag-toepassing implementeert met een front-endweb-app die verbinding maakt met een andere netwerk-geïsoleerde web-app. Al het verkeer wordt geïsoleerd binnen uw Azure Virtual Network met behulp van Virtual Network-integratie en private-eindpunten. Zie voor uitgebreidere richtlijnen met andere scenario's:

In deze handleiding leert u:

  • Een virtueel netwerk en subnetten maken voor integratie van virtueel App Service-netwerk
  • Privé-DNS-zones en privé-eindpunten maken
  • Integratie van virtuele netwerken configureren in App Service
  • Basisverificatie uitschakelen in App Service
  • Continu implementeren in een vergrendelde back-end-web-app

Vereisten

In de zelfstudie worden twee voorbeeld-Node.js-apps gebruikt die worden gehost op GitHub. Als u nog geen GitHub-account hebt, maakt u gratis een account.

Als u geen Azure-account hebt, maak dan een gratis account aan voordat u begint.

Om deze tutorial te voltooien:

De scenarioarchitectuur controleren

In deze zelfstudie ziet u hoe u een architectuur configureert die wordt geïllustreerd in het volgende diagram. Het scenario vertegenwoordigt een van de mogelijke N-tier-configuraties in App Service. U kunt de concepten in deze zelfstudie gebruiken om complexere N-tier-apps te bouwen.

Diagram van de architectuur voor een App Service met N-laag, inclusief integratie van virtuele netwerken met een front-end-app en privé-eindpunt in de back-end.

  • De architectuur heeft een virtueel netwerk dat twee subnetten bevat. Eén subnet is geïntegreerd met de front-endweb-app en het andere subnet heeft een privé-eindpunt voor de back-endweb-app. Het virtuele netwerk blokkeert al het binnenkomende netwerkverkeer, met uitzondering van verkeer dat is gericht op de geïntegreerde front-end-app.

  • Een front-endweb-app is geïntegreerd in het virtuele netwerk en toegankelijk via het openbare internet.

  • Een back-endweb-app is alleen toegankelijk via het privé-eindpunt in het virtuele netwerk.

  • Een privé-eindpunt kan worden geïntegreerd met de back-endweb-app en maakt de web-app toegankelijk via een privé-IP-adres.

  • Met een Privé-DNS zone kunt u een DNS-naam omzetten in het IP-adres van het privé-eindpunt.

Notitie

Als u integratie van virtuele netwerken en privé-eindpunten wilt configureren, hebt u de laag Basic van Azure App Service of een hogere laag nodig. De gratis laag biedt geen ondersteuning voor deze functies.

Het scenario in deze zelfstudie biedt het volgende gedrag:

  • Openbaar verkeer naar de back-end-app wordt geblokkeerd.
  • Uitgaand verkeer van App Service routeert naar het virtuele netwerk en kan de back-end-app bereiken.
  • App Service kan DNS-omzetting uitvoeren naar de back-end-app.

De twee web-apps maken

U hebt twee App Service-web-apps nodig, één voor de front-end en één voor de back-end. De apps kunnen worden uitgevoerd op dezelfde regiolocatie. Gebruik ten minste de laag Basic van Azure App Service om integratie van virtuele netwerken in te stellen en met privé-eindpunten te werken. U configureert de integratie van het virtuele netwerk en andere instellingen later.

  1. Maak een resourcegroep om alle resources voor deze zelfstudie te beheren.

    Stel de <resource-group> plaatsaanduiding in op de naam van uw nieuwe resourcegroep, zoals zava-resources. Stel de <region-location> plaatsaanduiding in op de regio voor uw nieuwe resourcegroep, zoals eastus.

    # Define variables for the resource group name and region location
    resourceGroupName=<resource-group>
    regionLocation=<region-location>
    
    # Create the resource group
    az group create --name $resourceGroupName --location $regionLocation
    

    Zie de opdrachtreferentie az group create voor meer informatie.

  2. Maak een App Service-plan voor uw resources.

    Stel de <app-service-plan> plaatsaanduiding in op de naam van uw nieuwe App Service-plan, zoals zava-app-service-plan.

    In het voorbeeld van de zelfstudie wordt de --sku parameter ingesteld op P1V3 (Premium V3). U kunt deze waarde gebruiken of een andere SKU opgeven. De SKU moet de vereiste netwerkfuncties voor deze zelfstudie ondersteunen. Selecteer de Basic-laag of hoger.

    # Define a variable for the App Service plan name
    appServicePlanName=<app-service-plan>
    
    # Create the App Service plan
    az appservice plan create --name $appServicePlanName --resource-group $resourceGroupName --is-linux --location $regionLocation --sku P1V3
    

    Zie de opdrachtreferentie az appservice plan create voor meer informatie.

  3. Ontwikkel de front-end- en back-end-webapps.

    In het zelfstudievoorbeeld worden twee voorbeeld-Node.js-apps gemaakt, waarbij de runtimeversie van de taal NODE:24-lts is. Als u liever uw eigen apps gebruikt, stelt u de --runtime parameterwaarde <language-version> dienovereenkomstig in. U kunt de az webapp list-runtimes opdracht uitvoeren voor de lijst met beschikbare runtimes:

    az webapp list-runtimes
    

    Stel de <frontend-app-name> placeholder in op de naam van uw nieuwe frontend-webapp, zoals zava-frontend-app. De naam moet globaal uniek zijn en bestaan uit geldige tekens (a-z, 0-9, -). Op dezelfde manier stelt u de <backend-app-name> placeholder in op de naam van uw nieuwe backendweb-app, zoals zava-backend-app.

    # Define variables for the App Service web app names
    frontendAppName=<frontend-app-name>
    backendAppName=<backend-app-name>
    
    # Create the web apps
    az webapp create --name $frontendAppName --resource-group $resourceGroupName --plan $appServicePlanName --runtime "NODE:24-lts"
    az webapp create --name $backendAppName  --resource-group $resourceGroupName --plan $appServicePlanName --runtime "NODE:24-lts"
    

    Zie de opdrachtreferentie az webapp create voor meer informatie.

De netwerkinfrastructuur maken

De infrastructuur van het virtuele netwerk bestaat uit de volgende resources:

  • Een Azure Virtual Network-exemplaar
  • Een subnet voor de integratie van het virtuele App Service-netwerk
  • Een ander subnet voor het privé-eindpunt
  • Een Azure Privé-DNS-zone
  • Een privé-eindpunt
  1. Maak een virtueel netwerk van Azure.

    Stel de <virtual-network-name> tijdelijke aanduiding in op de naam voor uw nieuwe virtuele netwerk, zoals zava-virtual-network. De naam moet wereldwijd uniek zijn.

    # Define a variable for the virtual network name
    virtualNetworkName=<virtual-network-name>
    
    # Create the virtual network
    az network vnet create --resource-group $resourceGroupName --location $regionLocation --name $virtualNetworkName --address-prefixes 10.0.0.0/16
    

    Zie de opdrachtreferentie az network vnet create voor meer informatie.

  2. Maak een subnet voor de integratie van het virtuele App Service-netwerk.

    Stel de <network-integration-subnet> tijdelijke aanduiding in op de naam voor uw nieuwe subnet dat ondersteuning biedt voor de integratie van virtuele netwerken, zoals zava-integration-subnet.

    Voor App Service wordt aanbevolen dat het subnet voor integratie met het virtuele netwerk minimaal een CIDR-blok van /26 heeft. /24 is meer dan voldoende. --delegations Microsoft.Web/serverfarms geeft op dat het subnet is gedelegeerd voor App Service-integratie met een virtueel netwerk.

    # Define a variable for the integration subnet name
    networkIntegrationSubnet=<network-integration-subnet>
    
    # Create the subnet for virtual network integration
    az network vnet subnet create --resource-group $resourceGroupName --vnet-name $virtualNetworkName --name $networkIntegrationSubnet \
       --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms \
       --disable-private-endpoint-network-policies false
    

    Zie de opdrachtreferentie az network vnet subnet create voor meer informatie.

  3. Maak een ander subnet voor de privé-eindpunten.

    Stel de <private-endpoint-subnet> tijdelijke aanduiding in op de naam voor uw nieuwe subnet dat ondersteuning biedt voor het privé-eindpunt, zoals zava-endpoint-subnet.

    # Define a variable for the private endpoint subnet name
    privateEndpointSubnet=<private-endpoint-subnet>
    
    # Create the subnet for the private endpoint
    az network vnet subnet create --resource-group $resourceGroupName --vnet-name $virtualNetworkName --name $privateEndpointSubnet \
       --address-prefixes 10.0.1.0/24 \
       --disable-private-endpoint-network-policies true
    

    Voor subnetten van privé-eindpunten moet u het netwerkbeleid voor privé-eindpunten uitschakelen door de --disable-private-endpoint-network-policies vlag in te stellen op true. Zie de optionele parameters voor de opdracht az network vnet subnet create voor meer informatie.

    Notitie

    De --private-endpoint-network-policies vlag kan binnenkort worden vervangen door de --disable-private-endpoint-network-policies vlag.

  4. Maak de Azure Privé-DNS-zone.

    Stel de tijdelijke aanduiding <private-zone-name> in op de naam van de nieuwe Privé-DNS-zone, zoals zava-private.azurewebsites.net.

    # Define a variable for the Private DNS zone
    privateDNSZone=<private-zone-name>
    
    # Create the Private DNS zone
    az network private-dns zone create --resource-group $resourceGroupName --name $privateDNSZone
    

    Zie de opdrachtreferentie az network vnet subnet create voor meer informatie. Zie Azure dns-zone configureren voor meer informatie over het configureren van de Privé-DNS zone.

    Notitie

    Als u het privé-eindpunt in de Azure-portal maakt, wordt automatisch een Azure Privé-DNS zone voor uw configuratie gemaakt. Voor procedureconsistentie in deze zelfstudie maakt u de Privé-DNS zone en het privé-eindpunt afzonderlijk met behulp van de Azure CLI.

  5. Koppel de Privé-DNS-zone aan het virtuele netwerk.

    Stel de <dns-link-name> tijdelijke aanduiding in op de naam voor uw nieuwe DNS-koppeling, zoals zava-private-link.

    # Define a variable for the DNS link name
    dnsLinkName=<dns-link-name>
    
    # Create the link between the Private DNS zone and the virtual network
    az network private-dns link vnet create --resource-group $resourceGroupName --name $dnsLinkName --zone-name $privateDNSZone \
       --virtual-network $virtualNetworkName --registration-enabled False
    

    Zie de opdrachtverwijzing az network private-dns link vnet create voor meer informatie.

  6. Maak in het subnet van het privé-eindpunt van uw virtuele netwerk een privé-eindpunt voor uw back-endweb-app.

    Stel de <private-endpoint-name> placeholder in op de naam van het nieuwe privé-eindpunt voor uw back-end-web-app, zoals zava-backend-endpoint. Stel de <service-connection-name> tijdelijke aanduiding in op de naam van de nieuwe serviceverbinding, zoals zava-backend-connection.

    # Define variables for the private endpoint and service connection
    privateEndpointName=<private-endpoint-name>
    serviceConnectionName=<service-connection-name>
    
    # Get the resource ID of the backend web app
    resourceId=$(az webapp show --resource-group $resourceGroupName --name $backendAppName --query id --output tsv)
    
    # Create the private endpoint for the backend web app by using the resource ID
    az network private-endpoint create --resource-group $resourceGroupName --name $privateEndpointName --location $regionLocation \
       --connection-name $serviceConnectionName --private-connection-resource-id $resourceId \
       --group-id sites --vnet-name $virtualNetworkName --subnet $privateEndpointSubnet
    

    Zie de opdrachtverwijzing az network private-endpoint create voor meer informatie.

  7. Koppel het privé-eindpunt aan de Privé-DNS zone met een DNS-zonegroep voor het privé-eindpunt van de back-endweb-app.

    Stel de <dns-zone-group-name> tijdelijke aanduiding in op de naam voor uw nieuwe DNS-zonegroep, zoals zava-dns-zone-group. De DNS-zonegroep helpt bij het automatisch bijwerken van de Privé-DNS zone wanneer het privé-eindpunt wordt bijgewerkt.

    # Define a variable for the DNS Zone group
    dnsZoneGroupName=<dns-zone-group-name>
    
    # Link the private endpoint to the Private DNS      
    az network private-endpoint dns-zone-group create --resource-group $resourceGroupName --endpoint-name $privateEndpointName \
       --name $dnsZoneGroupName --private-dns-zone $privateDNSZone --zone-name $privateDNSZone
    

    Zie de opdrachtverwijzing az network private-endpoint dns-zone-group create voor meer informatie.

  8. Controleer of directe toegang tot uw privé-eindpunt is geweigerd.

    Wanneer u een privé-eindpunt voor een App Service-app maakt, wordt openbare toegang impliciet uitgeschakeld. Als u probeert toegang te krijgen tot uw back-endweb-app met behulp van de standaard-URL, wordt uw toegang geweigerd.

    Voer in een browser de standaard-URL in voor uw back-endweb-app, zoals <backend-app-name>.azurewebsites.net.

    Het browserbericht geeft aan dat directe toegang is geweigerd:

    Schermopname van het browserbericht wanneer directe toegang tot de back-end-app verboden is.

    Zie Toegangsbeperkingen voor Azure App Service voor meer informatie over toegangsbeperkingen voor App Service met privé-eindpunten.

Integratie van virtuele netwerken configureren

Nadat u de infrastructuur voor het virtuele netwerk hebt gemaakt, kunt u integratie van virtuele netwerken instellen in uw front-endweb-app. Dankzij de integratie van een virtueel netwerk kan uitgaand verkeer rechtstreeks naar het virtuele netwerk stromen. Standaard wordt alleen lokaal IP-verkeer gedefinieerd in het RFC-1918 > Private Address Space protocol route naar het virtuele netwerk. Dit routeringsniveau is wat u nodig hebt om privé-eindpunten in te schakelen.

Integratie van virtuele netwerken inschakelen in uw front-endweb-app. Bij de volgende opdracht wordt ervan uitgegaan dat het subnet en de web-app zich in dezelfde resourcegroep bevinden.

az webapp vnet-integration add --resource-group $resourceGroupName --name $frontendAppName --vnet $virtualNetworkName --subnet $networkIntegrationSubnet

Zie de opdrachtverwijzing az webapp vnet-integration add voor meer informatie.

Zie Routering van virtuele netwerkintegratie beheren om al het verkeer naar het virtuele netwerk te routeren. U kunt al het verkeer ook routeren als u internetverkeer via uw virtuele netwerk wilt routeren, zoals via een Azure Virtual Network NAT of Azure Firewall.

Implementatie naar de back-endweb-app inschakelen

Omdat uw back-endweb-app niet openbaar toegankelijk is, moet u uw hulpprogramma voor continue implementatie toestaan om uw app te bereiken door de SCM-site openbaar toegankelijk te maken vanaf internet. De hoofdweb-app zelf kan al het verkeer blijven weigeren.

  1. Openbare toegang inschakelen voor de back-endweb-app.

    az webapp update --resource-group $resourceGroupName --name $backendAppName --set publicNetworkAccess=Enabled
    
  2. Stel de niet-gerelateerde regelactie in voor de hoofdweb-app om al het verkeer te weigeren.

    Met deze instelling wordt openbare toegang tot de hoofdweb-app geweigerd, ook al is de instelling voor algemene app-toegang ingesteld om openbare toegang toe te staan.

    az resource update --resource-group $resourceGroupName --name $backendAppName --namespace Microsoft.Web \
       --resource-type sites --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Deny
    
  3. Stel de niet-overeenkomende regelactie voor de SCM-site in om al het verkeer toe te staan.

    az resource update --resource-group $resourceGroupName --name $backendAppName --namespace Microsoft.Web \
       --resource-type sites --set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow
    

FTP- en SCM-toegang beperken

Omdat uw back-end-SCM-site openbaar toegankelijk is, moet u deze vergrendelen met betere beveiliging.

  1. FTP-toegang uitschakelen voor zowel de front-end-web-app als de back-end-web-app:

    az resource update --resource-group $resourceGroupName --name ftp --namespace Microsoft.Web \
       --resource-type basicPublishingCredentialsPolicies --parent sites/<frontend-app-name> --set properties.allow=false
    
    az resource update --resource-group $resourceGroupName --name ftp --namespace Microsoft.Web \
       --resource-type basicPublishingCredentialsPolicies --parent sites/<backend-app-name> --set properties.allow=false
    
  2. Schakel basisverificatietoegang tot de WebDeploy-poorten en SCM/geavanceerde hulpprogrammasites voor beide web-apps uit:

    az resource update --resource-group $resourceGroupName --name scm --namespace Microsoft.Web \
       --resource-type basicPublishingCredentialsPolicies --parent sites/<frontend-app-name> --set properties.allow=false
    
    az resource update --resource-group $resourceGroupName --name scm --namespace Microsoft.Web \
       --resource-type basicPublishingCredentialsPolicies --parent sites/<backend-app-name> --set properties.allow=false
    

Wanneer u basisverificatie voor App Service uitschakelt, beperkt u de toegang tot de FTP- en SCM-eindpunten voor gebruikers die zijn geregistreerd bij Microsoft Entra ID. Met deze actie worden uw apps verder beveiligd. Zie Basisverificatie uitschakelen in App Service voor meer informatie over het uitschakelen van basisverificatie, waaronder het testen en bewaken van aanmeldingen.

Continue implementatie configureren met GitHub Actions

Voor deze procedure hebt u twee apps nodig die klaar zijn om te implementeren in uw App Service-front-end- en back-end-apps. Voor toegang tot de web-apps hebt u een service-principal en continue implementatie nodig met GitHub Actions.

Web-apps downloaden voor implementatietests

De opslagplaatsen Azure samples op GitHub bieden voorbeeld-Node.js-apps voor implementatie.

  1. Ga in een browser naar de voorbeeld-app Node.js Back-end.

    Fork de GitHub opslagplaats zodat u uw eigen kopie hebt om wijzigingen aan te brengen. In dit voorbeeld wordt een 'Hallo wereld'-app gebouwd. U implementeert deze app in uw back-endweb-app.

  2. Herhaal hetzelfde proces voor de voorbeeld-app Node.js front-end.

    Fork de GitHub opslagplaats zodat u uw eigen kopie hebt om wijzigingen aan te brengen. In dit voorbeeld wordt een web-app gebouwd die de inhoud van een URL ophaalt en weergeeft. U implementeert deze app in uw front-endweb-app.

De service-principal configureren

U hebt een service-principal nodig voor uw frontend-web-app en backend-web-app.

  1. Een service-principal maken.

    Stel de <service-principal-name> placeholder in op de naam van uw nieuwe service-principal, zoals zava-service-principal.

    Vervang de andere <placeholder> parameterwaarden door de informatie voor uw eigen resources.

    # Define a variable for the service principal name
    servicePrincipalName=<service-principal-name>
    
    # Link the private endpoint to the Private DNS 
    
     az ad sp create-for-rbac --name <service-principal-name> --role contributor --scopes \
       /subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<frontend-app-name> \
       /subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<backend-app-name>
    

    De uitvoer is een JSON-object met de roltoewijzingsreferenties die toegang bieden tot uw App Service-apps.

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "displayName": "<service-principal-name>",
      "password": "0Aa!1Bb!2Cc!3Dd!4Ee!5Ff!6Gg!7Hh!8Ii!9Jj!",
      "tenantId": "aaaabbbb-6666-cccc-7777-dddd8888eeee"
    }
    

    De JSON bevat het wachtwoord van uw service-principal, dat op dit moment alleen zichtbaar is.

    Tip

    Het is een goede gewoonte om minimale toegang te verlenen. In dit voorbeeld is het bereik beperkt tot alleen de apps, niet de hele resourcegroep.

  2. Kopieer het JSON-object zodat u een record hebt van de naam van uw service-principal.

  3. Geef uw service-principalreferenties op voor de Azure-aanmeldingsbewerking als onderdeel van uw GitHub Action-werkstroom.

    Sla de inloggegevens op als GitHub-geheimen waarnaar in uw workflow wordt verwezen.

    1. Ga in een browser naar de geforkte opslagplaats voor uw back-end-Node.js-app op GitHub.

    2. Ga naar Instellingen>Beveiliging>Geheimen en variabelen>Acties.

    3. Selecteer Nieuw opslagplaatsgeheim en maak een geheim voor elk van de volgende instellingen.

      Gebruik de waarden uit uw JSON-uitvoer.

      Instelling Waarde Voorbeeld
      AZURE_CLIENT_ID <application/client-id> 00001111-aaaa-2222-bbbb-3333cccc4444
      AZURE_TENANT_ID <tenant-id> aaaabbbb-6666-cccc-7777-dddd8888eeee
      AZURE_SUBSCRIPTION_ID <subscription-id> cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a
    4. Herhaal dit proces voor de geforkte opslagplaats voor uw front-end Node.js-app op GitHub.

Continue implementatie instellen met GitHub Actions

U kunt continue implementatie instellen met GitHub Actions.

  1. Ga in de Azure portal naar de pagina Overview voor uw front-endweb-app.

  2. Selecteer implementatiecentrum> in het linkermenu.

  3. Stel op het tabblad Settings de optie Source in op GitHub:

    Schermopname waarin wordt getoond hoe u de implementatiebron voor de front-endweb-app kiest in de Azure portal.

  4. Als u voor het eerst vanuit GitHub implementeert, selecteert u Autoriseren en volgt u de autorisatieprompts. Als u wilt implementeren vanuit de opslagplaats van een andere gebruiker, selecteert u Account wijzigen.

  5. Nadat u uw Azure-account met GitHub hebt geautoriseerd, selecteert u de Organization, Repository en Branch om CI/CD te configureren. Als u een organisatie of opslagplaats niet kunt vinden, moet u mogelijk meer machtigingen inschakelen voor GitHub. Zie Gebruikerstoegang tot de opslagplaatsen van uw organisatie beheren voor meer informatie.

    Instelling Waarde
    Organisatie <your-GitHub-organization>
    Repository <forked-repository-name>
    Filiaal voornaamste
  6. Selecteer Opslaan.

  7. Herhaal dit proces voor uw back-endweb-app en de bijbehorende geforkte opslagplaats.

Verbindingen en app-toegang valideren

U bent nu klaar om de verbindingen en toegang tot uw front-end- en back-endweb-apps te controleren.

  1. Ga rechtstreeks naar je backend-web-app via de URL ervan, https://<backend-app-name>.azurewebsites.net.

    Het volgende browserbericht wordt weergegeven:

    Schermopname van het browserbericht wanneer directe toegang tot de back-end-app verboden is.

    Als u de app kunt bereiken, controleert u de configuratie:

    • Controleer of het privé-eindpunt juist is ingesteld.

    • Controleer of de toegangsbeperkingen voor uw app zijn ingesteld om al het verkeer voor de hoofdweb-app te weigeren.

  2. Blader nu rechtstreeks naar uw front-endweb-app met de BIJBEHORENDE URL. https://<frontend-app-name>.azurewebsites.net

    Wanneer de verbinding is geslaagd, ziet u de volgende pagina:

    Schermopname van een geslaagde verbinding met de front-end-app die wordt uitgevoerd in de browser.

  3. Voer de URL voor uw back-endwebapp in het URL-vak in, https://<backend-app-name>.azurewebsites.net, en selecteer Ophalen.

    Als u de verbindingen correct instelt, wordt de pagina vernieuwd om de berichtinhoud van de back-endweb-app weer te geven:

    Schermopname van de browserinhoud nadat de front-end-app toegang probeert te krijgen tot de back-end-app.

    Al het uitgaande verkeer van de front-endweb-app routeert via het virtuele netwerk. Uw front-endweb-app maakt veilig verbinding met uw back-endweb-app via het privé-eindpunt.

    Als er iets mis is met uw verbindingen, ziet u het bericht Fout 403 - Verboden in de uitvoer.

Een SSH-sessie tot stand brengen en een externe shell openen

Controleer of de frontend-web-app de backend-web-app via de privékoppeling kan bereiken door via SSH verbinding te maken met een frontend-exemplaar.

  1. Stel een SSH-sessie in op de webcontainer van uw app en open een externe shell in uw browser:

    az webapp ssh --resource-group $resourceGroupName --name $frontendAppName
    

    Zie de naslaginformatie over az webapp ssh command voor meer informatie.

  2. Nadat de shell in uw browser is geopend, controleert u of uw back-endweb-app wordt bereikt met behulp van het privé-IP-adres van uw back-endweb-app.

    Vervang in de volgende opdrachten de <placeholder> parameterwaarden door de informatie voor uw eigen resource.

    1. Voer de nslookup opdracht uit:

      nslookup <backend-app-name>.azurewebsites.net
      
    2. Voer de curl opdracht uit om de site-inhoud opnieuw te valideren:

      curl https://<backend-app-name>.azurewebsites.net
      

    Schermopname van een SSH-sessie naar een front-endinstantie die laat zien hoe u app-verbindingen met de back-end valideert.

    De nslookup-opdracht moet verwijzen naar het privé-IP-adres van uw backend-web-app. Het privé-IP-adres moet een adres uit uw virtuele netwerk zijn.

    U kunt uw privé-IP-adres bevestigen in de Azure-portal. Ga naar de pagina Netwerkinstellingen> voor uw back-endweb-app.

    Schermopname met de pagina Netwerken voor een web-app in de Azure-portal met het binnenkomende IP-adres gemarkeerd.

  3. Herhaal dezelfde nslookup en curl opdrachten uit een andere terminal (een terminal die geen SSH-sessie is op uw front-endexemplaren).

    Schermopname van een externe terminal waarop de nslookup- en curl-opdrachten voor de back-endweb-app worden uitgevoerd met toegang is verboden.

    De nslookup opdracht retourneert het openbare IP-adres voor de back-endweb-app. Omdat openbare toegang tot de back-endweb-app is uitgeschakeld, krijgt u als u het openbare IP-adres probeert te bereiken, een fout met geweigerde toegang. Deze fout betekent dat de site niet toegankelijk is vanaf het openbare internet, wat het beoogde gedrag is.

    De nslookup opdracht wordt niet omgezet in het privé-IP-adres omdat het adres alleen kan worden omgezet vanuit het virtuele netwerk via de privé-DNS-zone. Alleen de front-endweb-app bevindt zich in het virtuele netwerk. Als u probeert de curl opdracht uit te voeren op de back-endweb-app vanuit de externe terminal, bevat de geretourneerde HTML het bericht Fout 403, Verboden - De web-app die u hebt geprobeerd te bereiken, heeft uw toegang geblokkeerd. Sommige terminals geven ook dezelfde HTML weer als de foutpagina die wordt geretourneerd wanneer u rechtstreeks toegang probeert te krijgen tot de back-endweb-app.

De hulpbronnen 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.

Vervang de <placeholder> parameterwaarde door de informatie voor uw eigen resource:

az group delete --name <resource-group>

Het uitvoeren van deze opdracht kan enkele minuten in beslag nemen.

Veelgestelde vragen

In deze zelfstudie hebt u een basislijninfrastructuur geïmplementeerd ter ondersteuning van een beveiligde N-tier-web-app. App Service biedt functies waarmee u ervoor kunt zorgen dat u toepassingen uitvoert die de aanbevolen beveiligingsprocedures en aanbevelingen volgen.

Deze sectie bevat antwoorden op veelgestelde vragen waarmee u uw apps verder kunt beveiligen en uw resources kunt implementeren en beheren volgens aanbevolen procedures.

Implementeren met andere methoden dan met een service principal

In deze zelfstudie hebt u basisauthenticatie uitgeschakeld. U kunt zich niet verifiëren met de back-end-SCM-site met behulp van een gebruikersnaam en wachtwoord of met behulp van een publicatieprofiel. In plaats van verificatie met behulp van een service-principal kunt u echter OpenID Connect-referenties gebruiken.

Implementatie van GitHub Actions configureren in App Service

Azure genereert automatisch een werkstroombestand in uw opslagplaats. Nieuwe commits in de geselecteerde repository en branch worden doorlopend geïmplementeerd naar uw App Service-app. U kunt de doorvoeringen en implementaties bijhouden op het tabblad Logs in GitHub.

Een standaardwerkstroombestand dat gebruikmaakt van een publicatieprofiel voor verificatie bij App Service, wordt toegevoegd aan uw GitHub-opslagplaats. U kunt dit bestand bekijken door naar de <repo-name>/.github/workflows/ map te gaan.

Veilige openbare toegang tot de back-end-SCM-site bevestigen

Wanneer u de FTP- en SCM-toegang beveiligt, kunt u ervoor zorgen dat alleen beveiligingsprincipals die door Microsoft Entra worden ondersteund toegang hebben tot het SCM-eindpunt, ook al is het eindpunt openbaar toegankelijk. Deze instelling helpt u gerust te stellen dat uw back-endweb-app nog steeds veilig is.

Implementeren zonder een open back-end-SCM-site

Als u zich zorgen maakt over het inschakelen van openbare toegang tot de SCM-site of als u beleidsbeperkingen hebt, kunt u andere Implementatieopties van App Service overwegen, zoals uitvoeren vanuit een ZIP-pakket.

Deze architectuur implementeren met een sjabloon

De resources die u in deze zelfstudie hebt gemaakt, kunnen worden geïmplementeerd met behulp van een Azure Resource Manager sjabloon (ARM-sjabloon) of Bicep sjabloon. Met de toepassing die is gekoppeld aan een Bicep-bestand voor een back-endweb-app kunt u een beveiligde N-tier-app-oplossing maken.

Zie Deploy Bicep files with the Azure CLI voor meer informatie over het implementeren van ARM- en Bicep-sjablonen.