Udostępnij za pośrednictwem


Samouczek: tworzenie bezpiecznej aplikacji n-warstwowej w usłudze aplikacja systemu Azure Service

Wiele aplikacji ma więcej niż jeden składnik. Na przykład może istnieć fronton, który jest publicznie dostępny i łączy się z interfejsem API zaplecza lub aplikacją internetową, która z kolei łączy się z bazą danych, kontem magazynu, magazynem kluczy, inną maszyną wirtualną lub kombinacją tych zasobów. Ta architektura tworzy aplikację N-warstwową. Ważne jest, aby aplikacje takie jak te zostały zaprojektowane w celu ochrony zasobów zaplecza w możliwie największym stopniu.

Z tego samouczka dowiesz się, jak wdrożyć bezpieczną aplikację N-warstwową z aplikacją internetową frontonu, która łączy się z inną aplikacją internetową odizolowaną od sieci. Cały ruch jest izolowany w ramach sieci wirtualnej platformy Azure przy użyciu integracji z siecią wirtualną i prywatnych punktów końcowych. Aby uzyskać bardziej kompleksowe wskazówki, które obejmują inne scenariusze, zobacz:

Architektura scenariusza

Na poniższym diagramie przedstawiono architekturę, którą utworzysz podczas tego samouczka.

Architecture diagram of an n-tier App Service.

  • Sieć wirtualna zawiera dwie podsieci, jedna jest zintegrowana z aplikacją internetową frontonu, a druga ma prywatny punkt końcowy dla aplikacji internetowej zaplecza. Sieć wirtualna blokuje cały przychodzący ruch sieciowy, z wyjątkiem aplikacji frontonu zintegrowanej z nią.
  • Aplikacja internetowa frontonu zintegrowana z siecią wirtualną i dostępna z publicznego Internetu.
  • Aplikacja internetowa zaplecza dostępna tylko za pośrednictwem prywatnego punktu końcowego w sieci wirtualnej.
  • Prywatny punkt końcowy integruje się z aplikacją internetową zaplecza i udostępnia aplikację internetową za pomocą prywatnego adresu IP.
  • strefa Prywatna strefa DNS Umożliwia rozpoznawanie nazwy DNS na adres IP prywatnego punktu końcowego.

Uwaga

Integracja sieci wirtualnej i prywatne punkty końcowe są dostępne aż do warstwy Podstawowa w usłudze App Service. Warstwa Bezpłatna nie obsługuje tych funkcji. Z tą architekturą:

  • Ruch publiczny do aplikacji zaplecza jest blokowany.
  • Ruch wychodzący z usługi App Service jest kierowany do sieci wirtualnej i może dotrzeć do aplikacji zaplecza.
  • Usługa App Service umożliwia rozpoznawanie nazw DNS w aplikacji zaplecza.

W tym scenariuszu przedstawiono jeden z możliwych scenariuszy N-warstwowych w usłudze App Service. Korzystając z pojęć omówionych w tym samouczku, możesz tworzyć bardziej złożone aplikacje N-warstwowe.

Zawartość:

  • Utwórz sieć wirtualną i podsieci na potrzeby integracji sieci wirtualnej usługi App Service.
  • Utwórz prywatne strefy DNS.
  • Tworzenie prywatnych punktów końcowych.
  • Konfigurowanie integracji sieci wirtualnej w usłudze App Service.
  • Wyłącz podstawowe uwierzytelnianie w usłudze App Service.
  • Ciągłe wdrażanie w zablokowanej aplikacji internetowej zaplecza.

Wymagania wstępne

W tym samouczku są używane dwie przykładowe aplikacje Node.js hostowane w usłudze GitHub. Jeśli nie masz jeszcze konta usługi GitHub, utwórz bezpłatne konto.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

W celu ukończenia tego samouczka:

1. Tworzenie dwóch wystąpień aplikacji internetowej

Potrzebne są dwa wystąpienia aplikacji internetowej— jedno dla frontonu i jedno dla zaplecza. Aby korzystać z integracji sieci wirtualnej i prywatnych punktów końcowych, należy użyć co najmniej warstwy Podstawowa . Później skonfigurujesz integrację sieci wirtualnej i inne konfiguracje.

  1. Utwórz grupę zasobów, aby zarządzać wszystkimi zasobami tworzonymi w tym samouczku.

    # Save resource group name and region as variables for convenience
    groupName=myresourcegroup
    region=eastus
    az group create --name $groupName --location $region
    
  2. Utwórz plan usługi App Service. Zastąp ciąg <app-service-plan-name> unikatową nazwą. Zmodyfikuj parametr, --sku jeśli chcesz użyć innej jednostki SKU. Upewnij się, że nie używasz warstwy Bezpłatna, ponieważ ta jednostka SKU nie obsługuje wymaganych funkcji sieciowych.

    # Save App Service plan name as a variable for convenience
    aspName=<app-service-plan-name>
    az appservice plan create --name $aspName --resource-group $groupName --is-linux --location $region --sku P1V3
    
  3. Utwórz aplikacje internetowe. Zastąp <frontend-app-name> wartości i <backend-app-name> dwiema unikatowymi nazwami globalnymi (prawidłowe znaki to a-z, 0-9i -). W tym samouczku przedstawiono przykładowe aplikacje Node.js. Jeśli chcesz używać własnych aplikacji, zmień odpowiednio --runtime parametr. Uruchom polecenie az webapp list-runtimes , aby wyświetlić listę dostępnych środowisk uruchomieniowych.

    az webapp create --name <frontend-app-name> --resource-group $groupName --plan $aspName --runtime "NODE:18-lts"
    az webapp create --name <backend-app-name> --resource-group $groupName --plan $aspName --runtime "NODE:18-lts"
    

2. Tworzenie infrastruktury sieciowej

Utworzysz następujące zasoby sieciowe:

  • Sieć wirtualna.
  • Podsieć integracji sieci wirtualnej usługi App Service.
  • Podsieć dla prywatnego punktu końcowego.
  • Prywatna strefa DNS.
  • Prywatny punkt końcowy.
  1. Utwórz sieć prywatną. Zastąp ciąg <virtual-network-name> unikatową nazwą.

    # 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. Utwórz podsieć dla integracji sieci wirtualnej usługi App Service.

    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
    

    W przypadku usługi App Service zaleca się, aby podsieć integracji sieci wirtualnej miała co najmniej blok /26 CIDR. /24 jest więcej niż wystarczająca. --delegations Microsoft.Web/serverfarms określa, że podsieć jest delegowana na potrzeby integracji sieci wirtualnej usługi App Service.

  3. Utwórz kolejną podsieć dla prywatnych punktów końcowych.

    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
    

    W przypadku podsieci prywatnych punktów końcowych należy wyłączyć zasady sieci prywatnego punktu końcowego, ustawiając wartość --disable-private-endpoint-network-policies .true

  4. Utwórz prywatną strefę DNS.

    az network private-dns zone create --resource-group $groupName --name privatelink.azurewebsites.net
    

    Aby uzyskać więcej informacji na temat tych ustawień, zobacz Konfiguracja usługi DNS prywatnego punktu końcowego platformy Azure.

    Uwaga

    Jeśli tworzysz prywatny punkt końcowy przy użyciu portalu, prywatna strefa DNS zostanie utworzona automatycznie i nie musisz jej tworzyć oddzielnie. W celu zapewnienia spójności z tym samouczkiem utworzysz prywatną strefę DNS i prywatny punkt końcowy oddzielnie przy użyciu interfejsu wiersza polecenia platformy Azure.

  5. Połącz prywatną strefę DNS z siecią wirtualną.

    az network private-dns link vnet create --resource-group $groupName --name myDnsLink --zone-name privatelink.azurewebsites.net --virtual-network $vnetName --registration-enabled False
    
  6. W podsieci prywatnego punktu końcowego sieci wirtualnej utwórz prywatny punkt końcowy dla aplikacji internetowej zaplecza. Zastąp <backend-app-name> ciąg nazwą aplikacji internetowej zaplecza.

    # Get backend web app resource ID
    resourceId=$(az webapp show --resource-group $groupName --name <backend-app-name> --query id --output tsv)
    az network private-endpoint create --resource-group $groupName --name myPrivateEndpoint --location $region --connection-name myConnection --private-connection-resource-id $resourceId --group-id sites --vnet-name $vnetName --subnet private-endpoint-subnet
    
  7. Połącz prywatny punkt końcowy z prywatną strefą DNS z grupą stref DNS dla prywatnego punktu końcowego aplikacji internetowej zaplecza. Ta grupa stref DNS pomaga automatycznie aktualizować prywatną strefę DNS, gdy istnieje aktualizacja prywatnego punktu końcowego.

    az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name myPrivateEndpoint --name myZoneGroup --private-dns-zone privatelink.azurewebsites.net --zone-name privatelink.azurewebsites.net
    
  8. Podczas tworzenia prywatnego punktu końcowego dla usługi App Service dostęp publiczny jest niejawnie wyłączony. Jeśli spróbujesz uzyskać dostęp do aplikacji internetowej zaplecza przy użyciu domyślnego adresu URL, dostęp zostanie odrzucony. W przeglądarce przejdź do strony , aby potwierdzić <backend-app-name>.azurewebsites.net to zachowanie.

    Screenshot of 403 error when trying to access backend web app directly.

    Aby uzyskać więcej informacji na temat ograniczeń dostępu usługi App Service z prywatnymi punktami końcowymi, zobacz aplikacja systemu Azure Service access restrictions (Ograniczenia dostępu do usługi aplikacja systemu Azure Service).

3. Konfigurowanie integracji sieci wirtualnej w aplikacji internetowej frontonu

Włącz integrację sieci wirtualnej w aplikacji. Zastąp <frontend-app-name> ciąg nazwą aplikacji internetowej frontonu.

az webapp vnet-integration add --resource-group $groupName --name <frontend-app-name> --vnet $vnetName --subnet vnet-integration-subnet

Integracja z siecią wirtualną umożliwia przepływ ruchu wychodzącego bezpośrednio do sieci wirtualnej. Domyślnie tylko lokalny ruch IP zdefiniowany w dokumencie RFC-1918 jest kierowany do sieci wirtualnej, co jest potrzebne w przypadku prywatnych punktów końcowych. Aby skierować cały ruch do sieci wirtualnej, zobacz Zarządzanie routingiem integracji sieci wirtualnej. Routing całego ruchu może być również używany, jeśli chcesz kierować ruch internetowy przez sieć wirtualną, na przykład za pośrednictwem translatora adresów sieciowych platformy Azure lub usługi Azure Firewall.

4. Włączanie wdrażania do aplikacji internetowej zaplecza z Internetu

Ponieważ aplikacja internetowa zaplecza nie jest publicznie dostępna, musisz zezwolić narzędziu ciągłego wdrażania na dostęp do aplikacji, udostępniając witrynę SCM publicznie. Główna aplikacja internetowa może nadal blokować cały ruch.

  1. Włącz dostęp publiczny dla aplikacji internetowej zaplecza.

    az webapp update --resource-group $groupName --name <backend-app-name> --set publicNetworkAccess=Enabled
    
  2. Ustaw niedopasowaną akcję reguły dla głównej aplikacji internetowej, aby odmówić całego ruchu. To ustawienie uniemożliwia publiczny dostęp do głównej aplikacji internetowej, mimo że ustawienie ogólnego dostępu do aplikacji jest ustawione tak, aby zezwalało na dostęp publiczny.

    az resource update --resource-group $groupName --name <backend-app-name> --namespace Microsoft.Web --resource-type sites --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Deny
    
  3. Ustaw niepasowaną akcję reguły dla witryny SCM, aby zezwolić na cały ruch.

    az resource update --resource-group $groupName --name <backend-app-name> --namespace Microsoft.Web --resource-type sites --set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow
    

5. Zablokuj dostęp do protokołu FTP i SCM

Teraz, gdy witryna SCM zaplecza jest publicznie dostępna, musisz zablokować ją z lepszymi zabezpieczeniami.

  1. Wyłącz dostęp ftp zarówno dla aplikacji internetowych frontonu, jak i zaplecza. Zastąp <frontend-app-name> wartości i <backend-app-name> nazwami aplikacji.

    az resource update --resource-group $groupName --name ftp --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<frontend-app-name> --set properties.allow=false
    az resource update --resource-group $groupName --name ftp --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<backend-app-name> --set properties.allow=false
    
  2. Wyłącz podstawowy dostęp uwierzytelniania do portów WebDeploy i witryn narzędzi SCM/advanced dla obu aplikacji internetowych. Zastąp <frontend-app-name> wartości i <backend-app-name> nazwami aplikacji.

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

Wyłączenie podstawowego uwierzytelniania w usłudze App Service ogranicza dostęp do punktów końcowych FTP i SCM użytkownikom, którzy są wspierani przez identyfikator Entra firmy Microsoft, co dodatkowo zabezpiecza aplikacje. Aby uzyskać więcej informacji na temat wyłączania podstawowego uwierzytelniania, w tym sposobu testowania i monitorowania logowań, zobacz Wyłączanie podstawowego uwierzytelniania w usłudze App Service.

6. Konfigurowanie ciągłego wdrażania przy użyciu funkcji GitHub Actions

  1. Przejdź do przykładowej aplikacji zaplecza Node.js. Ta aplikacja jest prostą aplikacją Hello World.

  2. Wybierz przycisk Rozwidlenie w prawym górnym rogu strony GitHub.

  3. Wybierz właściciela i pozostaw domyślną nazwę repozytorium.

  4. Wybierz pozycję Utwórz rozwidlenie.

  5. Powtórz ten sam proces dla przykładowej aplikacji frontonu Node.js. Ta aplikacja to podstawowa aplikacja internetowa, która uzyskuje dostęp do zdalnego adresu URL.

  6. Utwórz jednostkę usługi. Zastąp <subscription-id>wartości , <frontend-app-name>i <backend-app-name> wartościami.

    az ad sp create-for-rbac --name "myApp" --role contributor --scopes /subscriptions/<subscription-id>/resourceGroups/$groupName/providers/Microsoft.Web/sites/<frontend-app-name> /subscriptions/<subscription-id>/resourceGroups/$groupName/providers/Microsoft.Web/sites/<backend-app-name> --sdk-auth
    

    Dane wyjściowe to obiekt JSON z poświadczeniami przypisania roli, które zapewniają dostęp do aplikacji usługi App Service. Skopiuj ten obiekt JSON do następnego kroku. Zawiera on wpis tajny klienta, który jest obecnie widoczny tylko w tej chwili. Zawsze dobrym rozwiązaniem jest przyznanie minimalnego dostępu. Zakres w tym przykładzie jest ograniczony tylko do aplikacji, a nie całej grupy zasobów.

  7. Aby przechowywać poświadczenia jednostki usługi jako wpisy tajne usługi GitHub, przejdź do jednego z rozwidlonych przykładowych repozytoriów w usłudze GitHub i przejdź do pozycji Ustawienia> Zabezpieczenia>tajne i zmienne>Actions.

  8. Wybierz pozycję Nowy wpis tajny repozytorium i utwórz wpis tajny dla każdej z poniższych wartości. Wartości można znaleźć w skopiowanych wcześniej danych wyjściowych json.

    Nazwa/nazwisko Wartość
    AZURE_APP_ID <application/client-id>
    AZURE_PASSWORD <client-secret>
    AZURE_TENANT_ID <tenant-id>
    AZURE_SUBSCRIPTION_ID <subscription-id>
  9. Powtórz ten proces dla innego rozwidlenia przykładowego repozytorium.

  10. Aby skonfigurować ciągłe wdrażanie za pomocą funkcji GitHub Actions, zaloguj się do witryny Azure Portal.

  11. Przejdź do strony Przegląd aplikacji internetowej frontonu.

  12. W okienku po lewej stronie wybierz pozycję Centrum wdrażania. Następnie wybierz pozycję Ustawienia.

  13. W polu Źródło wybierz pozycję "GitHub" z opcji ciągłej integracji/ciągłego wdrażania.

    Screenshot that shows how to choose the deployment source.

  14. Jeśli wdrażasz z usługi GitHub po raz pierwszy, wybierz pozycję Autoryzuj i postępuj zgodnie z monitami autoryzacji. Jeśli chcesz wdrożyć z repozytorium innego użytkownika, wybierz pozycję Zmień konto.

  15. Jeśli używasz przykładowej aplikacji Node.js rozwidlenia w ramach wymagań wstępnych, użyj następujących ustawień dla organizacji, repozytorium i gałęzi.

    Ustawienie Wartość
    Organizacja <your-GitHub-organization>
    Repozytorium nodejs-frontend
    Oddział main
  16. Wybierz pozycję Zapisz.

  17. Powtórz te same kroki dla aplikacji internetowej zaplecza. W poniższej tabeli podano ustawienia Centrum wdrażania.

    Ustawienie Wartość
    Organizacja <your-GitHub-organization>
    Repozytorium nodejs-backend
    Oddział main

7. Używanie jednostki usługi do wdrożenia funkcji GitHub Actions

Konfiguracja centrum wdrażania utworzyła domyślny plik przepływu pracy w każdym z przykładowych repozytoriów, ale domyślnie używa profilu publikowania, który używa podstawowego uwierzytelniania. Ponieważ podstawowe uwierzytelnianie zostało wyłączone, jeśli sprawdzisz kartę Dzienniki w Centrum wdrażania, zobaczysz, że automatyczne wyzwolenie wdrożenia powoduje wystąpienie błędu. Należy zmodyfikować plik przepływu pracy, aby używać jednostki usługi do uwierzytelniania w usłudze App Service. Aby uzyskać przykładowe przepływy pracy, zobacz Dodawanie pliku przepływu pracy do repozytorium GitHub.

  1. Otwórz jedno z rozwidlonych repozytoriów GitHub i przejdź do <repo-name>/.github/workflows/ katalogu.

  2. Wybierz automatycznie wygenerowany plik przepływu pracy, a następnie wybierz przycisk "ołówek" w prawym górnym rogu, aby edytować plik. Zastąp zawartość następującym tekstem, który zakłada, że utworzono wcześniej wpisy tajne usługi GitHub dla poświadczeń. Zaktualizuj symbol zastępczy w <web-app-name> sekcji "env", a następnie zatwierdź bezpośrednio w gałęzi głównej. To zatwierdzenie wyzwala akcję usługi GitHub w celu ponownego uruchomienia i wdrożenia kodu, tym razem przy użyciu jednostki usługi do uwierzytelniania.

    name: Build and deploy Node.js app to Azure Web App
    
    on:
      push:
        branches:
          - main
      workflow_dispatch:
    
    env:
      AZURE_WEBAPP_NAME: <web-app-name>   # set this to your application's name
      NODE_VERSION: '18.x'                # set this to the node version to use
      AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v2
    
          - name: Set up Node.js version
            uses: actions/setup-node@v1
            with:
              node-version: ${{ env.NODE_VERSION }}
    
          - name: npm install, build
            run: |
              npm install
              npm run build --if-present
    
          - name: Upload artifact for deployment job
            uses: actions/upload-artifact@v2
            with:
              name: node-app
              path: .
    
      deploy:
        runs-on: ubuntu-latest
        needs: build
        environment:
          url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    
        steps:
          - name: Download artifact from build job
            uses: actions/download-artifact@v2
            with:
              name: node-app
          - uses: azure/login@v1
            with:
              creds: |
                {
                  "clientId": "${{ secrets.AZURE_APP_ID }}",
                  "clientSecret":  "${{ secrets.AZURE_PASSWORD }}",
                  "subscriptionId": "${{ secrets.AZURE_SUBSCRIPTION_ID }}",
                  "tenantId": "${{ secrets.AZURE_TENANT_ID }}"
                }
    
          - name: 'Deploy to Azure Web App'
            id: deploy-to-webapp
            uses: azure/webapps-deploy@v2
            with:
              app-name: ${{ env.AZURE_WEBAPP_NAME }}
              package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
    
          - name: logout
            run: |
              az logout
    
  3. Powtórz ten proces dla pliku przepływu pracy w innym rozwidlonym repozytorium GitHub.

Nowe zatwierdzenia usługi GitHub wyzwalają kolejne wdrożenie dla każdej aplikacji. Tym razem wdrożenie powinno zakończyć się pomyślnie, ponieważ przepływ pracy używa jednostki usługi do uwierzytelniania w witrynach SCM aplikacji.

Aby uzyskać szczegółowe wskazówki dotyczące konfigurowania ciągłego wdrażania z dostawcami, takimi jak GitHub Actions, zobacz Ciągłe wdrażanie w usłudze aplikacja systemu Azure Service.

8. Weryfikowanie połączeń i dostępu do aplikacji

  1. Przejdź do aplikacji internetowej frontonu przy użyciu adresu URL: https://<frontend-app-name>.azurewebsites.net.

  2. W polu tekstowym wprowadź adres URL aplikacji internetowej zaplecza: https://<backend-app-name>.azurewebsites.net. W przypadku prawidłowego skonfigurowania połączeń powinien zostać wyświetlony komunikat "Hello from the backend web app!", który jest całą zawartością aplikacji internetowej zaplecza. Cały ruch wychodzący z aplikacji internetowej frontonu jest kierowany przez sieć wirtualną. Aplikacja internetowa frontonu bezpiecznie łączy się z aplikacją internetową zaplecza za pośrednictwem prywatnego punktu końcowego. Jeśli coś jest nie tak z połączeniami, aplikacja internetowa frontonu ulega awarii.

  3. Spróbuj przejść bezpośrednio do aplikacji internetowej zaplecza przy użyciu adresu URL: https://<backend-app-name>.azurewebsites.net. Powinien zostać wyświetlony komunikat Web App - Unavailable. Jeśli możesz uzyskać dostęp do aplikacji, upewnij się, że skonfigurowano prywatny punkt końcowy i że ograniczenia dostępu dla aplikacji są ustawione tak, aby nie zezwalały na cały ruch dla głównej aplikacji internetowej.

  4. Aby jeszcze bardziej sprawdzić, czy aplikacja internetowa frontonu dociera do aplikacji internetowej zaplecza za pośrednictwem linku prywatnego, połącz się za pośrednictwem protokołu SSH z jednym z wystąpień frontonu. Na potrzeby protokołu SSH uruchom następujące polecenie, które ustanawia sesję SSH w kontenerze internetowym aplikacji i otwiera zdalną powłokę w przeglądarce.

    az webapp ssh --resource-group $groupName --name <frontend-app-name>
    
  5. Po otwarciu powłoki w przeglądarce uruchom polecenie nslookup , aby potwierdzić, że aplikacja internetowa zaplecza jest osiągana przy użyciu prywatnego adresu IP aplikacji internetowej zaplecza. Możesz również uruchomić polecenie curl , aby ponownie zweryfikować zawartość witryny. Zastąp <backend-app-name> ciąg nazwą aplikacji internetowej zaplecza.

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

    Screenshot of SSH session showing how to validate app connections.

    Element nslookup powinien zostać rozpoznany jako prywatny adres IP aplikacji internetowej zaplecza. Prywatny adres IP powinien być adresem z sieci wirtualnej. Aby potwierdzić prywatny adres IP, przejdź do strony Sieć aplikacji internetowej zaplecza.

    Screenshot of App Service Networking page showing the inbound IP of the app.

  6. Powtórz te same nslookup polecenia i curl z innego terminalu (taki, który nie jest sesją SSH w wystąpieniach frontonu).

    Screenshot of an external terminal doing a nslookup and curl of the back-end web app.

    Funkcja nslookup zwraca publiczny adres IP aplikacji internetowej zaplecza. Ponieważ publiczny dostęp do aplikacji internetowej zaplecza jest wyłączony, jeśli spróbujesz uzyskać publiczny adres IP, zostanie wyświetlony błąd odmowy dostępu. Ten błąd oznacza, że ta witryna nie jest dostępna z publicznego Internetu, co jest zamierzonym zachowaniem. Nie nslookup jest rozpoznawany jako prywatny adres IP, ponieważ można go rozpoznać tylko z sieci wirtualnej za pośrednictwem prywatnej strefy DNS. Tylko aplikacja internetowa frontonu znajduje się w sieci wirtualnej. Jeśli spróbujesz uruchomić curl aplikację internetową zaplecza z terminalu zewnętrznego, zwracany kod HTML zawiera Web App - Unavailableelement . Ten błąd wyświetla kod HTML strony błędu, która była wyświetlana wcześniej podczas próby przechodzenia do aplikacji internetowej zaplecza w przeglądarce.

9. Czyszczenie zasobów

W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli te zasoby nie będą raczej potrzebne w przyszłości, usuń grupę zasobów, uruchamiając następujące polecenie w usłudze Cloud Shell.

az group delete --name myresourcegroup

Wykonanie tego polecenia może potrwać kilka minut.

Często zadawane pytania

Czy istnieje alternatywa dla wdrożenia przy użyciu jednostki usługi?

Ponieważ w tym samouczku wyłączono uwierzytelnianie podstawowe, nie można uwierzytelniać się w witrynie SCM zaplecza przy użyciu nazwy użytkownika i hasła, a nie możesz też mieć profilu publikowania. Zamiast jednostki usługi można również użyć Połączenie OpenID.

Co się stanie po skonfigurowaniu wdrożenia funkcji GitHub Actions w usłudze App Service?

Platforma Azure automatycznie generuje plik przepływu pracy w repozytorium. Nowe zatwierdzenia w wybranym repozytorium i gałęzi są teraz wdrażane w sposób ciągły w aplikacji usługi App Service. Zatwierdzenia i wdrożenia można śledzić na karcie Dzienniki .

Domyślny plik przepływu pracy, który używa profilu publikowania do uwierzytelniania w usłudze App Service, jest dodawany do repozytorium GitHub. Ten plik można wyświetlić, przechodząc do <repo-name>/.github/workflows/ katalogu.

Czy bezpieczne jest pozostawienie publicznie dostępnego zaplecza SCM?

Po zablokowaniu dostępu ftp i SCM zapewnia, że tylko podmioty zabezpieczeń wspierane przez firmę Microsoft Mogą uzyskiwać dostęp do punktu końcowego SCM, mimo że jest on publicznie dostępny. To ustawienie powinno uspokoić, że aplikacja internetowa zaplecza jest nadal bezpieczna.

Czy istnieje sposób wdrożenia bez otwierania lokacji SCM zaplecza?

Jeśli interesuje Cię włączanie publicznego dostępu do witryny SCM lub zasady są ograniczone przez zasady, rozważ inne opcje wdrażania usługi App Service, takie jak uruchamianie z pakietu ZIP.

Jak wdrożyć tę architekturę za pomocą usługi ARM/Bicep?

Zasoby utworzone w tym samouczku można wdrożyć przy użyciu szablonu ARM/Bicep. Aplikacja połączona z szablonem aplikacji internetowej zaplecza Bicep umożliwia utworzenie bezpiecznego rozwiązania aplikacji N-warstwowej.

Aby dowiedzieć się, jak wdrażać szablony usługi ARM/Bicep, zobacz How to deploy resources with Bicep and Azure CLI (Jak wdrażać zasoby przy użyciu interfejsu wiersza polecenia platformy Azure i aplikacji Bicep).

Następne kroki