Práce s přístupovými klíči ve službě Azure Functions

Přístupové klíče Azure Functions fungují jako sdílená tajemství, která autorizují přístup k funkčním endpointům. Tento článek popisuje typy přístupových klíčů, které Functions podporuje, a jak pracovat s přístupovými klíči.

Zatímco přístupové klíče poskytují určitou ochranu proti nežádoucímu přístupu, zvažte i jiné možnosti zabezpečení HTTP koncových bodů v produkci. Například nerozšiřujte sdílená tajemství ve veřejné aplikaci. Pokud veřejný klient volá vaši funkci, zvažte implementaci těchto nebo jiných bezpečnostních mechanismů:

Přístupové klíče tvoří základ pro autorizaci HTTP v funkcích spouštěných HTTP. Další informace najdete v tématu Úroveň autorizace.

Typy přístupových klíčů

Rozsah přístupového klíče a akce, které podporuje, závisí na typu přístupového klíče.

Typ klíče Název klíče Úroveň ověřování HTTP Popis
Funkce default nebo definované uživatelem function Povoluje přístup pouze ke konkrétnímu koncovému bodu funkce.
Hostitel default nebo definované uživatelem function Umožňuje přístup ke všem koncovým bodům funkce v aplikaci funkcí.
Mistr _master admin Speciální klíč hostitele, který také poskytuje přístup správce k rozhraním REST API běhového prostředí v aplikaci funkce. Protože hlavní klíč dává zvýšená oprávnění ve vaší funkční aplikaci, nesdílejte tento klíč s třetími stranami ani jej nedistribuujte v nativních klientských aplikacích.
Systém Závisí na rozšíření. Není k dispozici Konkrétní rozšíření můžou vyžadovat klíč spravovaný systémem pro přístup ke koncovým bodům webhooku. Systémové klíče jsou navrženy pro koncové body funkcí specifických pro rozšíření, jež volají interní komponenty. Například trigger Event Gridu vyžaduje, aby předplatné při volání koncového bodu triggeru používalo systémový klíč. Durable Functions také používá systémové klíče k volání rozhraní API rozšíření Durable Task.
Systémové klíče můžou vytvářet pouze konkrétní rozšíření. Jejich hodnoty nemůžete explicitně nastavit. Stejně jako jiné klíče můžete pro klíč vygenerovat novou hodnotu z portálu nebo pomocí rozhraní API klíčů.

Každý klíč má pro referenci svůj název. Na úrovni aplikace Function App i jednotlivých funkcí je k dispozici výchozí klíč s názvem default. Klíče funkcí mají přednost před klíči hostitele. Když mají dvě klávesy stejný název, vždy se použije funkční klávesa.

Následující tabulka porovnává použití pro různé druhy přístupových klíčů:

Akce Scope Typ klíče
Provedení funkce Konkrétní funkce Funkce
Provedení funkce Libovolná funkce Funkce nebo hostitel
Zavolejte na koncový admin bod Funkční aplikace Mistr
Volání rozhraní API rozšíření Durable Task Funkční aplikace* Systém
Vyvolat webhook pro konkrétní rozšíření (interní) Funkční aplikace* Systém

*Rozsah určený rozšířením

Požadavky na přístupový klíč

Ve službě Functions jsou přístupové klíče náhodně generovaná 32bajtová pole, která jsou kódována jako base-64 řetězce bezpečné pro URL. I když si můžete vytvořit vlastní přístupové klíče a použít je s Funkcemi, použijte místo toho výchozí proces generování přístupových klíčů.

Přístupové klíče generované funkcemi zahrnují speciální hodnoty podpisu a kontrolního součtu, které označují typ přístupového klíče a které ho služba Azure Functions vygenerovala. Tyto dodatečné komponenty v klíči usnadňují určení zdroje těchto typů tajemství během bezpečnostního skenování a dalších automatizovaných procesů.

Aby Funkce generovaly vaše klíče, neposkytujte klíč value žádnému API, které můžete použít k generování klíčů.

Přístupové klíčové úložiště

Vaše funkční aplikace v Azure ukládá klíče a šifruje je v klidu. Výchozí nastavení ukládá AzureWebJobsStorage klíče do Blob úložného kontejneru v daném účtu. Pomocí nastavení AzureWebJobsSecretStorageType můžete změnit toto výchozí chování a ukládat klíče do některého z těchto alternativních umístění:

Důležité

Přístupové klíče jsou součástí tajného úložiště vaší aplikace a mají svůj vlastní životní cyklus, nezávislý na funkcích, které chrání. Smazání funkce nesmaže ani neotáčí klíče uložené v tajném úložišti. Protože umístění klíče je odvozeno z názvu aplikace, znovuvytvoření funkce se stejným názvem znovu používá dříve uložené klíče místo generování nových. Toto chování platí pro všechny poskytovatele tajných úložišť, včetně Blob storage a Key Vault. Smazání a znovuvytvoření funkce není náhradou za rotaci klíče: abyste klíč zrušili, když je přihlašovací údaje odhaleno nebo někomu odebíráte přístup, musíte jej explicitně otočit nebo smazat, jak je popsáno v Obnovit nebo vytvořit přístupové klíče.

Umístění Hodnota Popis
Druhý účet úložiště blob Ukládá klíče do úložiště objektů blob v jiném účtu úložiště, než který používá modul runtime služby Functions. Konkrétní účet a použitý kontejner jsou definovány adresou URL sdíleného přístupového podpisu (SAS) nastavenou AzureWebJobsSecretStorageSas v nastavení. Nastavení je nutné zachovat, když se změní adresa URL SAS, AzureWebJobsSecretStorageSas.
Azure Key Vault keyvault Ukládá klíče do trezoru klíčů nastaveného v AzureWebJobsSecretStorageKeyVaultUri.
Systém souborů files Klíče jsou trvalé v místním systému souborů, což je výchozí hodnota ve službě Functions v1.x. Úložiště systému souborů se nedoporučuje.
Tajné klíče Kubernetes kubernetes Ukládá klíče do sady zdrojů v AzureWebJobsKubernetesSecretName. Podporuje se jenom v případech, kdy je vaše aplikace funkcí nasazená do Kubernetes. Azure Functions Core Tools vygeneruje hodnoty automaticky, když ji použijete k nasazení aplikace do clusteru Kubernetes. Neměnné tajné kódy nejsou podporované.
Tajné kódy služby Azure Container Apps containerapps Klíče jsou uložené v úložišti tajných kódů Azure Container Apps, což je interní systém pro správu tajných kódů pro Container Apps. Podporuje se jenom v případech, kdy je vaše aplikace funkcí nasazená do Azure Container Apps. Pro více informací viz Konfigurovat tajný úložiště Container Apps.

Když používáte Key Vault pro ukládání klíčů, nastavení aplikace, která potřebujete, závisí na tom, jak se aplikace autentizuje k Key Vault: systémově přiřazená spravovaná identita, uživatelem přiřazená spravovaná identita nebo registrace aplikace.

Název položky nastavení Přiřazeno systémem Přiřazeno uživatelem Registrace aplikace
AzureWebJobsSecretStorageKeyVaultUri Yes Yes Yes
AzureWebJobsSecretStorageKeyVaultClientId No Yes Yes
AzureWebJobsSecretStorageKeyVaultClientSecret No No Yes
AzureWebJobsSecretStorageKeyVaultTenantId No No Yes

Důležité

Tajnosti nejsou omezeny na jednotlivé funkční aplikace prostřednictvím nastavení AzureWebJobsSecretStorageKeyVaultUri. Pokud je pro použití stejné služby Key Vault nakonfigurovaných více aplikací funkcí, které sdílejí stejné tajné kódy, může to vést ke kolizím klíčů nebo přepsání. Pokud se chcete vyhnout nezamýšleným chováním, doporučujeme pro každou aplikaci funkcí použít samostatnou instanci služby Key Vault.

Koncové body volání s přístupovými klíči

Funkce spuštěné HTTP můžete volat pomocí URL obsahující název funkce. Když nastavíte úroveň autorizace funkce na jakoukoli hodnotu jinou než anonymous, musíte také ve svém požadavku uvést přístupový klíč. Přístupový klíč můžete zahrnout do URL pomocí dotazovacího řetězce ?code= nebo v hlavičce požadavku (x-functions-key). Další informace najdete v tématu Autorizace přístupového klíče.

Pokud chcete získat přístup k rozhraním REST API modulu runtime (v části /admin/), musíte v _master hlavičce požadavku zadat hlavní klíč (x-functions-key). Administrativní endpointy můžete deaktivovat nastavením functionsRuntimeAdminIsolationEnabled vlastnosti site.

Získejte přístupové klíče funkce

Klíče funkcí a hostitelů můžete získat programově pomocí těchto rozhraní API Azure Resource Manageru:

Informace o volání rozhraní API Azure Resource Manageru najdete v referenčních informacích k rozhraní Azure REST API.

Poznámka:

Když nasadíte svou funkční aplikaci do Azure Container Apps a použijete AzureWebJobsSecretStorageType=ContainerApps, musíte použít metody specifické pro Container Apps k získání funkčních klíčů. Další informace najdete v dokumentaci ke službě Container Apps v části Správa přístupových klíčů.

Použijte tyto metody k získání přístupových klíčů bez použití REST API.

  1. Přihlaste se do portálu Azure a poté vyhledejte a vyberte Function App.

  2. Vyberte aplikaci funkcí, se kterou chcete pracovat.

  3. V nabídce vlevo rozbalte funkce a pak vyberte Klíče aplikace.

    Zobrazí se stránka Klíče aplikace. Na této stránce jsou zobrazeny hostitelské klíče, které můžete použít k přístupu k jakékoli funkci v aplikaci. Zobrazí se také systémový klíč, který každému správci dává přístup ke všem rozhraním API aplikací funkcí.

Minimální oprávnění můžete využít také pomocí klíče pro konkrétní funkci. Klíče specifické pro funkci můžete získat na kartě Funkční klávesy konkrétní funkce aktivované protokolem HTTP.

Návod

Přístupové klíče pro své funkce můžete také získat pomocí příkazu Azure Functions Core Tools func azure functionapp list-functions a možnosti --show-keys. Další informace najdete v referenčních informacích k nástrojům Azure Functions Core Tools.

Obnovení nebo vytvoření přístupových klíčů

Když prodloužíte nebo vytvoříte hodnoty přístupového klíče, musíte aktualizované hodnoty klíče ručně distribuovat všem klientům, kteří volají vaši funkci.

Důležité

Považujte hlavní klíč (_master) za administrativní oprávnění. Poskytuje administrativní, datově orientovaný přístup k vaší aplikaci – včetně, u aplikací s zapisovatelným souborovým systémem, možnosti nasazovat a spouštět kód přes runtime REST API – takže jej sdílejte pouze s důvěryhodnými administrátory, nikoli s běžnými volajícími. Hostitelské klíče nejsou administrativní, ale každý z nich autorizuje volání na jakoukoli funkci v aplikaci, takže je také pečlivě rozdělujte.

Když je přihlašovací karta odhalena nebo potřebujete odebrat přístup straně, explicitně otočte dotčené klíče. Otočení jednotlivého klíče stačí k odebrání tohoto konkrétního klíče. Jak bylo uvedeno v Access key storage, smazání nebo znovuvytvoření funkce neotáčí uložené klíče.

Funkce a klíče hostitele můžete obnovit prostřednictvím kódu programu nebo vytvořit nové pomocí těchto rozhraní API Azure Resource Manageru:

Informace o volání rozhraní API Azure Resource Manageru najdete v referenčních informacích k rozhraní Azure REST API.

Tyto metody můžete použít k získání přístupových klíčů, aniž byste museli ručně vytvářet volání rozhraní REST API.

  1. Přihlaste se do portálu Azure a poté vyhledejte a vyberte Function App.

  2. Vyberte aplikaci funkcí, se kterou chcete pracovat.

  3. V nabídce vlevo rozbalte funkce a pak vyberte Klíče aplikace.

    Zobrazí se stránka Klíče aplikace. Na této stránce jsou zobrazeny hostitelské klíče, které můžete použít k přístupu k jakékoli funkci v aplikaci. Zobrazí se také systémový klíč, který každému správci dává přístup ke všem rozhraním API aplikací funkcí.

  4. Vyberte Obnovit hodnotu klíče vedle klíče, který chcete obnovit, a pak zvolte Obnovit a uložit.

Můžete také obnovit funkční klíč na kartě Funkční klávesy konkrétní funkce aktivované protokolem HTTP.

Odstranění přístupových klíčů

Funkce a klíče hostitele můžete odstranit programově pomocí těchto rozhraní API Azure Resource Manageru:

Informace o volání rozhraní API Azure Resource Manageru najdete v referenčních informacích k rozhraní Azure REST API.