Werken met toegangssleutels in Azure Functions

Azure Functions toegangssleutels fungeren als gedeelde geheimen die toegang tot functie-endpoints autoriseren. In dit artikel worden de soorten toegangssleutels beschreven die door Functions worden ondersteund en hoe u kunt werken met toegangssleutels.

Hoewel toegangssleutels enige bescherming bieden tegen ongewenste toegang, overweeg dan andere opties om HTTP-eindpunten in productie te beveiligen. Verspreid bijvoorbeeld geen gedeelde geheimen in een openbare app. Als een publieke client uw functie aanroept, overweeg dan deze of andere beveiligingsmechanismen te implementeren:

Toegangssleutels vormen de basis voor HTTP-autorisatie in HTTP-getriggerde functies. Zie Autorisatieniveau voor meer informatie.

Toegangssleuteltypen

Het bereik van een toegangssleutel en de acties die worden ondersteund, zijn afhankelijk van het type toegangssleutel.

Sleuteltype Sleutelnaam HTTP-verificatieniveau Beschrijving
Functie default of door de gebruiker gedefinieerd function Hiermee wordt alleen toegang tot een specifiek functie-eindpunt toegestaan.
Gastheer default of door de gebruiker gedefinieerd function Hiermee heeft u toegang tot alle functie-eindpunten in een functie-app.
Meester _master admin Speciale hostsleutel die ook beheerderstoegang biedt tot de RUNTIME REST API's in een functie-app. Omdat de master key verhoogde rechten geeft in je functie-app, deel deze sleutel niet met derden of verspreid hem niet in native clientapplicaties.
Systeem Afhankelijk van de extensie n.v.t Voor specifieke extensies is mogelijk een door het systeem beheerde sleutel vereist voor toegang tot webhook-eindpunten. Systeemsleutels zijn ontworpen voor extensie-specifieke functie-eindpunten die interne componenten oproepen. De Event Grid-trigger vereist bijvoorbeeld dat het abonnement een systeemsleutel gebruikt bij het aanroepen van het triggereindpunt. Durable Functions maakt ook gebruik van systeemsleutels om API's voor durable task-extensie aan te roepen.
Alleen specifieke extensies kunnen systeemsleutels maken. U kunt hun waarden niet expliciet instellen. Net als andere sleutels kunt u een nieuwe waarde genereren voor de sleutel vanuit de portal of met behulp van de sleutel-API's.

Elke sleutel heeft een naam ter referentie. De functie-app en functieniveaus hebben elk een standaardtoets genaamd default. Functietoetsen hebben voorrang op hostsleutels. Wanneer twee toetsen dezelfde naam hebben, wordt altijd de functietoets gebruikt.

In de volgende tabel worden de toepassingen voor verschillende soorten toegangssleutels vergeleken:

Handeling Omvang Sleuteltype
Een functie uitvoeren Specifieke functie Functie
Een functie uitvoeren Elke functie Functie of gastheer
Een admin eindpunt aanroepen Functie-app Meester
Duurzame taakextensie-API's aanroepen Functie-app* Systeem
Roep een extensie-specifieke webhook aan (intern) Functie-app* Systeem

*Bereik bepaald door de extensie.

Vereisten voor toegangssleutels

In Functions worden willekeurige 32-byte toegangsleutels gegenereerd die zijn gecodeerd als URL-veilige base-64-tekenreeksen. Hoewel je je eigen toegangssleutels kunt genereren en deze met Functions kunt gebruiken, gebruik dan in plaats daarvan het standaard toegangssleutelgeneratieproces.

Door functies gegenereerde toegangssleutels bevatten speciale handtekening- en controlesomwaarden die het type toegangssleutel aangeven en dat Azure Functions deze heeft gegenereerd. Deze extra componenten in de sleutel maken het eenvoudiger om de bron van dit soort geheimen te bepalen tijdens beveiligingsscanningen en andere geautomatiseerde processen.

Om Functions toe te staan je sleutels te genereren, geef je de sleutel value niet aan een van de API's die je kunt gebruiken om sleutels te genereren.

Opslag van toegangssleutels

Je functie-app in Azure slaat sleutels op en versleutelt ze in rust. Standaard slaat de AzureWebJobsStorage instelling sleutels op in een Blob-opslagcontainer in het opgegeven account. Gebruik de AzureWebJobsSecretStorageType instelling om dit standaardgedrag te overschrijven en sla sleutels op op een van deze alternatieve locaties:

Belangrijk

Toegangssleutels maken deel uit van de geheime opslag van je app en hebben hun eigen levenscyclus, onafhankelijk van de functies die ze beschermen. Het verwijderen van een functie verwijdert of roteert de sleutels in de geheime opslag niet. Omdat de opslaglocatie van een sleutel is afgeleid van de appnaam, gebruikt het opnieuw aanmaken van een functie met dezelfde naam de eerder opgeslagen sleutels in plaats van nieuwe te genereren. Dit gedrag geldt voor alle geheime opslagproviders, inclusief Blob Storage en Key Vault. Het verwijderen en opnieuw aanmaken van een functie is geen vervanging voor sleutelrotatie: om een sleutel in te trekken wanneer een inloggegevens wordt getoond of je iemands toegang verwijdert, moet je deze expliciet roteren of verwijderen, zoals beschreven in Vernieuwen of toegangssleutels aanmaken.

Locatie Waarde Beschrijving
Een tweede opslagaccount blob Slaat sleutels op in Blob Storage in een opslagaccount dat verschilt van het account dat door de Functions-runtime wordt gebruikt. Het specifieke account en de gebruikte container worden gedefinieerd door een SAS-URL (Shared Access Signature) die is ingesteld in de AzureWebJobsSecretStorageSas instelling. U moet de AzureWebJobsSecretStorageSas instelling behouden wanneer de SAS-URL wordt gewijzigd.
Azure Key Vault- keyvault Slaat sleutels op in de sleutelkluis die is ingesteld in AzureWebJobsSecretStorageKeyVaultUri.
Bestandssysteem files Sleutels blijven behouden op het lokale bestandssysteem. Dit is de standaardwaarde in Functions v1.x. Bestandssysteemopslag wordt niet aanbevolen.
Kubernetes-geheimen kubernetes Slaat sleutels op in de resource die in AzureWebJobsKubernetesSecretNameis gezet. Alleen ondersteund wanneer uw functie-app wordt geïmplementeerd in Kubernetes. De Azure Functions Core Tools genereert de waarden automatisch wanneer u deze gebruikt om uw app te implementeren in een Kubernetes-cluster. Onveranderbare geheimen worden niet ondersteund.
Azure Container Apps-geheimen containerapps Sleutels worden opgeslagen in het Azure Container Apps geheimenarchief, het interne geheimenbeheersysteem voor Container Apps. Alleen ondersteund wanneer uw functie-app wordt geïmplementeerd in Azure Container Apps. Voor informatie, zie Configureer de geheime winkel van Container Apps.

Wanneer je Key Vault gebruikt voor sleutelopslag, hangen de benodigde app-instellingen af van hoe de app zich authenticeert bij Key Vault: een door het systeem toegewezen beheerde identiteit, een door de gebruiker toegewezen beheerde identiteit, of een app-registratie.

Instellingsnaam Door het systeem toegewezen Door de gebruiker toegewezen App-registratie
AzureWebJobsSecretStorageKeyVaultUri Yes Yes Yes
AzureWebJobsSecretStorageKeyVaultClientId No Yes Yes
AzureWebJobsSecretStorageKeyVaultClientSecret No No Yes
AzureWebJobsSecretStorageKeyVaultTenantId No No Yes

Belangrijk

Geheimen zijn niet gericht op afzonderlijke functie-apps via de AzureWebJobsSecretStorageKeyVaultUri instelling. Als meerdere functie-apps zijn geconfigureerd om dezelfde Key Vault te gebruiken, delen ze dezelfde sleutels en geheimen, wat kan leiden tot sleutelconflicten of overschrijvingen. Om onbedoeld gedrag te voorkomen, raden we u aan een afzonderlijk Key Vault-exemplaar te gebruiken voor elke functie-app.

Oproep-eindpunten met toegangssleutels

Je kunt HTTP-getriggerde functies aanroepen door een URL te gebruiken die de functienaam bevat. Wanneer je het autorisatieniveau van een functie op een andere waarde dan anonymousinstelt, moet je ook een toegangssleutel in je verzoek opgeven. Je kunt de toegangssleutel in de URL opnemen door de ?code= querystring te gebruiken of in de requestheader (x-functions-key). Zie Toegangssleutelautorisatie voor meer informatie.

Als u toegang wilt krijgen tot de RUNTIME REST API's (onder /admin/), moet u de hoofdsleutel (_master) opgeven in de x-functions-key aanvraagheader. Je kunt administratieve eindpunten uitschakelen door de site-eigenschap in te functionsRuntimeAdminIsolationEnabled stellen.

Toegangssleutels voor uw functie ophalen

U kunt functie- en hostsleutels programmatisch ophalen met behulp van deze Azure Resource Manager-API's:

Zie de Naslaginformatie over de Azure REST API voor meer informatie over het aanroepen van Azure Resource Manager-API's.

Note

Wanneer je je functie-app uitrolt naar Azure Container Apps en gebruiktAzureWebJobsSecretStorageType=ContainerApps, moet je Container Apps-specifieke methoden gebruiken om functiesleutels op te halen. Voor meer informatie, zie Toegangssleutels beheren in de documentatie van Container Apps.

Gebruik deze methoden om toegangssleutels te verkrijgen zonder gebruik te maken van de REST API's.

  1. Log in op het Azure-portaal en zoek vervolgens naar en selecteer Function App.

  2. Selecteer de functie-app waarmee u wilt werken.

  3. Vouw functies uit in het linkermenu en selecteer vervolgens App-sleutels.

    De pagina App-sleutels wordt weergegeven. Op deze pagina worden de hostsleutels weergegeven, die je kunt gebruiken om elke functie in de app te openen. De systeemsleutel wordt ook weergegeven, waardoor iedereen op beheerdersniveau toegang heeft tot alle API's van de functie-app.

U kunt ook het principe van minimaal privilege toepassen door de sleutel te gebruiken voor een specifieke functie. U kunt functiespecifieke sleutels ophalen op het tabblad Functietoetsen van een specifieke door HTTP geactiveerde functie.

Aanbeveling

Je kunt ook toegangssleutels voor je functies krijgen door het Azure Functions Core Tools-commando func azure functionapp list-functions te gebruiken met de --show-keys optie. Zie de naslaginformatie over Azure Functions Core Tools voor meer informatie.

Toegangssleutels vernieuwen of maken

Wanneer u uw toegangssleutelwaarden verlengt of maakt, moet u de bijgewerkte sleutelwaarden handmatig distribueren naar alle clients die uw functie aanroepen.

Belangrijk

Behandel de hoofdsleutel (_master) als een administratief credential. Het geeft administratieve, dataplane toegang tot je app—inclusief, bij apps met een beschrijfbaar bestandssysteem, de mogelijkheid om code te deployen en uit te voeren via de runtime REST API's—dus deel deze alleen met vertrouwde beheerders, niet met gewone aanroepers. Hostsleutels zijn niet administratief, maar elke sleutel autoriseert aanroepen naar elke functie in de app, dus verdeel ze ook zorgvuldig.

Wanneer inloggegevens gecompromitteerd zijn, of wanneer je de toegang van een partij moet intrekken, roteer de betreffende sleutels dan expliciet. Het draaien van een individuele sleutel is voldoende om die specifieke sleutel te intrekken. Zoals vermeld in Access key storage, roteert het verwijderen of opnieuw aanmaken van een functie de opgeslagen toetsen niet.

U kunt functie- en hostsleutels programmatisch vernieuwen of nieuwe sleutels maken met behulp van deze Azure Resource Manager-API's:

Zie de Naslaginformatie over de Azure REST API voor meer informatie over het aanroepen van Azure Resource Manager-API's.

U kunt deze methoden gebruiken om toegangssleutels op te halen zonder handmatig aanroepen naar de REST API's te hoeven maken.

  1. Log in op het Azure-portaal en zoek vervolgens naar en selecteer Function App.

  2. Selecteer de functie-app waarmee u wilt werken.

  3. Vouw functies uit in het linkermenu en selecteer vervolgens App-sleutels.

    De pagina App-sleutels wordt weergegeven. Op deze pagina worden de hostsleutels weergegeven, die je kunt gebruiken om elke functie in de app te openen. De systeemsleutel wordt ook weergegeven, waardoor iedereen op beheerdersniveau toegang heeft tot alle API's van de functie-app.

  4. Selecteer de sleutelwaarde Vernieuwen naast de sleutel die je wilt verlengen, en selecteer vervolgens Vernieuwen en opslaan.

U kunt ook een functiesleutel vernieuwen op het tabblad Functietoetsen van een specifieke door HTTP geactiveerde functie.

Toegangssleutels verwijderen

U kunt functie- en hostsleutels programmatisch verwijderen met behulp van deze Azure Resource Manager-API's:

Zie de Naslaginformatie over de Azure REST API voor meer informatie over het aanroepen van Azure Resource Manager-API's.