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.

arsitektur skenario

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

  1. 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
    
  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 --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.

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

  1. 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

  2. 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

  1. 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
    
  2. 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
    
  3. 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 kesalahan HTTP 500. Aplikasi ini telah kehilangan konektivitasnya ke sumber daya layanan Azure AI melalui jaringan bersama.

  4. 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
    
  5. 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

  1. 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
    
  2. Tidak terkait dengan skenario kami tetapi juga penting, terapkan HTTPS untuk permintaan masuk.

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

  4. 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.

Langkah berikutnya