Hostsleutelopslag van Functions configureren op Azure Container Apps

Functions-toegangssleutels zijn verificatietokens die door de Functions-runtime worden gebruikt voor het beveiligen van door HTTP geactiveerde eindpunten. Wanneer een aanroeper een HTTP-functie aanroept, bevat deze een sleutel als een ?code= queryparameter of een x-functions-key header. De runtime valideert de sleutel en autoriseert of weigert de aanvraag.

Toegangssleutels zijn niet hetzelfde als geheimen op app-niveau. Met toegangssleutels wordt beveiligd wie uw functies kan aanroepen, terwijl geheimen op app-niveau beveiligen waarmee uw functies verbinding maken.

Wanneer moet u toegangssleutels gebruiken

Scenario Waarom toegangssleutels passen
Webhooks van derden Providers zoals GitHub, Stripe of Twilio roepen uw functie aan via een URL en geheim. Toegangssleutels passen rechtstreeks in het patroon ?code= dat zij verwachten.
Service-naar-service-aanroepen Back-endservice A roept Functie B aan via HTTP. Een gedeelde sleutel is eenvoudiger dan het instellen van Microsoft Entra app-registraties voor interne aanroepen.
Event Grid-abonnementen Event Grid valideert en roept uw functie-eindpunt aan met behulp van een systeemsleutel die het platform automatisch beheert.
Authenticatie voor dev/test Tijdens de ontwikkeling hebt u basisverificatie nodig zonder volledige OAuth/OIDC te configureren. Toegangssleutels bieden een verificatiepoort met lage wrijving zonder identiteitsconfiguratie.
Migratiecompatibiliteit Bestaande Azure Functions-apps gebruiken al toegangssleutels. Wanneer u migreert naar Container Apps, hebt u dezelfde sleutelgebaseerde authenticatie nodig om te voorkomen dat oproepers fouten ondervinden.

Note

Gebruik voor gebruikersgerichte API's, workloads zonder vertrouwen of autorisatie per gebruiker Microsoft Entra ID/OAuth 2.0 in plaats van toegangssleutels. Toegangssleutels zijn gedeelde geheimen zonder een controletraject op identiteitsniveau.

Vereiste voorwaarden

Toegangssleuteltypen

De Functions-runtime beheert vier typen sleutels:

Sleuteltype Bereik Purpose
Hoofdsleutel (_master) Volledige functie-applicatie Toegang op beheerdersniveau tot alle functies en /admin/* beheereindpunten. Kan niet worden ingetrokken, alleen gedraaid.
Hostsleutels (default + gebruikersspecifiek) Volledige functie-applicatie Autoriseren van aanroepen naar een door HTTP geactiveerde functie in de app.
Functietoetsen (default + aangepast) Eén functie Autoriseer aanroepen naar één specifieke functie. Biedt meer gedetailleerde controle dan hostsleutels.
Systeemsleutels Extensie-eindpunten Wordt gebruikt door platformextensies zoals Event Grid-webhookabonnementen en Durable Functions. Automatisch beheerd.

Een back-end voor opslag kiezen

Stel de AzureWebJobsSecretStorageType omgevingsvariabele in om te bepalen waar de runtime toegangssleutels bewaart. Azure Container Apps ondersteunt drie back-ends op productieniveau.

Back-end Waarde instellen Genereert automatisch sleutels Externe afhankelijkheid Ideaal voor
Container Apps Secret Store containerapps Nee - u richt sleutels in als Container Apps-geheimen Geen De meeste workloads (aanbevolen)
Azure Key Vault keyvault Nee - maak trigger handmatig aan Key Vault instantie Gecentraliseerd beheer, nalevingscontrole
Azure Blob-opslagruimte blob Ja Opslagaccount Verouderde apps of bestaand AzureWebJobsStorage account

Houd deze backend-overwegingen in gedachten:

  • De runtime selecteert niet automatisch Container Apps geheime opslag. Als je deze niet instelt AzureWebJobsSecretStorageType of instelt op een niet-herkende waarde, gebruikt de Functions-host Blob Storage wanneer AzureWebJobsStorage die beschikbaar is.
  • Blijf AzureWebJobsStorage geconfigureerd voor opslaggezondheidscontroles en opslagafhankelijke functies.
  • Stel AzureWebJobsSecretStorageType niet in op files. Het bestandssysteem van Container Apps is vluchtig, dus sleutels die bij deze backend zijn opgeslagen, gaan verloren wanneer de app schaalt naar nul, opnieuw start of een nieuwe versie uitrolt.

Geheime naampatronen

De naamconventie voor opgeslagen sleutels is afhankelijk van de back-end van de opslag.

De geheime opslagplaats van Container Apps volgt een andere conventie. De Functions host leest sleutels uit volume-gekoppelde bestanden op /run/secrets/functions-keys/. Elk bestand maakt gebruik van een gestippelde naam (bijvoorbeeld host.master), maar geheime namen van Container Apps staan alleen alfanumerieke tekens en streepjes in kleine letters toe. Wanneer u een geheim volume koppelt, moet u het path veld expliciet instellen op de gestippelde bestandsnaam die de Functions-host verwacht (bijvoorbeeld secretRef: host-masterpath: host.master). Het platform voert geen automatische naamomzetting uit.

Sleuteltype Geheime naam van Container Apps (streepjes) Volumekoppeling path (puntjes)
Hoofdsleutel host-master host.master
Standaardhostsleutel host-function-default host.function.default
Aangepaste hostsleutel host-function-<name> host.function.<name>
Standaardfunctietoets voor een specifieke functie functions-<functionname>-default functions.<functionName>.default
Aangepaste functiesleutel voor een specifieke functie functions-<functionname>-<keyname> functions.<functionName>.<keyName>
Systeemsleutel host-systemkey-<extension> host.systemKey.<extension>

Tip

Bij het oplossen van problemen zoekt u naar deze patronen in uw back-endarchief om te controleren of sleutels correct zijn geconfigureerd.

De Container Apps Secret Store configureren

De geheime opslag van Container Apps is de aanbevolen back-end. Sleutels blijven binnen het Container Apps-platform en vereisen geen externe opslag of Key Vault. Azure Resource Manager activiteitenlogboeken bijhouden wijzigingen in geheimen en omgevingsvariabelen.

Met deze back-end leest de Functions-host sleutels uit bestanden die volume-gemonteerd zijn op /run/secrets/functions-keys/. De host genereert geen sleutels automatisch. U moet elke sleutel maken als een Container Apps-geheim en het platform koppelt deze als bestanden voor de host om te lezen.

Important

De geheime opslag van Container Apps is alleen-lezen vanuit het perspectief van de host. De host leest de gekoppelde sleutelbestanden, maar schrijft er nooit naar. Als een vereiste sleutel ontbreekt, genereert de host deze niet automatisch.

Stap 1: Het opslagtype instellen

  1. Ga naar uw Functions-container-app in de Azure-portal.

  2. Selecteer onder Instellingenomgevingsvariabelen.

  3. Selecteer Toevoegen en voer de volgende waarden in:

    Vastgoed Waarde
    Naam AzureWebJobsSecretStorageType
    Waarde containerapps
  4. Selecteer Opslaan en selecteer Vervolgens Toepassen om de wijzigingen te bevestigen.

Stap 2: Toegangssleutelgeheimen genereren en opslaan

Genereer sleutelwaarden en sla deze op als Container Apps-geheimen. U hebt minimaal de hoofdsleutel en een standaardhostsleutel nodig.

  1. Selecteer Geheimen in uw Functions-container-app onder Instellingen.

  2. Selecteer Toevoegen en voer de volgende waarden in:

    Vastgoed Waarde
    Naam host-master
    Type Container Apps Secret
    Waarde Een willekeurig gegenereerde sleutelwaarde.
  3. Selecteer Toevoegen.

  4. Herhaal voor host-function-default met een andere willekeurig gegenereerde waarde.

  5. Als u een sleutel per functie wilt toevoegen, voegt u een geheim toe met de naam functions-<functionname>-default (alle kleine letters).

Note

Geheime namen van Container Apps staan alleen alfanumerieke tekens en streepjes in kleine letters toe. U moet het path veld in de volumeconfiguratie expliciet instellen op de gestippelde bestandsnaam die de Functions-host verwacht (bijvoorbeeld secretRef: host-masterpath: host.master). Zonder een expliciete pathnaam behoudt het bestand op de schijf de onderbroken naam en wordt de sleutel niet gevonden door de Functions-host.

Stap 3: De volumekoppeling configureren

Koppel de geheimen als bestanden bij /run/secrets/functions-keys/.

  1. Selecteer in uw Functions-container-app, onder Toepassing, Revisies en replica's.

  2. Selecteer Nieuwe revisie maken.

  3. Selecteer Toevoegen op het tabblad Schaal en volumes onder Volumes.

  4. Voer de volgende waarden in:

    Vastgoed Waarde
    Volumetype Geheim
    Naam functions-keys
  5. Stel voor elk geheim het veld Pad in op de gestippelde bestandsnaam die de Functions-host verwacht (bijvoorbeeld ingesteld host-master op pad host.masteren host-function-default pad host.function.default).

  6. Selecteer Toevoegen.

  7. Selecteer uw container op het tabblad Container en selecteer vervolgens Bewerken.

  8. Selecteer het tabblad Volumekoppelingen en selecteer Toevoegen.

  9. Voer de volgende waarden in:

    Vastgoed Waarde
    Volumenaam functions-keys
    Koppelingspad /run/secrets/functions-keys
  10. Selecteer Opslaan en selecteer Vervolgens Maken om de nieuwe revisie te implementeren.

Stap 4: Verifiëren

Nadat de app opnieuw is opgestart, controleert u of de sleutels werken:

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

U kunt ook de app-logboeken voor het bericht Resolved secret storage provider ContainerAppsSecretsRepositorycontroleren, waarmee wordt bevestigd dat de host gebruikmaakt van de Container Apps Secret Store.

Sleutels roteren

Om een sleutel te roteren, werk de Container Apps secret bij en start de app opnieuw op.

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

Alle replica's delen dezelfde gekoppelde geheime gegevens. Nadat de replica opnieuw is opgestart, worden de bijgewerkte sleutelwaarden opgehaald.

Configureer Key Vault of Blob Storage als opslag

De Key Vault back-end slaat toegangssleutels op als Key Vault geheimen en biedt controle op bedrijfsniveau en toegangsbeheer.

  1. Maak een Key Vault (als u er nog geen hebt):

    az keyvault create \
      --name "<KEYVAULT_NAME>" \
      --resource-group "<RESOURCE_GROUP>" \
      --location "<LOCATION>"
    
  2. Beheerde identiteit inschakelen in uw container-app (als deze nog niet is ingeschakeld):

    az containerapp identity assign \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --system-assigned
    
  3. Geef de rol Key Vault Secrets Officer aan de gemanagede identiteit. De runtime heeft lees- en schrijftoegang nodig om sleutels te maken en te beheren:

    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. Stel het opslagtype en Key Vault URI in:

    Voor door het systeem toegewezen identiteit:

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

    Stel voor door de gebruiker toegewezen identiteit ook de client-id in:

    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. Het maken van een triggersleutel door sleutels weer te geven:

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

Toegangssleutels beheren

Gebruik, ongeacht de back-end, de volgende opdrachten om toegangssleutels weer te geven, te maken en te verwijderen:

Note

Houd minstens één replica draaien om deze sleutelbeheeroperaties uit te voeren.

  • Lijst van alle hostsleutels:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type hostKey
    
  • Vermeld de hoofdsleutel:

    az containerapp function keys list \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-type masterKey
    
  • Maak een aangepaste hostsleutel aan of overschrijf je:

    az containerapp function keys set \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "MyCustomKey" \
      --key-value "<YOUR_KEY_VALUE>" \
      --key-type hostKey
    
  • Toon een specifieke toonsoort:

    az containerapp function keys show \
      --resource-group "<RESOURCE_GROUP>" \
      --name "<FUNCTIONS_APP_NAME>" \
      --key-name "<KEY_NAME>" \
      --key-type hostKey
    
  • Verwijder een hostsleutel:

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

Een functie aanroepen met een toegangssleutel

Geef de sleutel door als een query-parameter of verzoekheader.

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