Tutorial: Mengisolasi komunikasi back-end di Azure App Service dengan menggunakan integrasi jaringan virtual

Dalam artikel ini, Anda mengonfigurasi aplikasi App Service dengan komunikasi yang aman dan terisolasi jaringan ke layanan back-end. Contoh skenario yang digunakan ada di Tutorial: Koneksi Aman untuk Cognitive Service dari App Service menggunakan Key Vault. Setelah selesai, Anda memiliki aplikasi App Service yang mengakses Key Vault dan Foundry Tools melalui jaringan virtual Azure. Tidak ada lalu lintas lain yang diizinkan untuk mengakses sumber daya back-end tersebut. Semua lalu lintas akan diisolasi dalam jaringan virtual Anda melalui integrasi jaringan virtual dan titik akhir privat.

Dalam layanan multi-penyewa, lalu lintas jaringan keluar dari aplikasi App Service Anda ke layanan Azure lainnya berbagi lingkungan yang sama dengan aplikasi lain atau bahkan langganan lainnya. Meskipun lalu lintas itu sendiri dapat dienkripsi, skenario tertentu mungkin memerlukan tingkat keamanan ekstra melalui isolasi komunikasi back-end dari lalu lintas jaringan lainnya. Skenario ini biasanya dapat diakses oleh perusahaan besar dengan tingkat keahlian yang tinggi, tetapi App Service menempatkannya dalam jangkauan dengan integrasi jaringan virtual.

Diagram yang memperlihatkan arsitektur skenario.

Dalam arsitektur ini:

  • Lalu lintas publik ke layanan back-end diblokir.
  • Lalu lintas outbound dari App Service dirutekan ke jaringan virtual dan dapat menjangkau layanan back-end.
  • App Service dapat melakukan resolusi DNS ke layanan back-end melalui zona DNS privat.

Apa yang akan Anda pelajari:

  • Membuat jaringan virtual dan subnet untuk integrasi jaringan virtual App Service
  • Membuat zona DNS privat
  • Buat Titik Akhir Privat
  • Mengonfigurasi integrasi jaringan virtual di App Service

Prasyarat

Membuat jaringan virtual dan subnet

  1. Buat jaringan virtual. Ganti <nama> jaringan virtual dengan nama yang unik.

    # Save the virtual network name as a 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. Buat subnet untuk integrasi jaringan virtual 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 --private-endpoint-network-policies Enabled
    

    Untuk App Service, rekomendasinya adalah agar subnet integrasi jaringan virtual memiliki blok /26 CIDR minimal. (Lihat Persyaratan subnet integrasi jaringan virtual.) /24 lebih dari cukup. --delegations Microsoft.Web/serverfarms menetapkan bahwa subnet didelegasikan untuk integrasi jaringan virtual App Service.

  3. Buat subnet lain untuk titik akhir privat.

    az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --private-endpoint-network-policies Disabled
    

    Untuk subnet titik akhir privat, Anda perlu menonaktifkan kebijakan jaringan titik akhir privat.

Membuat zona DNS privat

Karena sumber daya Key Vault dan Foundry Tools Anda akan terletak di belakang titik akhir privat, Anda perlu menentukan zona DNS privat untuk mereka. Zona ini digunakan untuk menghosting catatan DNS untuk titik akhir privat dan memungkinkan klien menemukan layanan back-end berdasarkan nama.

  1. Buat dua zona DNS privat, satu untuk sumber daya Foundry Tools Anda dan satu untuk brankas kunci Anda.

    az network private-dns zone create --resource-group $groupName --name privatelink.cognitiveservices.azure.com
    az network private-dns zone create --resource-group $groupName --name privatelink.vaultcore.azure.net
    

    Untuk informasi selengkapnya tentang pengaturan ini, lihat Konfigurasi DNS Titik Akhir Privat Azure.

  2. Tautkan zona DNS privat ke jaringan virtual.

    az network private-dns link vnet create --resource-group $groupName --name cognitiveservices-zonelink --zone-name privatelink.cognitiveservices.azure.com --virtual-network $vnetName --registration-enabled False
    az network private-dns link vnet create --resource-group $groupName --name vaultcore-zonelink --zone-name privatelink.vaultcore.azure.net --virtual-network $vnetName --registration-enabled False
    

Buat Titik Akhir Privat

  1. Di subnet titik akhir privat jaringan virtual Anda, buat titik akhir privat untuk sumber daya Foundry Tools Anda.

    # Get Foundry Tools resource ID
    csResourceId=$(az cognitiveservices account show --resource-group $groupName --name $csResourceName --query id --output tsv)
    
    az network private-endpoint create --resource-group $groupName --name securecstext-pe --location $region --connection-name securecstext-pc --private-connection-resource-id $csResourceId --group-id account --vnet-name $vnetName --subnet private-endpoint-subnet
    
  2. Buat grup zona DNS untuk titik akhir privat Foundry Tools. Grup zona DNS adalah tautan antara zona DNS privat dan titik akhir privat. Tautan ini membantu Anda memperbarui zona DNS privat secara otomatis saat ada pembaruan ke titik akhir privat.

    az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securecstext-pe --name securecstext-zg --private-dns-zone privatelink.cognitiveservices.azure.com --zone-name privatelink.cognitiveservices.azure.com
    
  3. Blokir lalu lintas publik ke sumber daya Foundry Tools.

    az rest --uri $csResourceId?api-version=2024-10-01 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json'
    
    # Repeat the following command until the output is "Succeeded"
    az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningState
    

    Nota

    Pastikan status penyediaan perubahan Anda adalah "Succeeded". Anda kemudian dapat mengamati perubahan perilaku di aplikasi sampel. Anda masih dapat memuat aplikasi, tetapi jika Anda mencoba memilih tombol Deteksi , Anda mendapatkan HTTP 500 kesalahan. Aplikasi ini telah kehilangan konektivitasnya ke sumber daya Foundry Tools melalui jaringan bersama.

  4. Ulangi langkah-langkah sebelumnya untuk key vault.

    # Create a private endpoint for the key vault
    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    az network private-endpoint create --resource-group $groupName --name securekeyvault-pe --location $region --connection-name securekeyvault-pc --private-connection-resource-id $vaultResourceId --group-id vault --vnet-name $vnetName --subnet private-endpoint-subnet
    # Create a DNS zone group for the endpoint
    az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securekeyvault-pe --name securekeyvault-zg --private-dns-zone privatelink.vaultcore.azure.net --zone-name privatelink.vaultcore.azure.net
    # Block public traffic to the key vault
    az keyvault update --name $vaultName --default-action Deny
    
  5. Paksa pengambilan ulang langsung referensi brankas kunci di aplikasi Anda dengan mengatur ulang pengaturan aplikasi. (Untuk informasi selengkapnya, lihat Rotasi.)

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    

    Nota

    Sekali lagi, Anda dapat mengamati perubahan perilaku di aplikasi sampel. Anda tidak dapat lagi memuat aplikasi karena tidak lagi dapat mengakses referensi penyimpanan kunci. Aplikasi telah kehilangan konektivitasnya ke brankas kunci melalui jaringan bersama.

Dua titik akhir privat hanya dapat diakses oleh klien di dalam jaringan virtual yang Anda buat. Anda bahkan tidak dapat mengakses rahasia di brankas kunci dari halaman Rahasia di portal Microsoft Azure, karena portal mengaksesnya melalui internet publik. (Lihat Mengelola sumber daya yang dikunci.)

Mengonfigurasi integrasi jaringan virtual di aplikasi Anda

  1. Skalakan aplikasi hingga tingkat harga yang didukung. (Lihat Mengintegrasikan aplikasi Anda dengan jaringan virtual Azure.)

    az appservice plan update --name $planName --resource-group $groupName --sku S1
    
  2. Menerapkan HTTPS untuk permintaan masuk. (Langkah ini tidak terkait dengan skenario saat ini, tetapi penting.)

    az webapp update --resource-group $groupName --name $appName --https-only
    
  3. Aktifkan integrasi jaringan virtual di aplikasi Anda.

    az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnet
    

    Integrasi jaringan virtual memungkinkan lalu lintas keluar mengalir langsung ke jaringan virtual. Secara default, hanya lalu lintas IP lokal yang ditentukan dalam RFC-1918 yang dirutekan ke jaringan virtual, yang Anda perlukan untuk titik akhir privat. Untuk informasi tentang perutean semua lalu lintas Anda ke jaringan virtual, lihat Mengelola perutean integrasi jaringan virtual. Anda juga dapat merutekan semua lalu lintas jika Anda ingin merutekan lalu lintas internet melalui jaringan virtual Anda, melalui, misalnya, Azure NAT Gateway atau Azure Firewall.

  4. Di browser, buka <app-name>.azurewebsites.net dan tunggu hingga integrasi diterapkan. Jika Anda mendapatkan kesalahan HTTP 500, tunggu beberapa menit dan coba lagi. Jika Anda dapat memuat halaman dan mendapatkan hasil deteksi, Anda menyambungkan ke endpoint Foundry Tools dengan menggunakan referensi key vault.

    Nota

    Jika Anda terus menerus mendapatkan kesalahan HTTP 500 dalam jangka waktu lama, mungkin membantu mengharuskan pengambilan ulang referensi key vault lagi.

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    

Mengelola sumber daya yang dikunci

Bergantung pada skenario Anda, Anda mungkin tidak dapat mengelola sumber daya yang dilindungi titik akhir privat melalui portal Microsoft Azure, Azure CLI, atau Azure PowerShell (misalnya, Key Vault). Alat-alat ini semuanya melakukan panggilan REST API untuk mengakses sumber daya melalui internet publik, dan diblokir oleh konfigurasi Anda. Berikut adalah beberapa opsi untuk mengakses sumber daya yang dikunci:

  • Untuk Key Vault, tambahkan IP publik dari mesin lokal Anda untuk melihat atau memperbarui rahasia yang dilindungi oleh titik akhir privat.
  • Jika jaringan lokal Anda diperluas ke jaringan virtual Azure melalui gateway VPN atau Azure ExpressRoute, Anda dapat mengelola sumber daya yang dilindungi titik akhir privat langsung dari jaringan lokal Anda.
  • Kelola sumber daya yang dilindungi oleh titik akhir privat melalui jump server di jaringan virtual.
  • Deploy Cloud Shell ke jaringan virtual.

Membersihkan sumber daya

Pada langkah-langkah sebelumnya, Anda membuat sumber daya Azure dalam sebuah grup sumber daya. Jika Anda tidak mengharapkan untuk membutuhkan sumber daya ini di masa mendatang, hapus grup sumber daya dengan menjalankan perintah berikut di Cloud Shell:

az group delete --name $groupName

Perintah ini mungkin perlu waktu satu menit untuk dijalankan.

Langkah selanjutnya