Bekerja dengan kunci akses di Azure Functions

Azure Functions access keys berfungsi sebagai rahasia bersama yang mengizinkan akses ke endpoint fungsi. Artikel ini menjelaskan jenis kunci akses yang didukung Functions, dan cara bekerja dengan kunci akses.

Meskipun kunci akses memberikan perlindungan terhadap akses yang tidak diinginkan, pertimbangkan opsi lain untuk mengamankan endpoint HTTP di produksi. Misalnya, jangan mendistribusikan rahasia bersama di aplikasi publik. Jika klien publik memanggil fungsi Anda, pertimbangkan untuk mengimplementasikan mekanisme keamanan berikut atau lainnya:

Kunci akses menyediakan dasar untuk otorisasi HTTP dalam fungsi yang dipicu HTTP. Untuk informasi selengkapnya, lihat Tingkat otorisasi.

Jenis kunci akses

Cakupan kunci akses dan tindakan yang didukungnya bergantung pada jenis kunci akses.

Jenis Kunci Nama kunci Tingkat autentikasi HTTP Deskripsi
Fungsi default atau didefinisikan oleh pengguna function Mengizinkan akses hanya ke titik akhir fungsi tertentu.
Tuan rumah default atau didefinisikan oleh pengguna function Memungkinkan akses ke semua titik akhir fungsi dalam aplikasi fungsi.
Manajemen _master admin Kunci host khusus yang juga menyediakan akses administratif ke REST API runtime di aplikasi fungsi. Karena kunci master memberikan izin yang lebih tinggi di aplikasi fungsi Anda, jangan bagikan kunci ini dengan pihak ketiga atau distribusikannya di aplikasi klien asli.
Sistem Tergantung pada ekstensi N/a Ekstensi tertentu mungkin memerlukan kunci yang dikelola sistem untuk mengakses titik akhir webhook. Kunci sistem dirancang untuk titik akhir fungsi spesifik ekstensi yang dipanggil oleh komponen internal. Misalnya, pemicu Event Grid mengharuskan langganan menggunakan kunci sistem saat memanggil titik akhir pemicu. Durable Functions juga menggunakan kunci sistem untuk memanggil API ekstensi Durable Task.
Hanya ekstensi tertentu yang dapat membuat kunci sistem. Anda tidak dapat secara eksplisit mengatur nilainya. Seperti kunci lainnya, Anda dapat menghasilkan nilai baru untuk kunci melalui portal atau dengan menggunakan API kunci.

Setiap kunci memiliki nama sebagai referensi. Aplikasi fungsi dan tingkat fungsi masing-masing memiliki kunci default bernama default. Kunci fungsi lebih diprioritaskan daripada kunci host. Ketika dua kunci memiliki nama yang sama, tombol fungsi selalu digunakan.

Tabel berikut membandingkan penggunaan untuk berbagai jenis kunci akses:

Perbuatan Cakupan Jenis Kunci
Menjalankan fungsi Fungsi spesifik Fungsi
Menjalankan fungsi Fungsi apa pun Fungsi atau tuan rumah
admin Memanggil titik akhir Aplikasi Fungsi Magister
Memanggil API perluasan Durable Task Aplikasi fungsi* Sistem
Panggil webhook khusus untuk ekstensi (internal) Aplikasi fungsi* Sistem

*Cakupan ditentukan oleh ekstensi.

Persyaratan kunci akses

Dalam Functions, kunci akses dihasilkan secara acak dalam bentuk array 32-byte yang dikodekan sebagai string base-64 yang aman untuk URL. Meskipun Anda dapat menghasilkan kunci akses sendiri dan menggunakannya dengan Fungsi, gunakan proses pembuatan kunci akses default sebagai gantinya.

Kunci akses yang dihasilkan Functions mencakup nilai tanda tangan dan checksum khusus yang menunjukkan jenis kunci akses dan bahwa Azure Functions membuatnya. Komponen tambahan dalam kunci ini memudahkan untuk menentukan sumber rahasia semacam ini selama pemindaian keamanan dan proses otomatis lainnya.

Untuk memungkinkan Functions menghasilkan kunci Anda, jangan berikan kunci value ke API yang bisa Anda gunakan untuk menghasilkan kunci.

Penyimpanan kunci akses

Aplikasi fungsi Anda di Azure menyimpan kunci dan mengenkripsinya saat diam. Secara bawaan, pengaturan AzureWebJobsStorage menyimpan kunci dalam kontainer penyimpanan Blob di akun yang disediakan. Gunakan pengaturan AzureWebJobsSecretStorageType untuk mengganti perilaku bawaan ini dan menyimpan kunci di salah satu lokasi alternatif berikut:

Penting

Kunci akses merupakan bagian dari penyimpanan rahasia aplikasi Anda dan memiliki siklus hidupnya sendiri, yang terpisah dari fungsi yang dilindunginya. Menghapus fungsi tidak menghapus atau merotasi kunci yang disimpan di penyimpanan rahasia. Karena lokasi penyimpanan kunci berasal dari nama aplikasi, membuat ulang fungsi dengan nama yang sama menggunakan kunci yang sebelumnya tersimpan alih-alih menghasilkan kunci baru. Perilaku ini berlaku untuk semua penyedia penyimpanan rahasia, termasuk penyimpanan Blob dan Key Vault. Menghapus dan membuat ulang fungsi bukanlah pengganti rotasi kunci: untuk mencabut kunci ketika kredensial terekspos atau Anda menghapus akses seseorang, Anda harus secara eksplisit memutar atau menghapusnya, seperti yang dijelaskan dalam Perbarui atau buat kunci akses.

Lokasi Nilai Deskripsi
Akun penyimpanan kedua blob Menyimpan kunci di penyimpanan Blob di akun penyimpanan yang berbeda dari yang digunakan oleh runtime Functions. Akun dan kontainer tertentu yang digunakan ditentukan oleh URL tanda tangan akses bersama (SAS) yang diatur dalam AzureWebJobsSecretStorageSas pengaturan. Anda harus mempertahankan AzureWebJobsSecretStorageSas pengaturan saat URL SAS berubah.
Azure Key Vault keyvault Menyimpan kunci di brankas kunci yang disetkan di AzureWebJobsSecretStorageKeyVaultUri.
Sistem file files Kunci dipertahankan pada sistem file lokal, yang merupakan default dalam Functions v1.x. Penyimpanan sistem file tidak disarankan.
Rahasia Kubernetes kubernetes Menyimpan kunci dalam kumpulan sumber daya di AzureWebJobsKubernetesSecretName. Hanya didukung saat aplikasi fungsi Anda disebarkan ke Kubernetes. Azure Functions Core Tools menghasilkan nilai secara otomatis saat Anda menggunakannya untuk menyebarkan aplikasi ke kluster Kubernetes. Rahasia yang tidak dapat diubah tidak didukung.
Rahasia Azure Container Apps containerapps Kunci disimpan di penyimpanan rahasia Azure Container Apps, yang merupakan sistem manajemen rahasia internal untuk Container Apps. Didukung hanya saat aplikasi fungsi Anda disebarkan ke Azure Container Apps. Untuk informasi lebih lanjut, lihat Konfigurasikan penyimpanan rahasia Container Apps.

Saat Anda menggunakan Key Vault untuk penyimpanan kunci, pengaturan aplikasi yang Anda butuhkan bergantung pada bagaimana aplikasi mengautentikasi ke Key Vault: identitas terkelola yang ditetapkan sistem, identitas terkelola yang ditetapkan pengguna, atau pendaftaran aplikasi.

Nama pengaturan Ditugaskan oleh sistem Ditetapkan pengguna Pendaftaran aplikasi
AzureWebJobsSecretStorageKeyVaultUri Ya Ya Ya
AzureWebJobsSecretStorageKeyVaultClientId Tidak Ya Ya
AzureWebJobsSecretStorageKeyVaultClientSecret Tidak Tidak Ya
AzureWebJobsSecretStorageKeyVaultTenantId Tidak Tidak Ya

Penting

Rahasia tidak dibatasi pada aplikasi fungsi individual melalui pengaturan AzureWebJobsSecretStorageKeyVaultUri. Jika beberapa aplikasi fungsi dikonfigurasi untuk menggunakan layanan Key Vault yang sama, mereka berbagi rahasia yang sama, yang dapat menyebabkan konflik atau penimpaan kunci. Untuk menghindari perilaku yang tidak diinginkan, kami sarankan Anda menggunakan instans Key Vault terpisah untuk setiap aplikasi fungsi.

Titik akhir panggilan dengan kunci akses

Anda dapat memanggil fungsi yang dipicu HTTP dengan menggunakan URL yang mencakup nama fungsi. Ketika Anda mengatur tingkat otorisasi suatu fungsi ke nilai selain anonymous, Anda juga harus menyediakan kunci akses dalam permintaan Anda. Anda dapat menyertakan kunci akses dalam URL dengan menggunakan ?code= string kueri atau di header permintaan (x-functions-key). Untuk informasi selengkapnya, lihat Otorisasi kunci akses.

Untuk mengakses REST API runtime (di bawah /admin/), Anda harus menyediakan kunci master (_master) di x-functions-key header permintaan. Anda dapat menonaktifkan endpoint administratif dengan mengatur functionsRuntimeAdminIsolationEnabled properti situs.

Dapatkan kunci akses fungsi Anda

Anda bisa mendapatkan kunci fungsi dan host secara terprogram dengan menggunakan API Azure Resource Manager ini:

Untuk mempelajari cara memanggil API Azure Resource Manager, lihat "Referensi Azure REST API".

Note

Saat Anda menerapkan aplikasi fungsi Anda ke Azure Container Apps dan menggunakan AzureWebJobsSecretStorageType=ContainerApps, Anda harus menggunakan metode khusus Container Apps untuk mengambil kunci fungsi. Untuk informasi lebih lanjut, lihat Kelola kunci akses di dokumentasi Container Apps.

Gunakan metode ini untuk mendapatkan kunci akses tanpa menggunakan API REST.

  1. Masuk ke portal Azure, lalu cari dan pilih Function App.

  2. Pilih aplikasi fungsi yang ingin Anda kerjakan.

  3. Di menu sebelah kiri, perluas Functions, lalu pilih Kunci aplikasi.

    Halaman Kunci aplikasi muncul. Di halaman ini, tombol host ditampilkan, yang dapat Anda gunakan untuk mengakses fungsi apa pun di aplikasi. Kunci sistem juga ditampilkan, yang memberi siapa pun akses tingkat administrator ke semua API aplikasi fungsi.

Anda juga dapat mempraktikkan hak istimewa paling sedikit dengan menggunakan kunci untuk fungsi tertentu. Anda bisa mendapatkan kunci khusus fungsi dari tab Kunci Fungsi dari fungsi spesifik yang dipicu oleh HTTP.

Petunjuk / Saran

Anda juga dapat mendapatkan kunci akses untuk fungsi Anda dengan menggunakan perintah func azure functionapp list-functions Azure Functions Core Tools dengan opsi --show-keys. Untuk informasi selengkapnya, lihat referensi Azure Functions Core Tools.

Memperbarui atau membuat kunci akses

Saat memperbarui atau membuat nilai kunci akses, Anda harus mendistribusikan ulang nilai kunci yang diperbarui secara manual ke semua klien yang memanggil fungsi Anda.

Penting

Perlakukan kunci master (_master) sebagai kredensial administratif. Ini memberikan akses administratif ke data plane aplikasi Anda—termasuk, untuk aplikasi dengan sistem file yang dapat ditulisi, kemampuan untuk mendeploy dan menjalankan kode melalui REST API runtime—jadi hanya bagikan kepada administrator tepercaya, bukan kepada pemanggil biasa. Kunci host tidak bersifat administratif, tetapi masing-masing mengotorisasi panggilan ke fungsi apa pun dalam aplikasi, jadi distribusikan juga dengan hati-hati.

Ketika kredensial terungkap, atau ketika Anda perlu mencabut akses suatu pihak, pastikan untuk mengganti kunci yang terdampak secara eksplisit. Memutar satu kunci sudah cukup untuk mencabut kunci tersebut. Seperti yang dijelaskan dalam Penyimpanan kunci akses, menghapus atau membuat ulang fungsi tidak merotasi kunci yang tersimpan.

Anda dapat memperbarui fungsi dan kunci host secara terprogram atau membuat kunci baru dengan menggunakan API Azure Resource Manager ini:

Untuk mempelajari cara memanggil API Azure Resource Manager, lihat "Referensi Azure REST API".

Anda dapat menggunakan metode ini untuk mendapatkan kunci akses tanpa harus membuat panggilan secara manual ke REST API.

  1. Masuk ke portal Azure, lalu cari dan pilih Function App.

  2. Pilih aplikasi fungsi yang ingin Anda kerjakan.

  3. Di menu sebelah kiri, perluas Functions, lalu pilih Kunci aplikasi.

    Halaman Kunci aplikasi muncul. Di halaman ini, tombol host ditampilkan, yang dapat Anda gunakan untuk mengakses fungsi apa pun di aplikasi. Kunci sistem juga ditampilkan, yang memberi siapa pun akses tingkat administrator ke semua API aplikasi fungsi.

  4. Pilih Perbarui nilai kunci di samping kunci yang ingin Anda perbarui, lalu pilih Perbarui dan simpan.

Anda juga dapat memperbarui tombol fungsi pada tab Tombol fungsi dari fungsi spesifik yang dipicu oleh HTTP.

Menghapus kunci akses

Anda dapat menghapus kunci fungsi dan host secara terprogram dengan menggunakan API Azure Resource Manager ini:

Untuk mempelajari cara memanggil API Azure Resource Manager, lihat "Referensi Azure REST API".