Arbeta med åtkomstnycklar i Azure Functions

Med Azure Functions kan du använda hemliga nycklar för att göra det svårare att komma åt funktionsslutpunkterna. Den här artikeln beskriver de olika typer av åtkomstnycklar som stöds av Functions och hur du arbetar med åtkomstnycklar.

Även om åtkomstnycklar ger viss lindring mot oönskad åtkomst bör du överväga andra alternativ för att skydda HTTP-slutpunkter i produktion. Det är till exempel inte en bra idé att distribuera delade hemligheter i en offentlig app. Om din funktion anropas från en offentlig klient bör du överväga att implementera dessa eller andra säkerhetsmekanismer:

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

Förstå nycklar

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.
Rubrik _master admin Särskild värdnyckel som också ger administrativ åtkomst till REST-API:er för körning i en funktionsapp. Det går inte att återkalla den här nyckeln. Eftersom huvudnyckeln ger utökade behörigheter i funktionsappen bör du inte dela den här nyckeln med tredje part eller distribuera den i interna klientprogram.
System Beror på tillägget saknas Specifika tillägg kan kräva en systemhanterad nyckel för åtkomst till webhook-slutpunkter. Systemnycklar är utformade för tilläggsspecifika funktionsslutpunkter som anropas av interna komponenter. Event Grid-utlösaren kräver till exempel att prenumerationen använder en systemnyckel när du anropar utlösarslutpunkten. Durable Functions använder också systemnycklar för att anropa API:er för durable task-tillägget.
Systemnycklar kan bara skapas med specifika tillägg och 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 namnges som referens och det finns en standardnyckel (med namnet default) på funktions- och värdnivå. Funktionsnycklar har företräde framför värdnycklar. När två nycklar definieras med samma namn används alltid funktionsnyckeln.

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 Endast huvud
Anropa API:er för durable task-tillägget Funktionsapp* System
Anropa en tilläggsspecifik Webhook (intern) Funktionsapp* system

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

Viktiga krav

I Functions genereras åtkomstnycklar slumpmässigt 32 byte-matriser som kodas som URL-säkra base-64-strängar. Även om du kan generera dina egna åtkomstnycklar och använda dem med Functions rekommenderar vi starkt att du i stället tillåter att Functions genererar alla dina åtkomstnycklar åt dig.

Funktionsgenererade åtkomstnycklar innehåller särskilda signatur- och kontrollsummor som anger typen av åtkomstnyckel och att den genererades av Azure Functions. Att ha dessa extra komponenter i själva nyckeln gör det mycket enklare att fastställa källan till den här typen av hemligheter som finns under säkerhetsgenomsökning och andra automatiserade processer.

Om du vill tillåta att Functions genererar dina nycklar åt dig anger du inte nyckeln value till någon av de API:er som du kan använda för att generera nycklar.

Hantera nyckellagring

Nycklar lagras som en del av funktionsappen i Azure och krypteras i vila. Som standard lagras nycklar i en Blob Storage-container i det konto som anges av inställningen AzureWebJobsStorage . Du kan använda inställningen AzureWebJobsSecretStorageType för att åsidosätta det här standardbeteendet och i stället lagra nycklar på någon av dessa alternativa platser:

Location Värde beskrivning
Ett andra lagringskonto blob Lagrar nycklar i Blob Storage på ett annat lagringskonto än det som används av Functions-körningen. 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 Nyckelvalvet som anges i AzureWebJobsSecretStorageKeyVaultUri används för att lagra nycklar.
Filsystem files Nycklar sparas i det lokala filsystemet, vilket är standardvärdet i Functions v1.x. Lagring av filsystem rekommenderas inte.
Kubernetes-hemligheter kubernetes Resursen som anges i AzureWebJobsKubernetesSecretName används för att lagra nycklar. 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.

När du använder Key Vault för nyckellagring beror appinställningarna du behöver på den hanterade identitetstypen, antingen systemtilldelad eller användartilldelad.

Inställningsnamn Systemtilldelad Användartilldelad Appregistrering
AzureWebJobsSecretStorageKeyVaultUri
AzureWebJobsSecretStorageKeyVaultClientId X
AzureWebJobsSecretStorageKeyVaultClientSecret X X
AzureWebJobsSecretStorageKeyVaultTenantId X X

Använda åtkomstnycklar

HTTP-utlösta funktioner kan vanligtvis anropas med hjälp av en URL i formatet: https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>. När auktoriseringsnivån för en viss funktion har angett ett annat värde än anonymousmåste du också ange en åtkomstnyckel i din begäran. Åtkomstnyckeln kan antingen anges i URL:en med hjälp av frågesträngen ?code= eller i begärandehuvudet (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 ta bort administratörsslutpunkterna med hjälp av webbplatsegenskapen functionsRuntimeAdminIsolationEnabled .

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.

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

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

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

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

    Sidan Appnycklar visas. På den här sidan visas värdnycklarna, som kan användas för att komma åt alla funktioner 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.

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.

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 Funktionsapp.

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

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

    Sidan Appnycklar visas. På den här sidan visas värdnycklarna, som kan användas för att komma åt alla funktioner 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 som 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.