Mengamankan akses jaringan untuk aplikasi Fungsi

Selesai

Aplikasi Function dengan autentikasi yang dikonfigurasi mengontrol siapa yang dapat memanggilnya, tetapi endpoint fungsi tersebut tetap dapat diakses melalui jalur jaringan apa pun—termasuk melalui internet publik. Kontrol jaringan menambahkan lapisan penegakan terpisah: membatasi jalur jaringan mana yang dapat menjangkau fungsi sama sekali, dan mengontrol jalur jaringan mana yang digunakan fungsi untuk panggilan keluarnya sendiri. Autentikasi dan isolasi jaringan bersifat independen dan saling melengkapi. Keduanya harus diterapkan untuk membangun postur keamanan yang dapat dipertahankan.

Membatasi akses masuk dengan daftar izin IP

Pembatasan akses memungkinkan Anda menentukan daftar aturan izinkan dan tolak yang diurutkan berdasarkan alamat IP sumber, rentang Classless Inter-Domain Route (CIDR), atau tag layanan Azure. Jika terdapat aturan eksplisit, penolakan implisit terhadap semua trafik berlaku untuk semua trafik yang tidak sesuai—Anda tidak perlu menambahkan aturan penolakan secara manual.

Untuk aplikasi Fungsi yang seharusnya hanya menerima panggilan masuk dari layanan Azure tertentu, aturan tag layanan menyediakan solusi yang bersih. Misalnya, untuk menerima panggilan webhook hanya dari Azure Event Grid, tambahkan aturan yang mengizinkan tag layanan AzureEventGrid dan tolak semua lalu lintas lainnya. Tag layanan mencakup berbagai alamat IP yang digunakan oleh layanan Azure tersebut, sehingga Anda tidak perlu mengelola rentang IP individual untuk layanan yang menggunakan kumpulan alamat dinamis.

Pembatasan akses tersedia di semua paket hosting aplikasi fungsi, termasuk Consumption, Flex Consumption, Elastic Premium, dan Dedicated.

Tip

Konfigurasikan pembatasan akses untuk menolak semua lalu lintas secara default dan menambahkan aturan izin eksplisit untuk sumber yang diketahui sebelum menyebarkan ke produksi. Memulai dengan pendekatan menolak semua lebih mudah untuk diaudit daripada menyusun daftar blokir di atas kebijakan implisit yang mengizinkan semua.

Sebarkan titik akhir privat untuk akses masuk

Ketika lalu lintas aplikasi Fungsi tidak boleh melintasi internet publik, titik akhir privat akan menghapus titik akhir publik sepenuhnya. Titik akhir privat memberikan aplikasi Function alamat IP privat di dalam jaringan virtual Anda (jaringan virtual). Semua lalu lintas masuk tiba melalui IP privat tersebut—penelepon eksternal tidak dapat menjangkau URL fungsi dari internet karena tidak ada rute publik.

Titik akhir privat untuk aplikasi Fungsi didukung dalam paket hosting Flex Consumption, Elastic Premium, dan Dedicated (App Service). Paket Konsumsi standar tidak mendukung titik akhir privat.

Setelah titik akhir privat dikonfigurasi, klien dalam VNet—termasuk layanan Azure lain yang terhubung ke jaringan yang sama—menerjemahkan nama host fungsi menjadi alamat IP privat. Resolusi nama ini memerlukan zona privat Azure DNS. Jika fungsi Anda menjadi backend untuk Azure API Management atau Application Gateway, sumber daya tersebut terhubung ke aplikasi Function melalui titik akhir privat alih-alih melalui URL publik, sehingga seluruh lalu lintas tetap berada di backbone Azure.

Important

Setelah membuat titik akhir privat untuk aplikasi Fungsi, nonaktifkan akses jaringan publik untuk memastikan bahwa semua arus lalu lintas masuk hanya melalui titik akhir privat. Membiarkan akses publik tetap diaktifkan ketika titik akhir privat tersedia akan menciptakan postur jaringan dengan jalur terpisah yang sulit diaudit.

Mengonfigurasi integrasi jaringan virtual untuk lalu lintas keluar

Endpoint privat mengendalikan akses masuk—apa yang dapat mengakses aplikasi Function. Integrasi jaringan virtual mengontrol akses keluar—apa yang dapat dijangkau oleh aplikasi Fungsi. Ini adalah kontrol yang berbeda dan melayani tujuan yang berbeda.

Dengan integrasi jaringan virtual diaktifkan, aplikasi Fungsi merutekan panggilan jaringan keluarnya melalui subnet yang didelegasikan di jaringan virtual Anda. Ini memungkinkan fungsi untuk memanggil sumber daya yang tidak terekspos ke internet publik: akun Cosmos DB tanpa akses publik, akun Storage yang dikunci ke subnet jaringan virtual tertentu, atau REST API privat yang dihosting di VM di jaringan yang sama.

Integrasi jaringan virtual regional tersedia dalam paket Flex Consumption, Elastic Premium, dan Dedicated dan merupakan konfigurasi yang direkomendasikan untuk sebagian besar skenario. Aplikasi Fungsi dan jaringan virtual harus berada di wilayah Azure yang sama. Integrasi menggunakan subnet yang didelegasikan—subnet tersebut tidak dapat digunakan untuk sumber daya lain seperti VM atau titik akhir privat.

Important

Integrasi jaringan virtual saja tidak merutekan seluruh lalu lintas keluar melalui jaringan virtual. Secara bawaan, hanya lalu lintas yang ditujukan ke rentang alamat IP privat (RFC 1918) yang dirutekan melalui subnet integrasi. Untuk memaksa semua lalu lintas keluar—termasuk panggilan ke alamat internet publik—melalui jaringan virtual, atur WEBSITE_VNET_ROUTE_ALL pengaturan aplikasi ke 1, atau aktifkan Rutekan semua lalu lintas di layar konfigurasi integrasi jaringan virtual.

Mengonfigurasi CORS untuk klien berbasis browser

Cross-origin resource sharing (CORS) diterapkan saat aplikasi web berbasis browser memanggil aplikasi Function yang dipicu oleh HTTP secara langsung. Secara default, browser memblokir permintaan lintas asal. Azure Functions memungkinkan Anda mengonfigurasi asal mana yang diizinkan untuk membuat permintaan tersebut.

Dalam produksi, tentukan asal yang diizinkan eksplisit—misalnya, https://contoso-retail.com. Jangan pernah menggunakan wildcard (*) di lingkungan produksi. Konfigurasi CORS wildcard memungkinkan origin apa pun mengirim permintaan ke aplikasi Function Anda, sehingga menghilangkan perlindungan lintas origin yang disediakan CORS bagi klien berbasis browser.

Pembatasan CORS hanya berlaku untuk klien HTTP berbasis browser. Panggilan server-ke-server—dari layanan backend, layanan Azure, atau klien HTTP nonbrowser—tidak tunduk pada penegakan CORS. CORS adalah mekanisme keamanan browser, bukan kontrol akses sisi server.

Rujuk rahasia Key Vault di pengaturan aplikasi

Pengaturan aplikasi di Azure Functions adalah salah satu lokasi paling umum di mana string koneksi dan kunci API akhirnya disimpan dalam teks biasa. Pola referensi Key Vault menggantikan nilai pengaturan aplikasi berupa teks biasa dengan referensi yang diuraikan oleh aplikasi Function saat runtime menggunakan identitas terkelolanya.

Sintaks untuk referensi Key Vault dalam pengaturan aplikasi adalah:

@Microsoft.KeyVault(SecretUri=https://<vault-name>.vault.azure.net/secrets/<secret-name>/<version>)

Jika Anda menghilangkan pengidentifikasi versi, aplikasi Fungsi menyelesaikan versi terbaru rahasia. Ini berguna untuk rahasia yang berputar secara teratur—fungsi mengambil nilai yang diperbarui dalam waktu 24 jam setelah rotasi, tanpa penyebaran ulang.

Untuk menggunakan referensi Key Vault:

  1. Aktifkan identitas terkelola yang ditetapkan sistem pada aplikasi Fungsi.
  2. Tetapkan peran Key Vault Secrets User ke identitas terkelola pada Key Vault.
  3. Ganti nilai teks biasa di setiap pengaturan aplikasi dengan sintaks referensi @Microsoft.KeyVault(...).

Aplikasi Fungsi menyelesaikan referensi saat startup dan menyuntikkan nilai rahasia sebagai nilai pengaturan aplikasi. Kode fungsi membaca pengaturan menggunakan Environment.GetEnvironmentVariable("SETTING_NAME")—panggilan yang sama seperti yang digunakan untuk pengaturan aplikasi lainnya, tanpa mengetahui adanya lapisan referensi Key Vault.

Note

Jika Key Vault dikonfigurasi dengan pembatasan jaringan—titik akhir privat atau titik akhir layanan jaringan virtual—aplikasi Fungsi memerlukan integrasi jaringan virtual untuk mencapai vault. Atur integrasi jaringan virtual sebelum menambahkan referensi Key Vault ke vault yang aksesnya dibatasi oleh jaringan. Tanpa jalur jaringan ke vault, aplikasi Fungsi tidak dapat menyelesaikan referensi dan gagal memulai.