Arbeta med åtkomstnycklar i Azure Functions

Azure Functions-åtkomstnycklar fungerar som delade hemligheter som auktoriserar åtkomst till funktionsändpunkter. I den här artikeln beskrivs vilka typer av åtkomstnycklar som functions stöder och hur du arbetar med åtkomstnycklar.

Även om åtkomstnycklar ger visst skydd mot oönskad åtkomst, överväg andra alternativ för att säkra HTTP-endpoints i produktion. Till exempel, distribuera inte delade hemligheter i en publik app. Om en publik klient anropar din funktion, överväg att implementera dessa eller andra säkerhetsmekanismer:

Åtkomstnycklar utgör grunden för HTTP-auktorisation i HTTP-utlösta funktioner. Mer information finns i auktoriseringsnivå.

Åtkomst till nyckeltyper

Omfånget för en åtkomstnyckel och vilka åtgärder den stöder beror på typen av åtkomstnyckel.

Nyckeltyp Nyckelnamn HTTP-autentiseringsnivå beskrivning
Funktion default eller användardefinierad function Tillåter endast åtkomst till en specifik funktionsslutpunkt.
Värd default eller användardefinierad function Tillåter åtkomst till alla funktionsslutpunkter i en funktionsapp.
Mästare _master admin Särskild värdnyckel som också ger administrativ åtkomst till REST-API:er för körning i en funktionsapp. Eftersom huvudnyckeln ger förhöjda behörigheter i din funktionsapp, dela inte denna nyckel med tredje part eller distribuera den i native-klientapplikationer.
System Beror på tillägget saknas Specifika tillägg kan kräva en systemhanterad nyckel för åtkomst till webhook-slutpunkter. Systemnycklar är avsedda för tilläggsspecifika ändpunkter för funktioner som interna komponenter anropar. Event Grid-utlösaren kräver till exempel att prenumerationen använder en systemnyckel när den anropar utlösarslutpunkten. Durable Functions använder också systemnycklar för att anropa API:er för durable task-tillägget.
Endast specifika tillägg kan skapa systemnycklar. Du kan inte uttryckligen ange deras värden. Precis som andra nycklar kan du generera ett nytt värde för nyckeln från portalen eller med hjälp av nyckel-API:erna.

Varje nyckel har ett namn som referens. Funktionsappen och funktionsnivåerna har varsin standardtangent som heter default. Funktionsnycklar har företräde framför värdnycklar. När två tangenter har samma namn används alltid funktionstangenten.

I följande tabell jämförs användningarna för olika typer av åtkomstnycklar:

Åtgärd Omfattning Nyckeltyp
Köra en funktion Specifik funktion Funktion
Köra en funktion Alla funktioner Funktion eller värd
Anropa en admin slutpunkt Funktionsapp Mästare
Anropa API:er för durable task-tillägget Funktionsapp* Systemet
Anropa en webhook specifik för anknytning (intern) Funktionsapp* Systemet

*Omfång som bestäms av tillägget.

Krav på åtkomstnyckel

I Functions är åtkomstnycklar slumpmässigt genererade 32-byte-arrayer som kodas som URL-säkra base-64-strängar. Även om du kan generera dina egna accessnycklar och använda dem med Functions, använd istället standardprocessen för generering av accessnyckeln.

Funktionsgenererade åtkomstnycklar innehåller särskilda signatur- och kontrollsummor som anger typen av åtkomstnyckel och att Azure Functions genererade den. Dessa extra komponenter i nyckeln gör det enklare att fastställa källan till dessa typer av hemligheter under säkerhetsskanning och andra automatiserade processer.

För att låta Functions generera dina nycklar, tillhandahåll inte nyckeln value till några av API:erna som du kan använda för att generera nycklar.

Åtkomstnyckellagring

Din funktionsapp i Azure lagrar nycklar och krypterar dem i vila. Som standard lagrar inställningen AzureWebJobsStorage nycklar i en Blob-lagringsbehållare i det tillhandahållna kontot. Använd inställningen AzureWebJobsSecretStorageType för att åsidosätta detta standardbeteende och lagra nycklar på någon av dessa alternativa platser:

Viktigt!

Åtkomstnycklar är en del av din apps hemliga lagring och har sin egen livscykel, oberoende av vilka funktioner de skyddar. Att ta bort en funktion raderar eller roterar inte nycklarna som lagras i hemlighetslagret. Eftersom en nyckels lagringsplats härleds från appens namn, återanvänder återskapandet av en funktion med samma namn de tidigare lagrade nycklarna istället för att generera nya. Detta beteende gäller alla leverantörer av hemlig lagring, inklusive Blob Storage och Key Vault. Att ta bort och återskapa en funktion är inte en ersättning för nyckelrotation: för att återkalla en nyckel när en legitimation exponeras eller du tar bort någons åtkomst måste du uttryckligen rotera eller ta bort den, som beskrivs i Renew eller create access keys.

Plats Värde beskrivning
Ett andra lagringskonto blob Lagrar nycklar i Blob Storage i ett lagringskonto som skiljer sig från det som används av Functions-runtime. Det specifika konto och den container som används definieras av en SAS-URL (signatur för delad åtkomst) som anges i inställningen AzureWebJobsSecretStorageSas . Du måste behålla inställningen AzureWebJobsSecretStorageSas när SAS-URL:en ändras.
Azure Key Vault keyvault Lagrar nycklar i nyckelvalvet som angetts i AzureWebJobsSecretStorageKeyVaultUri.
Filsystem files Nycklar sparas i det lokala filsystemet, vilket är standardvärdet i Functions v1.x. Lagring av filsystem rekommenderas inte.
Kubernetes-hemligheter kubernetes Lagrar nycklar i resurssättet i AzureWebJobsKubernetesSecretName. Stöds endast när funktionsappen distribueras till Kubernetes. Azure Functions Core Tools genererar värdena automatiskt när du använder det för att distribuera din app till ett Kubernetes-kluster. Oföränderliga hemligheter stöds inte.
Azure Container Apps-hemligheter containerapps Nycklar lagras i Azure Container Apps-hemlighetsarkivet, som är det interna hanteringssystemet för hemligheter för Container Apps. Stöds endast när funktionsappen distribueras till Azure Container Apps. För information, se Konfigurera hemlighetsarkivet för Container Apps.

När du använder Key Vault för nyckellagring beror de appinställningar du behöver på hur appen autentiserar sig mot Key Vault: en systemtilldelad hanterad identitet, en användartilldelad hanterad identitet eller en appregistrering.

Inställningsnamn Systemtilldelad Användartilldelad Appregistrering
AzureWebJobsSecretStorageKeyVaultUri Yes Yes Yes
AzureWebJobsSecretStorageKeyVaultClientId No Yes Yes
AzureWebJobsSecretStorageKeyVaultClientSecret No No Yes
AzureWebJobsSecretStorageKeyVaultTenantId No No Yes

Viktigt!

Hemligheter är inte begränsade till enskilda funktionsappar via inställningen AzureWebJobsSecretStorageKeyVaultUri . Om flera funktionsappar har konfigurerats för att använda samma Key Vault delar de samma hemligheter, vilket kan leda till nyckelkollisioner eller överskrivningar. För att undvika oavsiktligt beteende rekommenderar vi att du använder en separat Key Vault-instans för varje funktionsapp.

Anropsändpunkter med åtkomstnycklar

Du kan anropa HTTP-utlösta funktioner genom att använda en URL som inkluderar funktionsnamnet. När du sätter auktorisationsnivån för en funktion till något annat värde än anonymous, måste du också ange en åtkomstnyckel i din förfrågan. Du kan inkludera accessnyckeln i URL:en genom att använda frågesträngen ?code= eller i begäransökandets huvud (x-functions-key). Mer information finns i Åtkomstnyckelauktorisering.

För att få åtkomst till REST-API:erna för körning (under /admin/) måste du ange huvudnyckeln (_master) i begärandehuvudet x-functions-key . Du kan inaktivera administrativa slutpunkter genom att ange functionsRuntimeAdminIsolationEnabled webbplatsegenskapen.

Hämta funktionsåtkomstnycklar

Du kan hämta funktions- och värdnycklar programmatiskt med hjälp av dessa Azure Resource Manager-API:er:

Mer information om hur du anropar Azure Resource Manager-API:er finns i Azure REST API-referensen.

Note

När du distribuerar din funktionsapp till Azure Container Apps och använder AzureWebJobsSecretStorageType=ContainerApps, måste du använda Container Apps-specifika metoder för att hämta funktionsnycklar. För mer information, se Hantera åtkomstnycklar i Container Apps-dokumentationen.

Använd dessa metoder för att få åtkomstnycklar utan att använda REST-API:erna.

  1. Logga in på Azure-portalen och sök sedan efter och välj Function App.

  2. Välj den funktionsapp som du vill arbeta med.

  3. I den vänstra menyn expanderar du Functions och väljer sedan Appnycklar.

    Sidan Appnycklar visas. På denna sida visas värdnycklarna, som du kan använda för att komma åt vilken funktion som helst i appen. Systemnyckeln visas också, vilket ger alla åtkomst på administratörsnivå till alla funktionsapp-API:er.

Du kan också öva på minsta möjliga behörighet genom att använda nyckeln för en specifik funktion. Du kan hämta funktionsspecifika nycklar från fliken Funktionsnycklar i en specifik HTTP-utlöst funktion.

Tips/Råd

Du kan också få åtkomstnycklar till dina funktioner genom att använda kommandot func azure functionapp list-functions Azure Functions Core Tools med valmöjligheten--show-keys. Mer information finns i referensen för Azure Functions Core Tools.

Förnya eller skapa åtkomstnycklar

När du förnyar eller skapar dina åtkomstnyckelvärden måste du manuellt omdistribuera de uppdaterade nyckelvärdena till alla klienter som anropar funktionen.

Viktigt!

Behandla huvudnyckeln (_master) som en administrativ behörighet. Den ger administrativ dataplansåtkomst till din app – inklusive, på appar med skrivbart filsystem, möjligheten att distribuera och köra kod via runtime REST-API:erna – så dela den endast med betrodda administratörer, inte med vanliga anropare. Värdnycklar är inte administrativa, men varje nyckel ger behörighet att anropa valfri funktion i appen, så distribuera dem därför också varsamt.

När en legitimation exponereras, eller när du behöver återkalla en parts åtkomst, rotera uttryckligen de berörda nycklarna. Att rotera en enskild nyckel räcker för att ta bort just den nyckeln. Som nämnts i Access Key Storage roterar inte de lagrade tangenterna när man tar bort eller skapar en funktion igen.

Du kan förnya funktions- och värdnycklar programmatiskt eller skapa nya med hjälp av dessa Azure Resource Manager-API:er:

Mer information om hur du anropar Azure Resource Manager-API:er finns i Azure REST API-referensen.

Du kan använda dessa metoder för att hämta åtkomstnycklar utan att behöva skapa anrop till REST-API:erna manuellt.

  1. Logga in på Azure-portalen och sök sedan efter och välj Function App.

  2. Välj den funktionsapp som du vill arbeta med.

  3. I den vänstra menyn expanderar du Functions och väljer sedan Appnycklar.

    Sidan Appnycklar visas. På denna sida visas värdnycklarna, som du kan använda för att komma åt vilken funktion som helst i appen. Systemnyckeln visas också, vilket ger alla åtkomst på administratörsnivå till alla funktionsapp-API:er.

  4. Välj Förnya nyckelvärde bredvid den nyckel du vill förnya, och välj sedan Förnya och spara.

Du kan också förnya en funktionsnyckel på fliken Funktionsnycklar i en specifik HTTP-utlöst funktion.

Ta bort åtkomstnycklar

Du kan ta bort funktions- och värdnycklar programmatiskt med hjälp av dessa Azure Resource Manager-API:er:

Mer information om hur du anropar Azure Resource Manager-API:er finns i Azure REST API-referensen.