Tutorial: Mengisolasi komunikasi ujung belakang di Azure App Service dengan integrasi Virtual Network
Dalam artikel ini Anda akan mengonfigurasi aplikasi App Service dengan komunikasi yang aman dan terisolasi jaringan ke layanan ujung belakang. Contoh skenario yang digunakan adalah dalam Tutorial: Koneksi Cognitive Service aman dari App Service menggunakan Key Vault. Setelah selesai, Anda memiliki aplikasi App Service yang mengakses layanan Key Vault dan Azure AI melalui jaringan virtual Azure, dan tidak ada lalu lintas lain yang diizinkan untuk mengakses sumber daya back-end tersebut. Semua lalu lintas akan diisolasi dalam jaringan virtual Anda menggunakan integrasi jaringan virtual dan titik akhir privat.
Sebagai 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. Sementara lalu lintas itu sendiri dapat dienkripsi, skenario tertentu mungkin memerlukan tingkat keamanan ekstra dengan mengisolasi komunikasi ujung belakang dari lalu lintas jaringan lain. Skenario ini biasanya dapat diakses oleh perusahaan besar dengan tingkat keahlian yang tinggi, tetapi App Service menempatkannya dalam jangkauan dengan integrasi jaringan virtual.
Dengan arsitektur ini:
- Lalu lintas publik ke layanan ujung belakang diblokir.
- Lalu lintas keluar dari App Service dirutekan ke jaringan virtual dan dapat mencapai layanan back-end.
- App Service dapat melakukan resolusi DNS ke layanan ujung belakang 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
- Konfigurasikan integrasi jaringan virtual di App Service
Prasyarat
Tutorial mengasumsikan bahwa Anda telah mengikuti Tutorial: Koneksi Cognitive Service aman dari App Service menggunakan Key Vault dan membuat aplikasi pendeteksi bahasa.
Tutorial terus menggunakan variabel lingkungan berikut dari tutorial sebelumnya. Pastikan Anda mengaturnya dengan benar.
groupName=myKVResourceGroup
region=westeurope
csResourceName=<cs-resource-name>
appName=<app-name>
vaultName=<vault-name>
Membuat jaringan dan subnet virtual
Membuat jaringan virtual. Ganti <virtual-network-name> dengan nama unik.
# 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
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 --disable-private-endpoint-network-policies false
Untuk App Service, subnet integrasi jaringan virtual disarankan untuk memiliki blok CIDR minimal
/26
(lihat Persyaratan subnet integrasi jaringan virtual)./24
sudah lebih dari cukup.--delegations Microsoft.Web/serverfarms
menetapkan bahwa subnet didelegasikan untuk integrasi jaringan virtual App Service.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 --disable-private-endpoint-network-policies true
Untuk subnet titik akhir privat, Anda harus menonaktifkan kebijakan jaringan titik akhir privat.
Membuat zona DNS privat
Karena sumber daya layanan Key Vault dan Azure AI Anda akan berada di belakang titik akhir privat, Anda perlu menentukan zona DNS privat untuk mereka. Zona ini digunakan untuk menghosting baris DNS untuk titik akhir privat dan memungkinkan klien untuk menemukan layanan ujung belakang berdasarkan nama.
Buat dua zona DNS privat, satu untuk sumber daya layanan Azure AI 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
Menautkan 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
Di subnet titik akhir privat dari jaringan virtual Anda, buat titik akhir privat untuk Cognitive Service Anda.
# Get Cognitive Services 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
Buat grup zona DNS untuk titik akhir privat layanan Azure AI. Grup zona DNS adalah link antara zona DNS privat dan titik akhir privat. Tautan ini membantu Anda memperbarui Zona DNS pribadi 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
Blokir lalu lintas publik ke sumber daya layanan Azure AI.
az rest --uri $csResourceId?api-version=2021-04-30 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat following command until output is "Succeeded" az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningState
Catatan
Pastikan status penyediaan perubahan Anda adalah
"Succeeded"
. Kemudian Anda dapat mengamati perubahan perilaku di aplikasi sampel. Anda masih dapat memuat aplikasi, tetapi jika mencoba mengeklik tombol Deteksi, Anda mendapatkan kesalahanHTTP 500
. Aplikasi ini telah kehilangan konektivitasnya ke sumber daya layanan Azure AI melalui jaringan bersama.Ulangi langkah di atas untuk brankas kunci.
# Create private endpoint for 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 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 key vault az keyvault update --name $vaultName --default-action Deny
Paksa pengambilan ulang 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)"
Catatan
Sekali lagi, Anda dapat mengamati perubahan perilaku di aplikasi sampel. Anda tidak dapat lagi memuat aplikasi karena tidak dapat lagi mengakses referensi brankas kunci. Aplikasi telah kehilangan konektivitasnya ke brankas kunci melalui jaringan berbagi.
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 melalui halaman Rahasia di portal Microsoft Azure, karena portal mengaksesnya melalui internet publik (lihat Mengelola sumber daya yang dikunci).
Konfigurasikan integrasi jaringan virtual di aplikasi Anda
Skalakan aplikasi hingga tingkat harga yang didukung (lihat Mengintegrasikan aplikasi Anda dengan jaringan virtual Azure).
az appservice plan update --name $appName --resource-group $groupName --sku S1
Tidak terkait dengan skenario kami tetapi juga penting, terapkan HTTPS untuk permintaan masuk.
az webapp update --resource-group $groupName --name $appName --https-only
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 merutekan semua lalu lintas Anda ke jaringan virtual, lihat Mengelola perutean integrasi jaringan virtual. Merutekan semua lalu lintas juga dapat digunakan jika Anda ingin merutekan lalu lintas internet melalui jaringan virtual Anda, seperti melalui Azure Virtual Network NAT atau Azure Firewall.
Di browser, navigasikan ke
<app-name>.azurewebsites.net
lagi dan tunggu integrasi diterapkan. Jika Anda mendapatkan kesalahan HTTP 500, tunggu beberapa menit dan coba lagi. Jika Anda dapat memuat halaman dan mendapatkan hasil deteksi, maka Anda menyambungkan ke titik akhir layanan Azure AI dengan referensi brankas kunci.Catatan
Jika terus mendapatkan kesalahan HTTP 500 setelah waktu yang lama, mungkin membantu untuk memaksa pengambilan ulang referensi brankas kunci lagi, seperti:
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)"
Kelola sumber daya yang terkunci
Bergantung pada skenario, Anda mungkin tidak dapat mengelola sumber daya yang dilindungi titik akhir privat melalui portal Microsoft Azure, Azure CLI, atau Azure PowerShell (misalnya, Key Vault). Semua alat ini membuat 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 komputer lokal Anda untuk melihat atau memperbarui rahasia yang dilindungi titik akhir privat.
- Jika jaringan lokal Anda diperluas ke jaringan virtual Azure melalui Gateway VPN atau ExpressRoute, Anda dapat mengelola sumber daya yang dilindungi titik akhir privat langsung dari jaringan lokal Anda.
- Kelola sumber daya yang dilindungi titik akhir privat dari jump server di jaringan virtual.
- Sebarkan Cloud Shell ke dalam jaringan virtual.
Membersihkan sumber daya
Dalam 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:
az group delete --name $groupName
Perintah ini mungkin perlu waktu satu menit untuk dijalankan.