Menerapkan Arsitektur Keamanan Berlapis dengan Lingkungan App Service

Penting

Artikel ini tentang Lingkungan App Service v1. App Service Environment v1 akan dihentikan pada 31 Agustus 2024. Terdapat versi baru Lingkungan App Service yang lebih mudah digunakan dan berjalan di infrastruktur yang lebih kuat. Untuk mempelajari selengkapnya tentang versi baru, mulai dengan Pengantar Lingkungan App Service. Jika saat ini Anda menggunakan Lingkungan App Service v1, ikuti langkah-langkah dalam artikel ini untuk bermigrasi ke versi baru.

Mulai 29 Januari 2024, Anda tidak dapat lagi membuat sumber daya App Service Environment v1 baru menggunakan salah satu metode yang tersedia termasuk templat ARM/Bicep, Portal Microsoft Azure, Azure CLI, atau REST API. Anda harus bermigrasi ke App Service Environment v3 sebelum 31 Agustus 2024 untuk mencegah penghapusan sumber daya dan kehilangan data.

Karena Lingkungan App Service menyediakan lingkungan runtime terisolasi yang disebarkan ke jaringan virtual, pengembang dapat membuat arsitektur keamanan berlapis yang menyediakan tingkat akses jaringan yang berbeda untuk setiap tingkat aplikasi fisik.

Keinginan umum adalah menyembunyikan back-end API dari akses Internet umum, dan hanya mengizinkan API dipanggil oleh aplikasi web upstream. Grup keamanan jaringan (NSG) dapat digunakan pada subnet yang berisi Lingkungan App Service untuk membatasi akses publik ke aplikasi API.

Diagram di bawah ini menunjukkan contoh arsitektur dengan aplikasi berbasis WebAPI yang disebarkan pada Lingkungan App Service. Tiga instans aplikasi web terpisah, yang disebarkan pada tiga Lingkungan App Service terpisah, melakukan panggilan back-end ke aplikasi WebAPI yang sama.

Conceptual Architecture

Tanda plus hijau menunjukkan bahwa grup keamanan jaringan pada subnet yang berisi "apiase" memungkinkan panggilan masuk dari aplikasi web upstream, serta panggilan dari dirinya sendiri. Namun grup keamanan jaringan yang sama secara eksplisit menolak akses ke lalu lintas masuk umum dari Internet.

Sisa artikel ini membahas langkah-langkah yang diperlukan untuk mengonfigurasi grup keamanan jaringan pada subnet yang berisi "apiase".

Menentukan Perilaku Jaringan

Untuk mengetahui aturan keamanan jaringan apa yang diperlukan, Anda perlu menentukan klien jaringan mana yang akan diizinkan untuk mencapai Lingkungan App Service yang berisi aplikasi API, dan klien mana yang akan diblokir.

Karena grup keamanan jaringan (NSG) diterapkan ke subnet, dan Lingkungan App Service diterapkan ke dalam subnet, aturan yang terdapat dalam NSG berlaku untuk semua aplikasi yang berjalan di Lingkungan App Service. Menggunakan arsitektur sampel untuk artikel ini, setelah grup keamanan jaringan diterapkan ke subnet yang berisi "apiase", semua aplikasi yang berjalan di Lingkungan App Service "apiase" akan dilindungi oleh kumpulan aturan keamanan yang sama.

  • Tentukan alamat IP keluar pemanggil upstream: Apa alamat IP atau alamat pemanggil upstream? Alamat-alamat ini harus secara eksplisit diizinkan mengakses di NSG. Karena panggilan di antara Lingkungan App Service dianggap sebagai panggilan "Internet", alamat IP keluar yang ditetapkan untuk masing-masing dari tiga Lingkungan App Service upstream perlu diberi izin akses di NSG untuk subnet "apiase". Untuk informasi selengkapnya tentang menentukan alamat IP keluar untuk aplikasi yang berjalan di Lingkungan App Service, lihat artikel Gambaran Umum Arsitektur Jaringan.
  • Apakah aplikasi API back-end perlu memanggil dirinya sendiri? Poin yang terkadang diabaikan dan tidak kentara adalah skenario dengan aplikasi back-end perlu memanggil dirinya sendiri. Jika aplikasi API back-end pada Lingkungan App Service perlu memanggil dirinya sendiri, itu juga diperlakukan sebagai panggilan "Internet". Dalam arsitektur sampel, ini memerlukan juga izin akses dari alamat IP keluar dari Lingkungan App Service "apiase".

Menyiapkan Grup Keamanan Jaringan

Setelah kumpulan alamat IP keluar diketahui, langkah selanjutnya adalah membuat grup keamanan jaringan. Grup keamanan jaringan dapat dibuat untuk kedua jaringan virtual berbasis Resource Manager, serta jaringan virtual klasik. Contoh di bawah ini menunjukkan pembuatan dan konfigurasi NSG pada jaringan virtual klasik menggunakan PowerShell.

Untuk contoh arsitektur sampel, lingkungan berada di AS Tengah Selatan, sehingga NSG kosong dibuat di wilayah itu:

New-AzureNetworkSecurityGroup -Name "RestrictBackendApi" -Location "South Central US" 
-Label "Only allow web frontend and loopback traffic"

Pertama, aturan izinkan eksplisit ditambahkan untuk infrastruktur manajemen Azure seperti yang tercantum dalam artikel tentang lalu lintas masuk untuk Lingkungan App Service.

#Open ports for access by Azure management infrastructure
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW AzureMngmt" 
-Type Inbound -Priority 100 -Action Allow -SourceAddressPrefix 'INTERNET' -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '454-455' -Protocol TCP

Selanjutnya, dua aturan ditambahkan untuk mengizinkan panggilan HTTP dan HTTPS dari Lingkungan App Service upstream pertama ("fe1ase").

#Grant access to requests from the first upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe1ase" 
-Type Inbound -Priority 200 -Action Allow -SourceAddressPrefix '65.52.xx.xyz'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe1ase" 
-Type Inbound -Priority 300 -Action Allow -SourceAddressPrefix '65.52.xx.xyz'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

Hapus dan ulangi untuk Lingkungan App Service upstream kedua dan ketiga ("fe2ase" dan "fe3ase").

#Grant access to requests from the second upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe2ase" 
-Type Inbound -Priority 400 -Action Allow -SourceAddressPrefix '191.238.xyz.abc'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe2ase" 
-Type Inbound -Priority 500 -Action Allow -SourceAddressPrefix '191.238.xyz.abc'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

#Grant access to requests from the third upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe3ase" 
-Type Inbound -Priority 600 -Action Allow -SourceAddressPrefix '23.98.abc.xyz'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe3ase" 
-Type Inbound -Priority 700 -Action Allow -SourceAddressPrefix '23.98.abc.xyz'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

Terakhir, berikan akses ke alamat IP keluar dari Lingkungan App Service API back-end sehingga dapat memanggil kembali ke dirinya sendiri.

#Allow apps on the apiase environment to call back into itself
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP apiase" 
-Type Inbound -Priority 800 -Action Allow -SourceAddressPrefix '70.37.xyz.abc'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS apiase" 
-Type Inbound -Priority 900 -Action Allow -SourceAddressPrefix '70.37.xyz.abc'  -SourcePortRange '*' 
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP

Aturan keamanan jaringan lain tidak diperlukan, karena setiap NSG memiliki serangkaian aturan default yang memblokir akses masuk dari Internet, secara default.

Daftar lengkap aturan dalam grup keamanan jaringan ditunjukkan di bawah ini. Perhatikan bagaimana aturan terakhir, yang disorot, memblokir akses masuk dari semua pemanggil, selain pemanggil yang telah diberikan akses secara eksplisit.

NSG Configuration

Langkah terakhir adalah menyebarkan NSG ke subnet yang berisi Lingkungan App Service "apiase".

#Apply the NSG to the backend API subnet
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityGroupToSubnet 
-VirtualNetworkName 'yourvnetnamehere' -SubnetName 'API-ASE-Subnet'

Dengan NSG yang diterapkan ke subnet, hanya tiga Lingkungan App Service upstream, dan Lingkungan App Service yang berisi back-end API, yang diizinkan untuk memanggil ke lingkungan "apiase".

Informasi tentang grup keamanan jaringan.

Memahami alamat IP keluar dan Lingkungan App Service.

Port jaringan digunakan oleh Lingkungan App Service.

Catatan

Jika Anda ingin mulai menggunakan Azure App Service sebelum mendaftar untuk akun Azure, buka Coba Layanan Aplikasi, di mana Anda dapat segera membuat aplikasi web starter berumur pendek di Layanan Aplikasi. Tidak diperlukan kartu kredit; tidak ada komitmen.