Konfigurace úložiště klíčů hostitele služby Functions na Azure Container Apps

Přístupové klíče služby Functions jsou ověřovací tokeny, které modul runtime služby Functions používá k zabezpečení koncových bodů aktivovaných protokolem HTTP. Když volající vyvolá funkci HTTP, obsahuje klíč jako ?code= parametr dotazu nebo hlavičku x-functions-key . Modul runtime ověří klíč a autorizuje nebo odmítne požadavek.

Přístupové klíče nejsou stejné jako tajné kódy na úrovni aplikace. Přístupové klíče chrání , kdo může volat vaše funkce, zatímco tajné kódy na úrovni aplikace chrání to, k čemu se vaše funkce připojují.

Kdy použít přístupové klíče

Scenario Proč se přístupové klávesy hodí
Webhooky třetích stran Poskytovatelé, jako jsou GitHub, Stripe nebo Twilio, volají vaši funkci prostřednictvím adresy URL a tajného kódu. Přístupové klíče se dosazují přímo do očekávaného ?code= vzoru.
Volání mezi službami Back-endová služba A volá funkci B přes HTTP. Sdílený klíč je jednodušší než nastavení registrace aplikací Microsoft Entra pro interní hovory.
Odběry Event Grid Event Grid ověřuje a volá koncový bod funkce pomocí systémového klíče , který platforma spravuje automaticky.
Ověřování pro vývoj/testování Během vývoje potřebujete základní ověřování bez konfigurace úplného OAuth/OIDC. Přístupové klíče poskytují ověřovací bránu s nízkým třením bez konfigurace identity.
Kompatibilita migrace Stávající Azure Functions aplikace už používají přístupové klíče. Při migraci do Container Apps potřebujete stejné klíčové ověřování, abyste předešli výpadkům volajících.

Note

Pro uživatelská rozhraní API, úlohy nulové důvěryhodnosti nebo scénáře autorizace pro jednotlivé uživatele použijte místo přístupových klíčů Microsoft Entra ID / OAuth 2.0. Přístupové klíče jsou sdílené tajné kódy bez auditní stopy na úrovni identit.

Prerequisites

Typy přístupových klíčů

Modul runtime Služby Functions spravuje čtyři typy klíčů:

Typ klíče Scope Purpose
Hlavní klíč (_master) Kompletní Function App Přístup na úrovni správce ke všem funkcím a /admin/* koncovým bodům správy. Nedá se odvolat, jenom otočit.
Klíče hostitele (default + vlastní) Kompletní Function App Autorizace volání jakékoli funkce aktivované protokolem HTTP v aplikaci
Funkční klávesy (default + vlastní) Jednoduchá funkce Autorizace volání jedné konkrétní funkce Poskytuje podrobnější řízení než klíče hostitele.
Systémové klíče Koncové body rozšíření Používá se u rozšíření platforem, jako jsou odběry webhooků služby Event Grid a Durable Functions. Spravováno automaticky.

Vyberte úložiště typu backend

Nastavte proměnnou AzureWebJobsSecretStorageType prostředí tak, aby řídila, kde modul runtime udržuje přístupové klíče. Azure Container Apps podporuje tři back-endy na produkční úrovni.

Backend Nastavení hodnoty Automatické generování klíčů Externí závislost Nejlepší pro
Úložiště tajných kódů Container Apps containerapps Ne – zřídíte klíče jako tajné kódy Container Apps. None Většina úloh (doporučeno)
Azure Key Vault keyvault Ne – ruční vytvoření triggeru instance Key Vault Centralizované zásady správného řízení, auditování dodržování předpisů
Azure Blob Storage blob Ano úložišťový účet Starší verze aplikací nebo existující AzureWebJobsStorage účet

Mějte na paměti tyto backendové aspekty:

  • Runtime automaticky nevybere tajné úložiště Container Apps. Pokud ji nenastavíte AzureWebJobsSecretStorageType nebo nenastavíte na nerozpoznanou hodnotu, hostitel Functions používá Blob Storage, když AzureWebJobsStorage je k dispozici.
  • Udržujte AzureWebJobsStorage nastavené pro kontroly stavu úložiště a funkce závislé na úložišti.
  • Nenastavujte AzureWebJobsSecretStorageType na files. Souborový systém Container Apps je pomíjivý, takže klíče uložené na tomto backendu se ztrácejí, když aplikace škáluje na nulu, restartuje se nebo nasadí novou verzi.

Vzory tajných názvů

Zásady vytváření názvů pro uložené klíče závisí na back-endu úložiště.

Úložiště tajných kódů Container Apps používá jinou konvenci. Hostitel Functions načítá klíče ze souborů připojených ke svazku na adrese /run/secrets/functions-keys/. Každý soubor používá tečkovaný název (například host.master), ale názvy tajných kódů Container Apps umožňují pouze malé alfanumerické znaky a pomlčky. Když připojíte tajný svazek, musíte explicitně nastavit path pole na název tečkovaného souboru, který hostitel Functions očekává (například secretRef: host-masterpath: host.master). Platforma neprovádí automatický překlad názvů.

Typ klíče Název tajného kódu Container Apps (pomlčky) Připojení svazkupath (bodů)
Hlavní klíč host-master host.master
Výchozí klíč hostitele host-function-default host.function.default
Vlastní klíč hostitele host-function-<name> host.function.<name>
Výchozí klíč funkce pro konkrétní funkci functions-<functionname>-default functions.<functionName>.default
Vlastní klíč funkce pro konkrétní funkci functions-<functionname>-<keyname> functions.<functionName>.<keyName>
Systémový klíč host-systemkey-<extension> host.systemKey.<extension>

Tip

Při řešení potíží vyhledejte v back-endovém úložišti tyto vzory a ověřte, že jsou klíče správně nakonfigurované.

Konfigurace úložiště tajných kódů Container Apps

Úložiště tajemství „Container Apps“ je doporučeným zázemím. Klíče zůstanou v rámci platformy Container Apps a nevyžadují žádné externí úložiště ani Key Vault. Azure Resource Manager protokoly aktivit sledují změny tajných kódů a proměnných prostředí.

Díky tomuto back-endu hostitel Functions načítá klíče ze souborů připojených ke svazku na /run/secrets/functions-keys/adrese . Hostitel negeneruje klíče automaticky. Každý klíč musíte vytvořit jako tajný kód Container Apps a platforma je připojí jako soubory, aby ho hostitel přečetl.

Important

Úložiště tajných kódů Container Apps je jen pro čtení z pohledu hostitele. Hostitel čte připojené soubory klíčů, ale nikdy do nich nezapisuje. Pokud chybí požadovaný klíč, hostitel ho automaticky nevygeneruje.

Krok 1: Nastavení typu úložiště

  1. Přejděte do aplikace kontejneru Functions na portálu Azure.

  2. V části Nastavení vyberte Proměnné prostředí.

  3. Vyberte Přidat a zadejte následující hodnoty:

    Property Value
    název AzureWebJobsSecretStorageType
    Value containerapps
  4. Vyberte Uložit a pak kliknutím na Použít potvrďte změny.

Krok 2: Generování a ukládání tajných kódů přístupových klíčů

Vygenerujte hodnoty klíčů a ukládejte je jako tajné kódy Container Apps. Minimálně potřebujete hlavní klíč a výchozí klíč hostitele.

  1. V aplikaci kontejneru Functions v části Nastavení vyberte Tajné kódy.

  2. Vyberte Přidat a zadejte následující hodnoty:

    Property Value
    název host-master
    Type Tajný klíč kontejnerových aplikací
    Value Náhodně vygenerovaná hodnota klíče.
  3. Vyberte Přidat.

  4. Opakujte pro host-function-default s jinou náhodně vygenerovanou hodnotou.

  5. Pokud chcete přidat klíč pro jednotlivé funkce, přidejte tajný kód s názvem functions-<functionname>-default (všechna malá písmena).

Note

Názvy tajných kódů Container Apps umožňují pouze malá písmena alfanumerických znaků a pomlček. Pole v konfiguraci svazku path musíte explicitně nastavit na název tečkovaného souboru, který hostitel Functions očekává (například secretRef: host-masterpath: host.master). Bez explicitního výrazu pathzachová soubor na disku přerušovaný název a hostitel Functions klíč nenajde.

Krok 3: Konfigurace připojení svazku

Připojte tajné kódy jako soubory na adrese /run/secrets/functions-keys/.

  1. V aplikaci kontejneru Functions v části Aplikace vyberte Revize a repliky.

  2. Vyberte Vytvořit novou revizi.

  3. Na kartě Škálování a svazky v části Svazky vyberte Přidat.

  4. Zadejte následující hodnoty:

    Property Value
    Typ svazku Tajný kód
    název functions-keys
  5. Pro každý tajný klíč nastavte pole Cesta na tečkovaný název souboru, který hostitel Functions očekává (například nastavte host-master na cestu host.master, a host-function-default na cestu host.function.default).

  6. Vyberte Přidat.

  7. Na kartě Kontejner vyberte kontejner a pak vyberte Upravit.

  8. Vyberte kartu Připojení svazků a vyberte Přidat.

  9. Zadejte následující hodnoty:

    Property Value
    Název svazku functions-keys
    Přípojná cesta /run/secrets/functions-keys
  10. Vyberte Uložit a pak vyberte Vytvořit a nasaďte novou revizi.

Krok 4: Ověření

Po restartování aplikace ověřte, že klíče fungují:

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

Můžete také zkontrolovat protokoly aplikace pro zprávu Resolved secret storage provider ContainerAppsSecretsRepository, která potvrzuje, že hostitel používá úložiště tajností Container Apps.

Otočení kláves

Pokud chcete klíč otočit, aktualizujte tajný klíč Container Apps a restartujte aplikaci:

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

Všechny repliky sdílejí stejná připojená tajemství. Po restartování převezme každá replika aktualizované hodnoty klíče.

Nastavte Key Vault nebo Blob Storage jako úložiště

Back-end Key Vault ukládá přístupové klíče jako tajné kódy Key Vault a poskytuje auditování na podnikové úrovni a řízení přístupu.

  1. Vytvořte Key Vault (pokud ho nemáte):

    az keyvault create \
      --name "<KEYVAULT_NAME>" \
      --resource-group "<RESOURCE_GROUP>" \
      --location "<LOCATION>"
    
  2. Povolte spravovanou identitu v aplikaci kontejneru (pokud ještě není povolená):

    az containerapp identity assign \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --system-assigned
    
  3. Udělte spravované identitě roli Key Vault Secrets Officer. Modul runtime potřebuje přístup pro čtení a zápis k vytváření a správě klíčů:

    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. Nastavte typ úložiště a Key Vault identifikátor URI:

    Pro identitu přiřazenou systémem:

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

    Pro identitu přiřazenou uživatelem nastavte také ID klienta:

    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. Aktivace vytvoření klíče výpisem klíčů:

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

Správa přístupových klíčů

Bez ohledu na back-end použijte následující příkazy k výpisu, vytvoření a odstranění přístupových klíčů:

Note

Udržujte alespoň jednu repliku v provozu pro provádění těchto operací správy klíčů.

  • Seznam všech hostitelských klíčů:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type hostKey
    
  • Uveďte hlavní klíč:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type masterKey
    
  • Vytvořte nebo přepište vlastní hostitelský klíč:

    az containerapp function keys set \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "MyCustomKey" \
      --key-value "<YOUR_KEY_VALUE>" \
      --key-type hostKey
    
  • Ukažte konkrétní klíč:

    az containerapp function keys show \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "<KEY_NAME>" \
      --key-type hostKey
    
  • Smazat host klíč:

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

Volání funkce pomocí přístupového klíče

Klíč předejte jako parametr dotazu nebo hlavičku požadavku.

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