Azure Container Apps üzerinde Functions host anahtar yönetimini konfigüre etme

İşlev erişim anahtarları , İşlevler çalışma zamanının HTTP ile tetiklenen uç noktaların güvenliğini sağlamak için kullandığı kimlik doğrulama belirteçleridir. Çağıran bir HTTP işlevini çalıştırdığında, bir anahtarı sorgu parametresi veya üst bilgi olarak içerir. Çalışma zamanı anahtarı doğrular ve isteği yetkiler veya reddeder.

Erişim anahtarları , uygulama düzeyinde gizli anahtarlar ile aynı değildir. Erişim anahtarları işlevlerinizi kimlerin çağırabileceğini korurken, uygulama düzeyinde gizli anahtarlar işlevlerinizin bağlantı kuracağı şeyleri korur.

Erişim anahtarları ne zaman kullanılır?

Scenario Erişim anahtarları neden sığar?
Üçüncü taraf web kancaları GitHub, Stripe veya Twilio gibi sağlayıcılar, işlevinizi bir URL ve gizli anahtar aracılığıyla çağırır. Erişim anahtarları, doğrudan bekledikleri desenin ?code= içine yerleşir.
Hizmetler arası çağrılar Arka uç hizmeti A, HTTP üzerinden B İşlevi'ni çağırır. Paylaşılan anahtar, yalnızca dahili aramalar için Microsoft Entra uygulama kayıtlarını ayarlamaktan daha kolaydır.
Event Grid abonelikleri Event Grid, platformun otomatik olarak yönettiği bir sistem anahtarı kullanarak işlev uç noktanızı doğrular ve çağırır.
Geliştirme/test kimlik doğrulaması Geliştirme sırasında tam OAuth/OIDC yapılandırmadan temel kimlik doğrulaması yapmanız gerekir. Erişim anahtarları, kimlik yapılandırması olmayan düşük sürtünmeli bir kimlik doğrulama kapısı sağlar.
Geçiş uyumluluğu Mevcut Azure İşlevleri uygulamaları zaten erişim anahtarlarını kullanıyor. Container Apps'e geçiş yaparken, çağrıların kesintiye uğramasını önlemek için aynı anahtar tabanlı kimlik doğrulamasına ihtiyacınız vardır.

Note

Kullanıcıya yönelik API'ler, sıfır güven iş yükleri veya kullanıcı başına yetkilendirme senaryoları için erişim anahtarları yerine Microsoft Entra ID / OAuth 2.0 kullanın. Erişim anahtarları, kimlik düzeyinde bir denetim izi olmayan paylaşılan gizli anahtarlardır.

Prerequisites

Erişim anahtarı türleri

İşlevler çalışma zamanı dört tür anahtarı yönetir:

Anahtar türü Kapsam Amaç
Ana anahtar (_master) İşlev uygulamasının tamamı Tüm işlevlere ve /admin/* yönetim uç noktalarına yönetici düzeyinde erişim. İptal edilemez, yalnızca döndürülür.
Konak anahtarları (default + özel) İşlev uygulamasının tamamı Uygulamadaki HTTP ile tetiklenen herhangi bir işleve çağrıları yetkilendirin.
İşlev tuşları (default + özel) Tek işlev Bir tek işlev için çağrıları yetkilendirin. Host anahtarlarından daha ayrıntılı denetim sağlar.
Sistem anahtarları Uzantı uç noktaları Event Grid webhook abonelikleri ve Dayanıklı İşlevler gibi platform uzantıları tarafından kullanılır. Otomatik olarak yönetilir.

Depolama arka uç seçme

AzureWebJobsSecretStorageType ortam değişkenini, çalışma zamanının erişim anahtarlarını nerede kalıcı hale getirdiğini kontrol etmek için ayarlayın. Azure Container Apps üç üretim sınıfı arka ucu destekler.

Arka uç Ayar değeri Anahtarları otomatik olarak oluşturur Dış bağımlılık En iyi kullanım alanı:
Container Apps gizli anahtar deposu containerapps Hayır - Anahtarları Container Apps içinde sırlar olarak sağlarsınız Hiçbiri Çoğu iş yükü (Önerilen)
Azure Key Vault keyvault Hayır - el ile tetikleyici oluşturma Key Vault örneği Merkezi idare, uyumluluk denetimi
Azure Blob Depolama blob Evet Depolama hesabı Eski uygulamalar veya mevcut AzureWebJobsStorage hesap

Şu arka plan hususlarını aklınızda tutun:

  • Çalışma zamanı, Container Apps gizli depolamasını otomatik olarak seçmez. Eğer tanımamayan bir değer ayarlamazsanız AzureWebJobsSecretStorageType veya ayarlamazsanız, Functions sunucusu kullanılabilir olduğunda AzureWebJobsStorage Blob Depolama'ı kullanır.
  • Depolama sağlığı kontrolleri ve depoya bağlı özellikler için yapılandırılmasını sağla AzureWebJobsStorage .
  • AzureWebJobsSecretStorageType öğesini files olarak ayarlamayın. Container Apps dosya sistemi geçici olduğundan, bu arka uçta depolanan anahtarlar uygulama sıfıra ölçeklendiğinde, yeniden başlattığında veya yeni bir revizyon açtığında kaybolur.

Gizli ad şablonları

Depolanan anahtarlar için adlandırma kuralı, depolama arka ucuna bağlıdır.

Container Apps gizli dizin deposu farklı bir yöntem kullanır. Fonksiyonlar ana makinesi, /run/secrets/functions-keys/ konumundaki birim bağlı dosyalardan anahtarları okur. Her dosya noktalı bir ad kullanır (örneğin), host.masterancak Container Apps gizli dizi adları yalnızca küçük harfli alfasayısal karakterlere ve tirelere izin verir. Gizli birimi bağladığınızda, path alanını, İşlevler konağı tarafından beklenen noktalarla ayrılmış dosya adına (örneğin, secretRef: host-masterpath: host.master) açıkça ayarlamanız gerekir. Platform herhangi bir otomatik ad çevirisi gerçekleştirmez.

Anahtar türü Container Apps gizli isim (tireler) Birim bağlama path (üç nokta)
Ana anahtar host-master host.master
Varsayılan konak anahtarı host-function-default host.function.default
Özel ana makine anahtarı host-function-<name> host.function.<name>
Belirli bir işlev için varsayılan işlev anahtarı functions-<functionname>-default functions.<functionName>.default
Belirli bir işlev için özel işlev anahtarı functions-<functionname>-<keyname> functions.<functionName>.<keyName>
Sistem anahtarı host-systemkey-<extension> host.systemKey.<extension>

Tip

Sorun giderme sırasında anahtarların doğru yapılandırıldığını doğrulamak için arka uç deponuzda bu desenleri arayın.

Container Apps gizli anahtar deposunu yapılandırma

Önerilen arka uç, Container Apps gizli deposudur. Anahtarlar Container Apps platformunda kalır ve harici depolama alanı veya Key Vault gerektirmez. Azure Resource Manager etkinlik günlükleri gizli dizilerde ve ortam değişkenlerinde yapılan değişiklikleri izler.

Bu arka uç ile İşlevler konağı, /run/secrets/functions-keys/ biriminde bağlanan dosyalardan anahtarları okur. Konak anahtarları otomatik olarak oluşturmaz. Her anahtarı bir Container Apps gizli dizisi olarak oluşturmanız gerekir ve platform bunları konağın okuması için dosyalar olarak bağlar.

Important

Container Apps gizli dizi deposu , konağın perspektifinden salt okunurdur. Sunucu, bağlı anahtar dosyalarını okur ancak bunlara hiçbir zaman yazmaz. Gerekli bir anahtar eksikse, konak bunu otomatik olarak oluşturmaz.

1. Adım: Depolama türünü ayarlama

  1. Azure portalında İşlevler kapsayıcı uygulamanıza gidin.

  2. Ayarlar'ın altında Ortam değişkenleri'ne tıklayın.

  3. Ekle'yi seçin ve aşağıdaki değerleri girin:

    Mülkiyet Değer
    İsim AzureWebJobsSecretStorageType
    Değer containerapps
  4. Değişiklikleri onaylamak için Kaydet'i ve ardından Uygula'yı seçin.

2. Adım: Erişim anahtarı sırlarını oluşturun ve depolayın

Anahtar değerleri oluşturun ve bunları Container Apps gizlileri olarak depolayın. En azından ana anahtara ve varsayılan bir konak anahtarına ihtiyacınız vardır.

  1. İşlevler container uygulamanızda Ayarlar altında Gizli Anahtarlar'ı seçin.

  2. Ekle'yi seçin ve aşağıdaki değerleri girin:

    Mülkiyet Değer
    İsim host-master
    Type Container Apps Gizli
    Değer Rastgele oluşturulan bir anahtar değeri.
  3. Add (Ekle) seçeneğini belirleyin.

  4. host-function-default için rastgele oluşturulan başka bir değerle tekrar edin.

  5. Her işlev için bir anahtar eklemek amacıyla functions-<functionname>-default adlı bir gizli oluşturun (hepsi küçük harfle).

Note

Container Apps gizli adları yalnızca küçük harfli alfasayısal karakterlere ve tirelere izin verir. Hâcim yapılandırmasındaki path alanını, İşlevler ana bilgisayarının beklediği noktalı dosya adına (örneğin, secretRef: host-masterpath: host.master) açıkça ayarlamalısınız. Açık bir path olmadan, disk üzerindeki dosya tireli adını korur ve İşlevler ana bilgisayarı anahtarı bulamaz.

3. Adım: Birim bağlamasını yapılandırma

Gizlilik bilgilerini /run/secrets/functions-keys/ konumunda dosya olarak bağlayın.

  1. İşlevler kapsayıcı uygulamanızda , Uygulama'nın altında Düzeltmeler ve çoğaltmalar'ı seçin.

  2. Yeni düzeltme oluştur'u seçin.

  3. Ölçek ve birimler sekmesindeki Birimler'in altında Ekle'yi seçin.

  4. Aşağıdaki değerleri girin:

    Mülkiyet Değer
    Birim türü Gizli
    İsim functions-keys
  5. Her bir gizli bilgi için, Yol alanını, İşlevler ana bilgisayarının beklediği noktalı dosya adı olacak şekilde ayarlayın (örneğin, host-master'i host.master yolu olarak ve host-function-defaulthost.function.default yolu olarak ayarlayın).

  6. Add (Ekle) seçeneğini belirleyin.

  7. Kapsayıcı sekmesinde kapsayıcınızı ve ardından Düzenle'yi seçin.

  8. Birim bağlamaları sekmesini seçin ve Ekle'yi seçin.

  9. Aşağıdaki değerleri girin:

    Mülkiyet Değer
    Birim adı functions-keys
    Bağlama yolu /run/secrets/functions-keys
  10. Yeni düzeltmeyi dağıtmak için Kaydet'i ve ardından Oluştur'u seçin.

4. Adım: Doğrulama

Uygulama yeniden başlatıldıktan sonra anahtarların çalıştığını onaylayın:

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

Ayrıca, konağın Container Apps gizli bilgi deposunu kullandığını onaylayan mesaj için Resolved secret storage provider ContainerAppsSecretsRepository ile uygulama günlüklerini kontrol edebilirsiniz.

Anahtarları döndürme

Bir anahtarı döndürmek için Container Apps gizli anahtarını güncelleyin ve uygulamayı yeniden başlatın.

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

Tüm çoğaltmalar aynı bağlanmış gizli verileri paylaşır. Yeniden başlatmanın ardından, her kopya güncelleştirilmiş anahtar değerlerini alır.

Key Vault veya Blob Depolama'ı depo olarak yapılandırın

Key Vault altyapısı, erişim anahtarlarını Key Vault gizli anahtarları olarak depolayarak kurumsal düzeyde inceleme ve erişim kontrolü sağlar.

  1. Bir Key Vault oluşturun (henüz yoksa):

    az keyvault create \
      --name "<KEYVAULT_NAME>" \
      --resource-group "<RESOURCE_GROUP>" \
      --location "<LOCATION>"
    
  2. Kapsayıcı uygulamanızda yönetilen kimliği etkinleştirin (henüz etkinleştirilmemişse):

    az containerapp identity assign \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --system-assigned
    
  3. Yönetilen kimliğe Key Vault Gizli Dizi Yetkilisi rolü verin. Çalışma zamanının anahtarları oluşturmak ve yönetmek için okuma ve yazma erişimine ihtiyacı vardır:

    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. Depolama türünü ve Key Vault URI'sini ayarlayın:

    Sistem tarafından atanan kimlik için:

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

    Kullanıcı tarafından atanan kimlik için istemci kimliğini de ayarlayın:

    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. Anahtarları listeleyerek anahtar oluşturmayı tetikleme:

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

Erişim anahtarlarını yönetme

Arka uç ne olursa olsun, erişim anahtarlarını listelemek, oluşturmak ve silmek için aşağıdaki komutları kullanın:

Note

Bu anahtar yönetim işlemlerini gerçekleştirmek için en az bir replikayı çalışır tutun.

  • Tüm ana anahtarları listeleyin:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type hostKey
    
  • Ana anahtarı listeleyin:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type masterKey
    
  • Özel bir host anahtarı oluşturun veya üzerine yazabilirsiniz:

    az containerapp function keys set \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "MyCustomKey" \
      --key-value "<YOUR_KEY_VALUE>" \
      --key-type hostKey
    
  • Belirli bir anahtarı gösterin:

    az containerapp function keys show \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "<KEY_NAME>" \
      --key-type hostKey
    
  • Bir ana bilgisayar anahtarını sil:

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

Erişim anahtarıyla işlev çağırma

Anahtarı sorgu parametresi veya istek üst bilgisi olarak geçirin.

# 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>"