Självstudie: Skapa en säker N-nivåapp i Azure App Service

Många program har mer än en enda komponent. Du kan till exempel ha en klientdel som är offentligt tillgänglig och som ansluter till ett serverdels-API eller en webbapp. Serverdelsresurserna kan ansluta till en databas, ett lagringskonto, ett nyckelvalv, en annan virtuell dator eller en kombination av dessa resurser. Den här arkitekturen är grunden för ett N-nivåprogram. Det är viktigt att program som detta utformas för att skydda serverdelsresurser i största möjliga utsträckning.

I den här självstudien beskrivs hur du driftsätter ett säkert N-skiktsprogram med en webbapp i klientdelen som ansluter till en annan nätverksisolerad webbapp. All trafik isoleras inom ditt virtuella Azure-nätverk med hjälp av Virtual Network-integrering och privata slutpunkter. Mer omfattande vägledning som innehåller andra scenarier finns i:

I den här handledningen kommer du att:

  • Skapa ett virtuellt nätverk och undernät för integrering av virtuella App Service-nätverk
  • Skapa privata DNS-zoner och privata slutpunkter
  • Konfigurera integrering av virtuella nätverk i App Service
  • Inaktivera grundläggande autentisering i App Service
  • Distribuera kontinuerligt till en låst serverdelswebbapp

Förutsättningar

I självstudien används två exempel Node.js appar som finns på GitHub. Om du inte redan har ett GitHub-konto skapar du ett konto kostnadsfritt.

Om du inte har något Azure-konto skapar du ett kostnadsfritt konto innan du börjar.

För att slutföra den här kursen behöver du:

Granska scenarioarkitekturen

Den här handledningen visar hur du konfigurerar en arkitektur som visas i följande diagram. Scenariot representerar en av de möjliga N-nivåkonfigurationerna i App Service. Du kan använda de begrepp som behandlas i den här självstudien för att skapa mer komplexa appar med N nivåer.

Diagram över arkitekturen för en N-nivå App Service, inklusive integrering av virtuella nätverk med en klientdelsapp och en privat slutpunkt på serverdelen.

  • Arkitekturen har ett virtuellt nätverk som innehåller två undernät. Ett undernät är integrerat med klientdelswebbappen och det andra undernätet har en privat slutpunkt för serverdelswebbappen. Det virtuella nätverket blockerar all inkommande nätverkstrafik, förutom trafik som riktar sig mot den integrerade klientdelsappen.

  • En klientdelswebbapp är integrerad i det virtuella nätverket och tillgänglig från det offentliga Internet.

  • En serverdelswebbapp är endast tillgänglig via den privata slutpunkten i det virtuella nätverket.

  • En privat slutpunkt integreras med serverdelswebbappen och gör webbappen tillgänglig via en privat IP-adress.

  • En Private DNS zon möjliggör matchning av ett DNS-namn till ip-adressen för den privata slutpunkten.

Kommentar

För att konfigurera integrering av virtuella nätverk och privata slutpunkter behöver du nivån Basic på Azure App Service eller en högre nivå. Den kostnadsfria nivån stöder inte dessa funktioner.

Scenariot i den här självstudien innehåller följande beteende:

  • Publik trafik till backend-appen är blockerad.
  • Utgående trafik från App Service dirigeras till det virtuella nätverket och kan nå serverdelsappen.
  • App Service kan utföra DNS-upplösning mot serverdelsappen.

Skapa de två webbapparna

Du behöver två App Service-webbappar, en för klientdelen och en för serverdelen. Apparna kan köras på samma regionplats. Om du vill konfigurera integrering av virtuella nätverk och arbeta med privata slutpunkter använder du minst nivån Basic för Azure App Service. Du konfigurerar integreringen av det virtuella nätverket och andra inställningar senare.

  1. Skapa en resursgrupp för att hantera alla resurser för den här självstudien.

    Ange platshållaren <resource-group> till namnet på din nya resursgrupp, till exempel zava-resources. Ställ in platshållaren <region-location> på regionen för din nya resursgrupp, till exempel 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
    

    Mer information finns i kommandoreferensen az group create .

  2. Skapa en App Service-plan för dina resurser.

    Ange platshållaren <app-service-plan> till namnet på den nya App Service-planen, till exempel zava-app-service-plan.

    I självstudieexemplet anger du parametern --sku till P1V3 (Premium V3). Du kan använda det här värdet eller ange en annan SKU. SKU:n måste ha stöd för de nätverksfunktioner som krävs för den här självstudien. Välj basic-nivån eller högre.

    # 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
    

    Mer information finns i kommandoreferensen az appservice plan create .

  3. Skapa frontend- och backend-webbappar.

    Självstudieexemplet skapar två exempelappar i Node.js, där versionen av körspråket är NODE:24-lts. Om du föredrar att använda dina egna appar anger du --runtime parametervärdet <language-version> i enlighet med detta. Du kan köra kommandot az webapp list-runtimes för att visa en lista över tillgängliga körmiljöer:

    az webapp list-runtimes
    

    <frontend-app-name> Ange platshållaren till namnet på den nya klientdelswebbappen, till exempel zava-frontend-app. Namnet måste vara globalt unikt och bestå av giltiga tecken (a-z, 0-9, -). På samma sätt anger du platshållaren <backend-app-name> som namnet på din nya backend-webbapp, till exempel 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"
    

    Mer information finns i kommandoreferensen az webapp create .

Skapa nätverksinfrastrukturen

Den virtuella nätverksinfrastrukturen består av följande resurser:

  • En instans av Azure Virtual Network
  • Ett undernät för integrering av virtuella App Service-nätverk
  • Ett annat undernät för den privata slutpunkten
  • En Azure Private DNS-zon
  • En privat slutpunkt
  1. Skapa ett virtuellt Azure-nätverk.

    Ange <virtual-network-name> som namnet på ditt nya virtuella nätverk, till exempel zava-virtual-network. Namnet måste vara globalt unikt.

    # 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
    

    Mer information finns i kommandoreferensen az network vnet create .

  2. Skapa ett undernät för integreringen av det virtuella Nätverket i App Service.

    <network-integration-subnet> Ange platshållaren till namnet på det nya undernätet som stöder integrering av virtuella nätverk, till exempel zava-integration-subnet.

    För App Service rekommenderar vi att det virtuella nätverksintegreringsundernätet har ett CIDR-block /26 på minst. /24 är mer än tillräckligt. --delegations Microsoft.Web/serverfarms anger att undernätet är delegerat för integrering av virtuella App Service-nätverk.

    # 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
    

    Mer information finns i kommandoreferensen för az network vnet subnet create.

  3. Skapa ett annat undernät för de privata slutpunkterna.

    Ange platshållaren <private-endpoint-subnet> som namnet på ditt nya undernät som har stöd för den privata slutpunkten, till exempel 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
    

    För privata slutpunktsundernät måste du inaktivera nätverksprinciper för privata slutpunkter genom att ange --disable-private-endpoint-network-policies flaggan till true. Mer information finns i Valfria parametrar för kommandot az network vnet subnet create .

    Kommentar

    Flaggan --private-endpoint-network-policies kan snart ersätta --disable-private-endpoint-network-policies flaggan.

  4. Skapa Azure Private DNS-zonen.

    Ange platshållaren <private-zone-name> till namnet på din nya Private DNS zon, till exempel 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
    

    Mer information finns i kommandoreferensen för az network vnet subnet create. Mer information om hur du konfigurerar Private DNS-zonen finns i Azure dns-zonkonfiguration.

    Kommentar

    Om du skapar den privata slutpunkten i Azure-portalen skapas automatiskt en Azure Private DNS zon för konfigurationen. Av konsekvensskäl i den här självstudien skapar du den privata DNS-zonen och den privata slutpunkten separat med Azure CLI.

  5. Länka Private DNS-zonen till det virtuella nätverket.

    Ange namnet för platshållaren <dns-link-name> för din nya DNS-länk, till exempel 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
    

    Mer information finns i kommandoreferensen az network private-dns link vnet create .

  6. I undernätet för privat slutpunkt i ditt virtuella nätverk skapar du en privat slutpunkt för webbappen för serverdelen.

    Ange att platshållaren <private-endpoint-name> ska vara namnet på den nya privata slutpunkten för webbappen för serverdelen, till exempel zava-backend-endpoint. Ange <service-connection-name> som namnet på den nya tjänstanslutningen, till exempel 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
    

    Mer information finns i kommandoreferensen az network private-endpoint create .

  7. Koppla den privata slutpunkten till den privata DNS-zonen med en DNS-zongrupp för serverdelswebbappens privata slutpunkt.

    Ange namnet på din nya DNS-zongrupp i platshållaren <dns-zone-group-name>, till exempel zava-dns-zone-group. DNS-zongruppen hjälper till med automatisk uppdatering av Private DNS-zonen när den privata slutpunkten uppdateras.

    # 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
    

    Mer information finns i kommandoreferensen az network private-endpoint dns-zone-group create .

  8. Bekräfta att direktåtkomst till din privata slutpunkt nekas.

    När du skapar en privat slutpunkt för en App Service-app inaktiveras den offentliga åtkomsten implicit. Om du försöker komma åt serverdelswebbappen med hjälp av dess standard-URL nekas din åtkomst.

    I en webbläsare anger du standard-URL:en för serverdelswebbappen, till exempel <backend-app-name>.azurewebsites.net.

    Webbläsarmeddelandet anger att direkt åtkomst nekas:

    Skärmbild av webbläsarmeddelandet när direktåtkomst till serverdelsappen är förbjuden.

    Mer information om åtkomstbegränsningar för App Service med privata slutpunkter finns i Åtkomstbegränsningar för Azure App Service.

Konfigurera integrering av virtuella nätverk

När du har skapat den virtuella nätverksinfrastrukturen kan du konfigurera integrering av virtuella nätverk i klientdelswebbappen. Med integrering av virtuella nätverk kan utgående trafik flöda direkt till det virtuella nätverket. Som standardinställning dirigeras endast lokal IP-trafik som definieras i RFC-1918 > Private Address Space till det virtuella nätverket. Den här routningsnivån är det du behöver för att aktivera privata slutpunkter.

Aktivera integrering av virtuella nätverk i klientdelswebbappen. Följande kommando förutsätter att undernätet och webbappen finns i samma resursgrupp.

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

Mer information finns i kommandoreferensen az webapp vnet-integration add .

Information om hur du dirigerar all trafik till det virtuella nätverket finns i Hantera routning för integrering av virtuella nätverk. Routning av all trafik kan också användas om du vill dirigera Internettrafik via ditt virtuella nätverk, till exempel via en Azure Virtual Network NAT eller Azure Firewall.

Aktivera distribution till serverdelens webbapp

Eftersom serverdelswebbappen inte är offentligt tillgänglig måste du tillåta att ditt kontinuerliga distributionsverktyg når din app genom att göra SCM-webbplatsen offentligt tillgänglig från Internet. Själva huvudwebbappen kan fortsätta att neka all trafik.

  1. Aktivera offentlig åtkomst för serverdelswebbappen.

    az webapp update --resource-group $resourceGroupName --name $backendAppName --set publicNetworkAccess=Enabled
    
  2. Ange den omatchade regelåtgärden för huvudwebbappen för att neka all trafik.

    Den här inställningen nekar offentlig åtkomst till huvudwebbappen även om den allmänna inställningen för appåtkomst är inställd på att tillåta offentlig åtkomst.

    az resource update --resource-group $resourceGroupName --name $backendAppName --namespace Microsoft.Web \
       --resource-type sites --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Deny
    
  3. Ange den omatchade regelåtgärden för SCM-webbplatsen så att all trafik tillåts.

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

Begränsa FTP- och SCM-åtkomst

Eftersom din SCM-webbplats för serverdelen är offentligt tillgänglig måste du låsa den med bättre säkerhet.

  1. Inaktivera FTP-åtkomst för både klientdelen och serverdelswebbappen:

    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. Inaktivera grundläggande autentiseringsåtkomst till WebDeploy-portarna och SCM/avancerade verktygswebbplatser för båda webbapparna:

    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
    

När du inaktiverar grundläggande autentisering i App Service begränsar du åtkomsten till FTP- och SCM-slutpunkterna till användare som är registrerade med Microsoft Entra ID. Den här åtgärden skyddar dina appar ytterligare. Mer information om hur du inaktiverar grundläggande autentisering, inklusive hur du testar och övervakar inloggningar, finns i Inaktivera grundläggande autentisering i App Service.

Konfigurera kontinuerlig distribution med GitHub Actions

För den här proceduren behöver du två appar som är redo att distribueras till apptjänstens klientdel och serverdelsappar. För att få åtkomst till webbapparna behöver du ett huvudnamn för tjänsten och kontinuerlig distribution med GitHub Actions.

Hämta webbappar för distributionstestning

Azure Samples-repositorierna på GitHub innehåller exempelappar i Node.js för driftsättning.

  1. I en webbläsare går du till exempelappen Node.js Backend.

    Förka GitHub-förvaret så att du får en egen kopia för att göra ändringar. Det här exemplet skapar en Hello World-app. Du driftsätter den här appen i din webbapp i serverdelen.

  2. Upprepa samma process för Node.js Frontend-exempelappen.

    Förka GitHub-förvaret så att du får en egen kopia för att göra ändringar. Det här exemplet skapar en webbapp som hämtar och visar innehållet i en URL. Du driftsätter den här appen i din webbapp på klientsidan.

Konfigurera tjänstprincipalen

Du behöver ett tjänsthuvudnamn för din klientwebbapp och serverdelswebbapp.

  1. Skapa ett huvudnamn för tjänsten.

    <service-principal-name> Ange platshållaren som namnet på ditt nya tjänsthuvudnamn, till exempel zava-service-principal.

    Ersätt de andra <placeholder> parametervärdena med informationen för dina egna resurser.

    # 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>
    

    Utdata är ett JSON-objekt med autentiseringsuppgifterna för rolltilldelning som ger åtkomst till dina App Service-appar.

    {
      "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"
    }
    

    JSON innehåller lösenordet för tjänstens huvudnamn, som endast visas just nu.

    Tips/Råd

    Det är en bra idé att bevilja minsta möjliga åtkomst. I det här exemplet är omfånget begränsat till bara apparna, inte hela resursgruppen.

  2. Kopiera JSON-objektet så att du har en post med tjänstens huvudnamn.

  3. Ange inloggningsuppgifterna för din tjänstens huvudkonto till Azure sign in-operationen som en del av ditt GitHub Actions-arbetsflöde.

    Lagra autentiseringsuppgifterna som GitHub-hemligheter som refereras till i ditt arbetsflöde.

    1. I en webbläsare går du till den förgrenade lagringsplatsen för serverdelen Node.js app på GitHub.

    2. Gå till Inställningar>> och variabler >Åtgärder.

    3. Välj Ny lagringsplatshemlighet och skapa en hemlighet för var och en av följande inställningar.

      Använd värdena från dina JSON-utdata.

      Inställning Värde Exempel
      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. Upprepa den här processen för den förgrenade lagringsplatsen för klientdelsappen Node.js på GitHub.

Konfigurera kontinuerlig distribution med GitHub Actions

Du kan konfigurera kontinuerlig distribution med GitHub Actions.

  1. I Azure-portalen går du till sidan Overview för klientdelswebbappen.

  2. I den vänstra menyn väljer du Distribuering>Distribueringscenter.

  3. På fliken Settings anger du alternativet Source till GitHub:

    Screenshot som visar hur du väljer distributionskälla för klientdelswebbappen i Azure portal.

  4. Om du distribuerar från GitHub för första gången väljer du Auktorisera och följer auktoriseringsanvisningarna. Om du vill distribuera från en annan användares lagringsplats väljer du Ändra konto.

  5. När du har auktorisera ditt Azure konto med GitHub väljer du Organization, Repository och Branch att konfigurera CI/CD för. Om du inte hittar en organisation eller lagringsplats kan du behöva aktivera fler behörigheter för GitHub. Mer information finns i Hantera användaråtkomst till organisationens lagringsplatser.

    Inställning Värde
    Organisation <your-GitHub-organization>
    Repository <forked-repository-name>
    Gren huvud
  6. Välj Spara.

  7. Upprepa den här processen för din backend-webbapp och den motsvarande forkade lagringsplatsen.

Verifiera anslutningar och appåtkomst

Nu kan du kontrollera anslutningarna och åtkomst till dina frontend- och backend-webbappar.

  1. Försök att gå direkt till din backend-webbapp med webbadressen https://<backend-app-name>.azurewebsites.net.

    Du bör se följande webbläsarmeddelande:

    Skärmbild av webbläsarmeddelandet när direktåtkomst till serverdelsappen är förbjuden.

    Om du kan nå appen kontrollerar du konfigurationen:

    • Bekräfta att den privata slutpunkten är korrekt konfigurerad.

    • Bekräfta att åtkomstbegränsningarna för din app är inställda på att neka all trafik för huvudwebbappen.

  2. Försök nu att gå direkt till din frontend-webbapp via dess URL, https://<frontend-app-name>.azurewebsites.net.

    När anslutningen lyckas visas följande sida:

    Skärmbild av en lyckad anslutning till klientdelsappen som körs i webbläsaren.

  3. I rutan URL anger du URL:en för serverdelswebbappen https://<backend-app-name>.azurewebsites.netoch väljer Hämta.

    Om du konfigurerar anslutningarna korrekt uppdateras sidan för att visa meddelandeinnehållet från serverdelswebbappen:

    Skärmbild av webbläsarinnehållet när klientdelsappen försöker komma åt serverdelsappen.

    All utgående trafik från klientdelens webbapp dirigeras via det virtuella nätverket. Din klientwebbapp ansluter säkert till din serverwebbapp via den privata slutpunkten.

    Om något är fel med dina anslutningar visas meddelandet Fel 403 – Förbjudet i utdata.

Upprätta en SSH-session och öppna ett fjärrgränssnitt

Verifiera att klientdelswebbappen når serverdelswebbappen via den privata länken med hjälp av SSH till en klientdelsinstans.

  1. Upprätta en SSH-session till webbcontainern för din app och öppna ett fjärrgränssnitt i webbläsaren:

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

    Mer information finns i kommandoreferensen az webapp ssh .

  2. När kommandoskalet öppnas i webbläsaren bekräftar du att serverdelswebbappen kan nås genom att använda den privata IP-adressen för serverdelswebbappen.

    Ersätt parametervärdena med informationen för din egen resurs i följande kommandon <placeholder> .

    1. Kör kommandot nslookup:

      nslookup <backend-app-name>.azurewebsites.net
      
    2. curl Kör kommandot för att verifiera webbplatsinnehållet igen:

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

    Skärmbild av en SSH-session till en klientdelsinstans som visar hur du validerar appanslutningar till serverdelen.

    Kommandot nslookup bör lösas upp till den privata IP-adressen för din backend-webbapp. Den privata IP-adressen ska vara en adress från ditt virtuella nätverk.

    Du kan bekräfta din privata IP-adress i Azure-portalen. Gå till sidan Inställningar>Nätverk för serverdelswebbappen.

    Screenshot som visar sidan Nätverk för en webbapp i Azure-portalen med den inkommande IP-adressen markerad.

  3. Upprepa samma kommandon nslookup och curl från en annan terminal (en som inte är en SSH-session till dina frontend-instanser).

    Skärmbild av en extern terminal som kör kommandona nslookup och curl för serverdelswebbappen som visar att åtkomst är förbjuden.

    Kommandot nslookup returnerar den offentliga IP-adressen för serverdelswebbappen. Eftersom offentlig åtkomst till serverdelswebbappen är inaktiverad får du ett felmeddelande om nekad åtkomst om du försöker nå den offentliga IP-adressen. Det här felet innebär att webbplatsen inte är tillgänglig från det offentliga Internet, vilket är det avsedda beteendet.

    Kommandot nslookup matchar inte den privata IP-adressen eftersom adressen endast kan matchas inifrån det virtuella nätverket via den privata DNS-zonen. Endast frontend-webbappen finns i det virtuella nätverket. Om du försöker köra curl kommandot på serverdelswebbappen från den externa terminalen innehåller den returnerade HTML-koden felmeddelandet 403, Förbjudet – Webbappen som du har försökt nå har blockerat din åtkomst. Vissa terminaler visar också samma HTML-kod som felsidan som returnerades när du försöker komma åt serverdelswebbappen direkt.

Rensa resurser

I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell.

<placeholder> Ersätt parametervärdet med informationen för din egen resurs:

az group delete --name <resource-group>

Det här kommandot kan ta flera minuter att slutföra.

Vanliga frågor och svar

I den här självstudien distribuerade du en baslinjeinfrastruktur för att stödja en säker webbapp på N-nivå. App Service innehåller funktioner som kan hjälpa dig att se till att du kör program som följer rekommenderade säkerhetsmetoder och rekommendationer.

Det här avsnittet innehåller svar på vanliga frågor som kan hjälpa dig att skydda dina appar ytterligare och distribuera och hantera dina resurser enligt bästa praxis.

Distribuera med andra metoder än ett tjänsthuvudnamn

I den här självstudien inaktiverade du grundläggande autentisering. Du kan inte autentisera med SCM-webbplatsen för serverdelen med hjälp av ett användarnamn och lösenord eller med hjälp av en publiceringsprofil. Men i stället för att autentisera med hjälp av tjänstens huvudnamn kan du använda OpenID Connect-autentiseringsuppgifter .

Konfigurera GitHub Actions-driftsättning i App Service

Azure skapar en arbetsflödesfil automatiskt på lagringsplatsen. Nya incheckningar i den valda lagringsplatsen och grenen distribueras kontinuerligt till din App Service-app. Du kan spåra incheckningar och distributioner på fliken Logs i GitHub.

En standardarbetsflödesfil som använder en publiceringsprofil för att autentisera till App Service läggs till på din GitHub-lagringsplats. Du kan visa den här filen genom att gå till <repo-name>/.github/workflows/ katalogen.

Bekräfta säker publik åtkomst till backendens SCM-webbplats

När du låser ned FTP- och SCM-åtkomst kan du säkerställa att endast identiteter som stöds av Microsoft Entra kan komma åt SCM-slutpunkten, även om slutpunkten är offentligt tillgänglig. Den här inställningen hjälper dig att försäkra dig om att serverdelswebbappen fortfarande är säker.

Distribuera utan en öppen SCM-plats för serverdelen

Om du är orolig för att aktivera offentlig åtkomst till SCM-platsen, eller om du har principbegränsningar, kan du överväga andra Distributionsalternativ för App Service som att köra från ett ZIP-paket.

Distribuera den här arkitekturen med en mall

De resurser som du skapade i den här självstudien kan distribueras med hjälp av en Azure Resource Manager mall (ARM-mall) eller Bicep mall. Applikationen som är ansluten till en Bicep-fil för en backend-webbapp gör att du kan skapa en säker N-nivåprogramlösning.

Information om hur du distribuerar ARM- och Bicep-mallar finns i Distribuera Bicep filer med Azure CLI.