Tutorial: Membuat aplikasi N-tingkat yang aman di Azure App Service

Banyak aplikasi memiliki lebih dari satu komponen. Misalnya, Anda mungkin memiliki frontend yang dapat diakses secara publik dan terhubung ke API backend atau aplikasi web. Sumber daya backend mungkin terhubung ke database, akun penyimpanan, brankas kunci, komputer virtual lain, atau kombinasi sumber daya ini. Arsitektur ini adalah fondasi aplikasi N-tingkat. Penting bahwa aplikasi seperti ini dirancang untuk melindungi sumber daya backend sejauh mungkin.

Tutorial ini menjelaskan cara menyebarkan aplikasi N-tingkat yang aman dengan aplikasi web frontend yang terhubung ke aplikasi web lain yang terisolasi jaringan. Seluruh lalu lintas diisolasi dalam Microsoft Azure Virtual Network Anda dengan integrasi Virtual Network dan titik akhir privat. Untuk panduan lebih komprehensif yang mencakup skenario lain, lihat:

Di tutorial ini, Anda akan:

  • Membuat jaringan virtual dan subnet untuk integrasi jaringan virtual App Service
  • Membuat zona DNS privat dan titik akhir privat
  • Mengonfigurasi integrasi jaringan virtual di App Service
  • Menonaktifkan autentikasi dasar di App service
  • Menerapkan secara berkelanjutan ke aplikasi web backend yang diamankan secara ketat

Prasyarat

Tutorial ini menggunakan dua sampel aplikasi Node.js yang dihosting di GitHub. Jika Anda belum memiliki akun GitHub, buat akun secara gratis.

Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.

Untuk menyelesaikan tutorial ini:

Tinjau arsitektur skenario

Tutorial ini menunjukkan cara mengonfigurasi arsitektur yang diilustrasikan dalam diagram berikut. Skenario ini mewakili salah satu kemungkinan konfigurasi N-tingkat di App Service. Anda dapat menggunakan konsep yang tercakup dalam tutorial ini untuk membangun aplikasi N-tingkat yang lebih kompleks.

Diagram arsitektur untuk App Service tingkat N, termasuk integrasi jaringan virtual dengan aplikasi frontend dan titik akhir privat di backend.

  • Arsitektur memiliki jaringan virtual yang berisi dua subnet. Satu subnet terintegrasi dengan aplikasi web frontend, dan subnet lainnya memiliki titik akhir privat untuk aplikasi web backend. Jaringan virtual memblokir semua lalu lintas jaringan masuk, kecuali lalu lintas yang menargetkan aplikasi frontend terintegrasi.

  • Aplikasi web frontend diintegrasikan ke dalam jaringan virtual dan dapat diakses dari internet publik.

  • Aplikasi web backend hanya dapat diakses melalui titik akhir privat di jaringan virtual.

  • Titik akhir privat terintegrasi dengan aplikasi web backend dan membuat aplikasi web dapat diakses melalui alamat IP privat.

  • Zona Private DNS memungkinkan resolusi nama DNS ke alamat IP titik akhir privat.

Catatan

Untuk mengonfigurasi integrasi jaringan virtual dan titik akhir privat, Anda memerlukan Basic tingkat Azure App Service atau tingkat yang lebih tinggi. Tingkat Gratis tidak mendukung fitur-fitur ini.

Skenario dalam tutorial ini menyediakan perilaku berikut:

  • Lalu lintas publik ke aplikasi backend diblokir.
  • Lalu lintas keluar dari App Service dirutekan ke jaringan virtual dan dapat mencapai aplikasi backend.
  • App Service dapat melakukan resolusi DNS ke aplikasi backend.

Membuat dua aplikasi web

Anda memerlukan dua aplikasi web App Service, satu untuk frontend dan satu untuk backend. Aplikasi dapat berjalan di lokasi wilayah yang sama. Untuk menyiapkan integrasi jaringan virtual dan bekerja dengan titik akhir privat, gunakan setidaknya tingkat Basic Azure App Service. Anda mengonfigurasi integrasi jaringan virtual dan pengaturan lainnya nanti.

  1. Buat grup sumber daya untuk mengelola semua sumber daya untuk tutorial ini.

    Atur placeholder <resource-group> menjadi nama grup sumber daya baru Anda, seperti zava-resources. Atur placeholder <region-location> ke wilayah untuk grup sumber daya baru Anda, seperti 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
    

    Untuk informasi selengkapnya, lihat referensi perintah az group create .

  2. Buat paket App Service untuk sumber daya Anda.

    Atur placeholder <app-service-plan> menjadi nama untuk paket App Service baru Anda, seperti zava-app-service-plan.

    Contoh tutorial menetapkan parameter --sku ke P1V3 (Premium V3). Anda dapat menggunakan nilai ini atau menentukan SKU yang berbeda. SKU harus mendukung fitur jaringan yang diperlukan untuk tutorial ini. Pilih tingkat Dasar atau yang lebih tinggi.

    # 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
    

    Untuk informasi selengkapnya, lihat referensi perintah az appservice plan create .

  3. Buat aplikasi web frontend dan backend.

    Contoh tutorial membuat dua sampel Node.js aplikasi, di mana versi bahasa runtime adalah NODE:24-lts. Jika Anda lebih suka menggunakan aplikasi Anda sendiri, sesuaikan nilai parameter --runtime<language-version>. Anda dapat menjalankan az webapp list-runtimes perintah untuk daftar runtime yang tersedia:

    az webapp list-runtimes
    

    Atur placeholder <frontend-app-name> menjadi nama untuk aplikasi web frontend baru Anda, seperti zava-frontend-app. Nama harus unik secara global dan terdiri dari karakter yang valid (a-z, 0-9, -). Begitu pula, atur placeholder <backend-app-name> menjadi nama untuk aplikasi web backend baru Anda, seperti 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"
    

    Untuk informasi selengkapnya, lihat referensi perintah az webapp create .

Buat infrastruktur jaringan.

Infrastruktur jaringan virtual terdiri dari sumber daya berikut:

  • Instans Microsoft Azure Virtual Network
  • Subnet untuk integrasi jaringan virtual App Service
  • Subnet lain untuk titik akhir privat
  • Zona Azure Private DNS
  • Titik akhir privat
  1. Membuat Azure Virtual Network.

    Atur placeholder <virtual-network-name> ke nama jaringan virtual baru Anda, seperti zava-virtual-network. Nama harus unik secara global.

    # 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
    

    Untuk informasi selengkapnya, lihat referensi perintah az network vnet create .

  2. Buat subnet untuk integrasi jaringan virtual App Service.

    Atur placeholder <network-integration-subnet> menjadi nama subnet baru Anda yang mendukung integrasi jaringan virtual, seperti zava-integration-subnet.

    Untuk App Service, subnet integrasi jaringan virtual disarankan untuk memiliki blok CIDR minimal /26. /24 sudah lebih dari cukup. --delegations Microsoft.Web/serverfarms menetapkan bahwa subnet didelegasikan untuk integrasi jaringan virtual App Service.

    # 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
    

    Untuk informasi selengkapnya, lihat referensi perintah az network vnet subnet create .

  3. Buat subnet lain untuk titik akhir privat.

    Atur placeholder <private-endpoint-subnet> menjadi nama subnet baru Anda yang mendukung private endpoint, seperti 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
    

    Untuk subnet private endpoint, Anda harus menonaktifkan kebijakan jaringan private endpoint dengan menetapkan flag --disable-private-endpoint-network-policies ke true. Untuk informasi selengkapnya, lihat parameter Opsional untuk perintah az network vnet subnet create .

    Catatan

    Bendera --private-endpoint-network-policies mungkin segera menggantikan --disable-private-endpoint-network-policies bendera.

  4. Buat zona Azure Private DNS.

    Atur placeholder <private-zone-name> menjadi nama untuk zona Private DNS baru Anda, seperti 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
    

    Untuk informasi selengkapnya, lihat referensi perintah az network vnet subnet create . Untuk informasi selengkapnya tentang mengonfigurasi zona Private DNS, lihat konfigurasi zona DNS layanan Azure.

    Catatan

    Jika Anda membuat titik akhir privat di portal Azure, zona Azure Private DNS dibuat untuk konfigurasi Anda secara otomatis. Untuk konsistensi prosedural dalam tutorial ini, Anda membuat zona Private DNS dan titik akhir privat secara terpisah dengan menggunakan Azure CLI.

  5. Tautkan zona Private DNS ke jaringan virtual.

    Atur placeholder <dns-link-name> menjadi nama untuk tautan DNS baru Anda, seperti 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
    

    Untuk informasi selengkapnya, lihat referensi perintah az network private-dns link vnet create .

  6. Di subnet endpoint privat pada jaringan virtual Anda, buat endpoint privat untuk aplikasi web backend Anda.

    Atur placeholder <private-endpoint-name> menjadi nama titik akhir privat baru untuk aplikasi web backend Anda, seperti zava-backend-endpoint. Atur placeholder <service-connection-name> menjadi nama koneksi layanan baru, seperti 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
    

    Untuk informasi selengkapnya, lihat referensi perintah buat titik akhir privat jaringan az .

  7. Tautkan titik akhir privat ke zona Private DNS dengan grup Zona DNS untuk titik akhir privat aplikasi web backend.

    Atur placeholder <dns-zone-group-name> ke nama grup zona DNS baru Anda, misalnya zava-dns-zone-group. Grup zona DNS membantu pembaruan otomatis zona Private DNS saat titik akhir privat diperbarui.

    # 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
    

    Untuk informasi selengkapnya, lihat referensi perintah az network private-endpoint dns-zone-group create .

  8. Pastikan akses langsung ke endpoint privat Anda ditolak.

    Saat Anda membuat titik akhir privat untuk aplikasi App Service, akses publik secara implisit dinonaktifkan. Jika Anda mencoba mengakses aplikasi web backend dengan menggunakan URL defaultnya, akses Anda ditolak.

    Di browser, masukkan URL default untuk aplikasi web backend Anda, seperti <backend-app-name>.azurewebsites.net.

    Pesan browser menunjukkan akses langsung ditolak:

    Cuplikan layar pesan browser saat akses langsung ke aplikasi backend dilarang.

    Untuk informasi selengkapnya tentang pembatasan akses App Service dengan titik akhir privat, lihat Pembatasan akses Azure App Service.

Mengonfigurasi integrasi jaringan virtual

Setelah membuat infrastruktur jaringan virtual, Anda dapat menyiapkan integrasi jaringan virtual di aplikasi web frontend Anda. Integrasi jaringan virtual memungkinkan lalu lintas keluar mengalir langsung ke jaringan virtual. Secara default, hanya lalu lintas IP lokal yang ditentukan dalam rute protokol Ruang Alamat Privat RFC-1918 > ke jaringan virtual. Tingkat perutean inilah yang Anda butuhkan untuk mengaktifkan titik akhir privat.

Aktifkan integrasi jaringan virtual di aplikasi web frontend Anda. Perintah berikut mengasumsikan subnet dan aplikasi web terletak di grup sumber daya yang sama.

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

Untuk informasi selengkapnya, lihat referensi perintah az webapp vnet-integration add .

Untuk merutekan semua lalu lintas ke jaringan virtual, lihat Mengelola perutean integrasi jaringan virtual. Perutean semua lalu lintas juga dapat digunakan jika Anda ingin merutekan lalu lintas internet melalui jaringan virtual Anda, seperti melalui Microsoft Azure Virtual Network NAT atau Azure Firewall.

Mengaktifkan penyebaran ke aplikasi web backend

Karena aplikasi web backend Anda tidak dapat diakses secara publik, Anda harus mengizinkan alat penyebaran berkelanjutan menjangkau aplikasi Anda dengan membuat situs SCM dapat diakses secara publik dari internet. Aplikasi web utama itu sendiri dapat terus menolak semua lalu lintas.

  1. Aktifkan akses publik untuk aplikasi web back-end.

    az webapp update --resource-group $resourceGroupName --name $backendAppName --set publicNetworkAccess=Enabled
    
  2. Atur tindakan untuk aturan yang tidak sesuai pada aplikasi web utama agar menolak semua trafik.

    Pengaturan ini menolak akses publik ke aplikasi web utama meskipun pengaturan akses aplikasi umum diatur untuk mengizinkan akses publik.

    az resource update --resource-group $resourceGroupName --name $backendAppName --namespace Microsoft.Web \
       --resource-type sites --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Deny
    
  3. Atur tindakan untuk aturan yang tidak cocok pada situs SCM agar mengizinkan semua trafik.

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

Membatasi akses FTP dan SCM

Karena situs SCM backend Anda dapat diakses secara publik, Anda perlu menguncinya dengan keamanan yang lebih baik.

  1. Nonaktifkan akses FTP untuk aplikasi web frontend dan backend:

    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. Nonaktifkan akses autentikasi dasar ke port WebDeploy dan situs alat SCM/tingkat lanjut untuk kedua aplikasi web:

    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
    

Saat menonaktifkan autentikasi dasar di App Service, Anda membatasi akses ke titik akhir FTP dan SCM kepada pengguna yang terdaftar di Microsoft Entra ID. Tindakan ini semakin mengamankan aplikasi Anda. Untuk informasi selengkapnya tentang menonaktifkan autentikasi dasar termasuk cara menguji dan memantau login, lihat Menonaktifkan autentikasi dasar di App Service.

Mengonfigurasi penyebaran berkelanjutan dengan GitHub Actions

Untuk prosedur ini, Anda memerlukan dua aplikasi yang siap disebarkan ke aplikasi frontend dan backend App Service Anda. Untuk mengakses aplikasi web, Anda memerlukan perwakilan layanan dan penyebaran berkelanjutan dengan GitHub Actions.

Mendapatkan aplikasi web untuk pengujian penyebaran

Repositori Azure Samples di GitHub menyediakan aplikasi sampel Node.js untuk penerapan.

  1. Di browser, buka aplikasi sampel Node.js Backend.

    Fork repositori GitHub sehingga Anda memiliki salinan Anda sendiri untuk membuat perubahan. Contoh ini membuat aplikasi 'Halo Dunia'. Anda menyebarkan aplikasi ini ke aplikasi web backend Anda.

  2. Ulangi proses yang sama untuk aplikasi sampel Node.js Frontend.

    Fork repositori GitHub sehingga Anda memiliki salinan Anda sendiri untuk membuat perubahan. Sampel ini membangun aplikasi web yang mengambil dan menampilkan konten URL. Anda menyebarkan aplikasi ini ke aplikasi web frontend Anda.

Mengonfigurasi prinsipal layanan

Anda memerlukan perwakilan layanan untuk aplikasi web frontend dan aplikasi web backend Anda.

  1. Buat prinsipal layanan.

    Atur placeholder <service-principal-name> ke nama prinsipal layanan baru Anda, seperti zava-service-principal.

    Ganti nilai parameter lainnya <placeholder> dengan informasi untuk sumber daya Anda sendiri.

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

    Output adalah objek JSON dengan kredensial penetapan peran yang menyediakan akses ke aplikasi App Service Anda.

    {
      "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 menyertakan kata sandi perwakilan layanan Anda, yang hanya terlihat saat ini.

    Petunjuk

    Ini adalah praktik yang baik untuk memberikan akses minimum. Dalam contoh ini, cakupan terbatas hanya pada aplikasi, bukan seluruh grup sumber daya.

  2. Salin objek JSON agar Anda memiliki catatan service principal name Anda.

  3. Berikan kredensial perwakilan layanan Anda ke operasi Masuk Azure sebagai bagian dari alur kerja GitHub Actions Anda.

    Simpan kredensial sebagai secret GitHub yang dirujuk dalam alur kerja Anda.

    1. Di browser, buka repositori fork untuk aplikasi Node.js backend Anda di GitHub.

    2. Buka Pengaturan> RahasiaKeamanan> danTindakan>.

    3. Pilih Rahasia repositori baru dan buat rahasia untuk setiap pengaturan berikut.

      Gunakan nilai dari output JSON Anda.

      Pengaturan Nilai Example
      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. Ulangi proses ini untuk repositori fork untuk aplikasi Node.js frontend Anda di GitHub.

Menyiapkan penyebaran berkelanjutan dengan GitHub Actions

Anda dapat menyiapkan penyebaran berkelanjutan dengan GitHub Actions.

  1. Di portal Azure, buka halaman Gambaran umum untuk aplikasi web frontend Anda.

  2. Di menu sebelah kiri, pilihPusat Penyebaran>.

  3. Di tab Settings, atur opsi Source ke GitHub:

    Screenshot yang menunjukkan cara memilih sumber penyebaran untuk aplikasi web frontend di portal Azure.

  4. Jika Anda menyebarkan dari GitHub untuk pertama kalinya, pilih Otorisasi dan ikuti permintaan otoritasi. Jika Anda ingin menyebar dari repositori pengguna yang berbeda, pilih Ubah Akun.

  5. Setelah Anda mengotorisasi akun Azure Anda dengan GitHub, pilih Organization, Repository, dan Branch untuk mengonfigurasi CI/CD. Jika Anda tidak dapat menemukan organisasi atau repositori, Anda mungkin perlu mengaktifkan lebih banyak izin pada GitHub. Untuk informasi selengkapnya, lihat Mengelola akses pengguna ke repositori organisasi Anda.

    Pengaturan Nilai
    Organisasi <your-GitHub-organization>
    Repositori <forked-repository-name>
    Cabang utama
  6. Pilih Simpan.

  7. Ulangi proses ini untuk aplikasi web backend Anda dan repositori fork yang sesuai.

Memvalidasi koneksi dan akses aplikasi

Sekarang Anda siap untuk memeriksa koneksi dan akses ke aplikasi web frontend dan backend Anda.

  1. Coba telusuri langsung ke aplikasi web backend Anda dengan URL-nya, https://<backend-app-name>.azurewebsites.net.

    Anda akan melihat pesan browser berikut:

    Cuplikan layar pesan browser saat akses langsung ke aplikasi backend dilarang.

    Jika Anda dapat menjangkau aplikasi, periksa konfigurasi Anda:

    • Pastikan private endpoint dikonfigurasi dengan benar.

    • Konfirmasikan pembatasan akses untuk aplikasi Anda diatur untuk menolak semua lalu lintas untuk aplikasi web utama.

  2. Sekarang coba telusuri langsung ke aplikasi web frontend Anda dengan URL-nya, https://<frontend-app-name>.azurewebsites.net.

    Saat koneksi berhasil, Anda akan melihat halaman berikut:

    Cuplikan layar koneksi yang berhasil ke aplikasi frontend yang berjalan di browser.

  3. Dalam kotak URL, masukkan URL untuk aplikasi web back-end Anda, https://<backend-app-name>.azurewebsites.net, lalu pilih Fetch.

    Jika Anda menyiapkan koneksi dengan benar, halaman akan di-refresh untuk menampilkan konten pesan dari aplikasi web backend:

    Cuplikan layar konten browser setelah aplikasi frontend mencoba akses ke aplikasi backend.

    Semua lalu lintas outbound dari aplikasi web frontend dirutekan melalui jaringan virtual. Aplikasi web frontend Anda terhubung dengan aman ke aplikasi web backend Anda melalui titik akhir privat.

    Jika ada yang salah dengan koneksi Anda, Anda akan melihat pesan Kesalahan 403 - Terlarang dalam output.

Membuat sesi SSH dan membuka shell jarak jauh

Verifikasi bahwa aplikasi web frontend dapat mengakses aplikasi web backend melalui tautan privat dengan menggunakan SSH ke instans frontend.

  1. Buat sesi SSH ke kontainer web aplikasi Anda dan buka shell jarak jauh di browser Anda:

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

    Untuk informasi selengkapnya, lihat referensi perintah az webapp ssh .

  2. Setelah shell terbuka di browser Anda, konfirmasikan aplikasi web backend Anda sedang dijangkau dengan menggunakan IP privat aplikasi web backend Anda.

    Dalam perintah berikut, ganti <placeholder> nilai parameter dengan informasi untuk sumber daya Anda sendiri.

    1. Jalankan nslookup perintah:

      nslookup <backend-app-name>.azurewebsites.net
      
    2. Jalankan curl perintah untuk memvalidasi konten situs lagi:

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

    Cuplikan layar sesi SSH ke instans frontend yang menunjukkan cara memvalidasi koneksi aplikasi ke backend.

    Perintah nslookup harus mengarah ke alamat IP privat aplikasi web backend Anda. Alamat IP privat harus berupa alamat dari jaringan virtual Anda.

    Anda dapat mengonfirmasi alamat IP privat Anda di portal Azure. Buka halaman Jaringan Pengaturan> untuk aplikasi web backend Anda.

    Screenshot yang memperlihatkan halaman Jaringan untuk aplikasi web di portal Azure dengan alamat IP masuk disorot.

  3. Ulangi perintah nslookup dan curl yang sama dari terminal lain (yang bukan merupakan sesi SSH pada instance frontend Anda).

    Cuplikan layar terminal eksternal yang menjalankan perintah nslookup dan curl untuk aplikasi web backend yang menunjukkan akses dilarang.

    Perintah nslookup mengembalikan IP publik untuk aplikasi web backend. Karena akses publik ke aplikasi web backend dinonaktifkan, jika Anda mencoba menjangkau IP publik, Anda mendapatkan kesalahan akses ditolak. Kesalahan ini berarti situs tidak dapat diakses dari internet publik, yang merupakan perilaku yang dimaksudkan.

    Perintah nslookup tidak diselesaikan ke IP privat karena alamat hanya dapat diselesaikan dari dalam jaringan virtual melalui zona DNS privat. Hanya aplikasi web frontend yang berada dalam jaringan virtual. Jika Anda mencoba menjalankan curl perintah pada aplikasi web backend dari terminal eksternal, HTML yang dikembalikan berisi pesan Kesalahan 403, Terlarang - Aplikasi web yang telah Anda coba jangkau telah memblokir akses Anda. Beberapa terminal juga menampilkan HTML yang sama dengan halaman kesalahan yang dikembalikan saat Anda mencoba mengakses aplikasi web backend secara langsung.

Membersihkan sumber daya

Di langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam grup sumber daya. Jika Anda tidak ingin membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut ini di Cloud Shell.

<placeholder> Ganti nilai parameter dengan informasi untuk sumber daya Anda sendiri:

az group delete --name <resource-group>

Perintah ini bisa memakan waktu beberapa menit untuk diselesaikan.

Tanya jawab umum

Dalam tutorial ini, Anda menyebarkan infrastruktur dasar untuk mendukung aplikasi web N-tingkat yang aman. App Service menyediakan fitur yang dapat membantu Anda memastikan Anda menjalankan aplikasi yang mengikuti praktik dan rekomendasi terbaik keamanan.

Bagian ini berisi jawaban atas pertanyaan yang sering diajukan yang dapat membantu Anda mengamankan aplikasi lebih lanjut dan menyebarkan dan mengelola sumber daya Anda sesuai dengan praktik terbaik.

Menerapkan dengan metode lain selain menggunakan service principal

Dalam tutorial ini, Anda menonaktifkan autentikasi dasar. Anda tidak dapat mengautentikasi dengan situs SCM backend dengan menggunakan nama pengguna dan kata sandi, atau dengan menggunakan profil publikasi. Namun, alih-alih mengautentikasi menggunakan perwakilan layanan, Anda dapat menggunakan kredensial OpenID Connect.

Mengonfigurasi penyebaran GitHub Actions di App Service

Azure membuat file alur kerja secara otomatis di repositori Anda. Komit baru dalam repositori dan cabang yang dipilih diterapkan secara berkelanjutan ke aplikasi App Service Anda. Anda dapat melacak penerapan dan penyebaran pada tab Logs di GitHub.

File alur kerja default yang menggunakan profil penerbitan untuk mengautentikasi ke App Service ditambahkan ke repositori GitHub Anda. Anda dapat melihat file ini dengan masuk ke <repo-name>/.github/workflows/ direktori.

Konfirmasi akses publik yang aman ke situs backend SCM

Saat Anda mengunci akses FTP dan SCM, Anda dapat memastikan bahwa hanya prinsipal yang didukung Microsoft Entra yang dapat mengakses titik akhir SCM, meskipun titik akhir tersebut dapat diakses secara publik. Pengaturan ini membantu meyakinkan Anda bahwa aplikasi web backend Anda masih aman.

Menyebarkan tanpa situs backend SCM yang terbuka

Jika Anda khawatir tentang mengaktifkan akses publik ke situs SCM, atau Anda memiliki pembatasan kebijakan, pertimbangkan opsi penyebaran App Service lainnya seperti berjalan dari paket ZIP.

Terapkan arsitektur ini menggunakan templat

Sumber daya yang Anda buat dalam tutorial ini dapat disebarkan dengan menggunakan templat Azure Resource Manager (templat ARM) atau templat Bicep. Aplikasi yang terhubung ke file Bicep aplikasi web backend memungkinkan Anda untuk membuat solusi aplikasi berlapis N yang aman.

Untuk mempelajari cara menyebarkan templat ARM dan Bicep, lihat Deploy Bicep files with the Azure CLI.