Mengonfigurasi penyimpanan kunci host Functions di Azure Container Apps

Kunci akses Functions adalah token autentikasi yang digunakan runtime Functions untuk mengamankan titik akhir yang dipicu HTTP. Saat pemanggil memanggil fungsi HTTP, pemanggil menyertakan kunci sebagai ?code= parameter kueri atau x-functions-key header. Runtime memvalidasi kunci dan mengotorisasi atau menolak permintaan.

Kunci akses tidak sama dengan rahasia tingkat aplikasi. Kunci akses melindungi siapa yang dapat memanggil fungsi Anda, sementara rahasia tingkat aplikasi melindungi apa yang terhubung dengan fungsi Anda.

Kapan menggunakan kunci akses

Skenario Mengapa kunci akses cocok
Webhook pihak ketiga Penyedia seperti GitHub, Stripe, atau Twilio memanggil fungsi Anda melalui URL dan rahasia. Akses slot kunci langsung ke pola yang ?code= mereka harapkan.
Panggilan antar layanan Layanan backend A memanggil Fungsi B melalui HTTP. Kunci bersama lebih sederhana daripada menyiapkan pendaftaran aplikasi Microsoft Entra untuk panggilan internal saja.
Langganan Event Grid Event Grid memvalidasi dan memanggil titik akhir fungsi Anda menggunakan kunci sistem yang dikelola platform secara otomatis.
Autentikasi dev/test Selama pengembangan, Anda memerlukan autentikasi dasar tanpa mengonfigurasi OAuth/OIDC penuh. Kunci akses menyediakan gerbang otentikasi yang efisien tanpa memerlukan konfigurasi identitas.
Kompatibilitas migrasi Aplikasi Azure Functions yang ada sudah menggunakan kunci akses. Saat bermigrasi ke Container Apps, Anda memerlukan autentikasi berbasis kunci yang sama untuk mencegah gangguan pada pemanggil.

Note

Untuk API yang menghadap pengguna, beban kerja zero-trust, atau skenario otorisasi per pengguna, gunakan Microsoft Entra ID / OAuth 2.0 alih-alih kunci akses. Kunci akses adalah rahasia yang dibagikan tanpa catatan audit tingkat identitas.

Prasyarat

Jenis kunci akses

Runtime Functions mengelola empat jenis kunci:

Jenis Kunci Scope Kegunaan
Kunci master (_master) Seluruh fungsi aplikasi Akses tingkat admin ke semua fungsi dan /admin/* titik akhir manajemen. Tidak dapat dicabut, hanya diputar.
Kunci host (default + kustomisasi) Seluruh fungsi aplikasi Otorisasi panggilan ke fungsi apa pun yang dipicu HTTP di aplikasi.
Tombol fungsi (default + kustom) Fungsi tunggal Otorisasi panggilan ke satu fungsi tertentu. Menyediakan kontrol yang lebih terperinci daripada kunci host.
Kunci sistem Titik akhir ekstensi Digunakan oleh ekstensi platform seperti langganan webhook Event Grid dan Durable Functions. Dikelola secara otomatis.

Pilih backend penyimpanan

Atur variabel lingkungan AzureWebJobsSecretStorageType untuk mengontrol tempat runtime menyimpan kunci akses. Azure Container Apps mendukung tiga backend tingkat produksi.

Backend Nilai Setelan Membuat kunci secara otomatis Dependensi eksternal Paling cocok untuk
Penyimpanan rahasia Container Apps containerapps Tidak - Anda mengatur kunci sebagai rahasia dalam Container Apps Tidak ada Sebagian besar beban kerja (Disarankan)
Azure Key Vault keyvault Tidak - buat pemicu secara manual instansi Key Vault Tata kelola terpusat, audit kepatuhan
Azure Blob Storage blob Yes Akun penyimpanan Aplikasi warisan atau akun yang AzureWebJobsStorage sudah ada

Ingat pertimbangan backend berikut:

  • Runtime tidak secara otomatis memilih penyimpanan rahasia Container Apps. Jika Anda tidak mengatur AzureWebJobsSecretStorageType atau mengaturnya ke nilai yang tidak dikenali, host Functions akan menggunakan Blob Storage saat AzureWebJobsStorage tersedia.
  • Tetap dikonfigurasi AzureWebJobsStorage untuk pemeriksaan kesehatan penyimpanan dan fitur yang bergantung pada penyimpanan.
  • Jangan atur AzureWebJobsSecretStorageType ke files. Sistem file Container Apps bersifat sementara, sehingga kunci yang disimpan bersama backend ini hilang ketika aplikasi berskala ke nol, memulai ulang, atau melakukan revisi baru.

Pola nama rahasia

Konvensi penamaan untuk kunci yang disimpan tergantung pada backend penyimpanan.

Penyimpanan rahasia Container Apps menggunakan konvensi yang berbeda. Fungsi host membaca kunci dari file yang dipasang pada volume di /run/secrets/functions-keys/. Setiap file menggunakan nama dotted (misalnya, host.master), tetapi nama rahasia Container Apps hanya mengizinkan karakter alfanumerik huruf kecil dan tanda hubung. Saat memasang volume tersembunyi, Anda harus secara eksplisit menetapkan bidang path ke nama file bertitik yang diharapkan oleh host Functions (misalnya, secretRef: host-masterpath: host.master). Platform tidak melakukan terjemahan nama otomatis apa pun.

Jenis Kunci Nama rahasia Container Apps (garis hubung) Pemasangan volume path (titik)
Kunci master host-master host.master
Kunci host default host-function-default host.function.default
Kunci host kustom host-function-<name> host.function.<name>
Kunci fungsi default untuk fungsi tertentu functions-<functionname>-default functions.<functionName>.default
Kunci fungsi kustom untuk fungsi tertentu functions-<functionname>-<keyname> functions.<functionName>.<keyName>
Kunci sistem host-systemkey-<extension> host.systemKey.<extension>

Petunjuk / Saran

Saat memecahkan masalah, cari pola ini di penyimpanan backend Anda untuk memverifikasi bahwa kunci dikonfigurasi dengan benar.

Mengonfigurasi penyimpanan rahasia Container Apps

Tempat penyimpanan rahasia Container Apps adalah backend yang direkomendasikan. Kunci tetap berada dalam platform Container Apps dan tidak memerlukan penyimpanan eksternal atau Key Vault. Azure Resource Manager aktivitas log melacak perubahan pada rahasia dan variabel lingkungan.

Dengan backend ini, host Functions membaca kunci dari file yang dipasang volume di /run/secrets/functions-keys/. Host tidak menghasilkan kunci secara otomatis. Anda harus membuat setiap kunci sebagai rahasia Aplikasi Kontainer, dan platform memasangnya sebagai file untuk dibaca host.

Important

Penyimpanan rahasia Container Apps bersifat hanya-dibaca dari perspektif host. Host membaca file kunci yang dipasang tetapi tidak pernah menulis ke file tersebut. Jika kunci yang diperlukan hilang, host tidak membuatnya secara otomatis.

Langkah 1: Atur jenis penyimpanan

  1. Buka aplikasi kontainer Functions Anda di portal Azure.

  2. Di bawah Pengaturan, pilih Variabel lingkungan.

  3. Pilih Tambahkan, dan masukkan nilai berikut:

    Property Nilai
    Name AzureWebJobsSecretStorageType
    Nilai containerapps
  4. Pilih Simpan, lalu pilih Terapkan untuk mengonfirmasi perubahan.

Langkah 2: Membuat dan menyimpan rahasia kunci akses

Buat nilai kunci dan simpan sebagai rahasia Container Apps. Minimal, Anda memerlukan kunci master dan kunci host default.

  1. Di aplikasi kontainer Functions Anda, di bawah Pengaturan, pilih Rahasia.

  2. Pilih Tambahkan dan masukkan nilai berikut:

    Property Nilai
    Name host-master
    Type Rahasia Aplikasi Kontainer
    Nilai Nilai kunci yang dihasilkan secara acak.
  3. Pilih Tambahkan.

  4. Ulangi untuk host-function-default dengan nilai lain yang dihasilkan secara acak.

  5. Untuk menambahkan kunci per fungsi, tambahkan rahasia bernama functions-<functionname>-default (semua huruf kecil).

Note

Nama rahasia Container Apps hanya mengizinkan karakter alfanumerik huruf kecil dan tanda hubung. Anda harus secara eksplisit mengatur bidang path dalam konfigurasi volume ke nama file bertitik yang diharapkan oleh host Functions (misalnya, secretRef: host-masterpath: host.master). Tanpa instruksi eksplisit path, file pada disk mempertahankan nama berformat garis dan host Fungsi tidak akan menemukan kunci.

Langkah 3: Mengonfigurasi penyandian volume

Pasang rahasia sebagai file di /run/secrets/functions-keys/.

  1. Di aplikasi kontainer Functions Anda, di bawah Aplikasi, pilih Revisi dan replika.

  2. Pilih Buat revisi baru.

  3. Di tab Skala dan volume , di bawah Volume, pilih Tambahkan.

  4. Masukkan nilai berikut:

    Property Nilai
    jenis Volume Rahasia
    Name functions-keys
  5. Untuk setiap secret, atur bidang Jalur ke nama file yang terdapat tanda titik yang diharapkan oleh host Functions (misalnya, atur host-master ke jalur host.master, dan host-function-default ke jalur host.function.default).

  6. Pilih Tambahkan.

  7. Di tab Kontainer , pilih kontainer Anda lalu pilih Edit.

  8. Pilih tab Pemasangan volume dan pilih Tambahkan.

  9. Masukkan nilai berikut:

    Property Nilai
    Nama volume functions-keys
    Jalur penempatan /run/secrets/functions-keys
  10. Pilih Simpan, lalu pilih Buat untuk menyebarkan revisi baru.

Langkah 4: Verifikasi

Setelah aplikasi dimulai ulang, konfirmasikan bahwa kunci berfungsi:

az containerapp function keys list \
  --resource-group "<RESOURCE_GROUP>" \
  --name "<FUNCTIONS_APP_NAME>" \
  --key-type hostKey

Anda juga dapat memeriksa log aplikasi untuk pesan Resolved secret storage provider ContainerAppsSecretsRepository, yang mengonfirmasi bahwa host menggunakan penyimpanan rahasia Container Apps.

Putar kunci

Untuk memutar kunci, perbarui rahasia Container Apps dan mulai ulang aplikasi:

NEW_KEY=$(openssl rand -hex 32)

az containerapp secret set \
  --resource-group "<RESOURCE_GROUP>" \
  --name "<FUNCTIONS_APP_NAME>" \
  --secrets "host-function-default=$NEW_KEY"

az containerapp revision restart \
  --resource-group "<RESOURCE_GROUP>" \
  --name "<FUNCTIONS_APP_NAME>" \
  --revision "<REVISION_NAME>"

Note

Semua replika berbagi rahasia yang dipasang sama. Setelah menghidupkan ulang, setiap replika mengambil nilai kunci yang diperbarui.

Konfigurasikan Key Vault atau Blob Storage sebagai store

Backend Key Vault menyimpan kunci akses sebagai rahasia Key Vault, menyediakan audit tingkat perusahaan dan kontrol akses.

  1. Buat Key Vault (jika Anda tidak memilikinya):

    az keyvault create \
      --name "<KEYVAULT_NAME>" \
      --resource-group "<RESOURCE_GROUP>" \
      --location "<LOCATION>"
    
  2. Aktifkan identitas terkelola pada aplikasi kontainer Anda (jika belum diaktifkan):

    az containerapp identity assign \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --system-assigned
    
  3. Berikan peran Key Vault Secrets Officer ke identitas terkelola. Runtime memerlukan akses baca dan tulis untuk membuat dan mengelola kunci:

    PRINCIPAL_ID=$(az containerapp show \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --query identity.principalId \
      --output tsv)
    
    KEYVAULT_ID=$(az keyvault show \
      --name "<KEYVAULT_NAME>" \
      --query id \
      --output tsv)
    
    az role assignment create \
      --role "Key Vault Secrets Officer" \
      --assignee "$PRINCIPAL_ID" \
      --scope "$KEYVAULT_ID"
    
  4. Atur jenis penyimpanan dan URI Key Vault:

    Untuk identitas yang ditetapkan sistem:

    az containerapp update \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --set-env-vars \
        "AzureWebJobsSecretStorageType=keyvault" \
        "AzureWebJobsSecretStorageKeyVaultUri=https://<KEYVAULT_NAME>.vault.azure.net"
    

    Untuk identitas yang ditetapkan pengguna, atur juga ID klien:

    az containerapp update \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --set-env-vars \
        "AzureWebJobsSecretStorageType=keyvault" \
        "AzureWebJobsSecretStorageKeyVaultUri=https://<KEYVAULT_NAME>.vault.azure.net" \
        "AzureWebJobsSecretStorageKeyVaultClientId=<USER_ASSIGNED_IDENTITY_CLIENT_ID>"
    
  5. Picu pembuatan kunci dengan mencantumkan kunci:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type hostKey
    

Mengelola kunci akses

Terlepas dari backend, gunakan perintah berikut untuk mencantumkan, membuat, dan menghapus kunci akses:

Note

Pastikan setidaknya satu replika berjalan untuk melakukan operasi manajemen kunci ini.

  • Daftar semua kunci host:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type hostKey
    
  • Daftarkan kunci master:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type masterKey
    
  • Buat atau timpa kunci host khusus:

    az containerapp function keys set \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "MyCustomKey" \
      --key-value "<YOUR_KEY_VALUE>" \
      --key-type hostKey
    
  • Tampilkan kunci tertentu:

    az containerapp function keys show \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "<KEY_NAME>" \
      --key-type hostKey
    
  • Hapus kunci host:

    az containerapp function keys delete \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "MyCustomKey" \
      --key-type hostKey
    

Memanggil fungsi dengan kunci akses

Masukkan kunci sebagai parameter kueri atau header permintaan.

# Query parameter
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>?code=<HOST_KEY>"

# Header
curl "https://<FUNCTIONS_APP_URL>/api/<FUNCTION_NAME>" \
  -H "x-functions-key: <HOST_KEY>"