Praca z kluczami dostępu w usłudze Azure Functions

Usługa Azure Functions umożliwia używanie kluczy tajnych, aby utrudnić dostęp do punktów końcowych funkcji. W tym artykule opisano różne rodzaje kluczy dostępu obsługiwanych przez funkcje oraz sposób pracy z kluczami dostępu.

Klucze dostępu zapewniają pewne środki zaradcze przed niepożądanym dostępem, ale należy rozważyć inne opcje zabezpieczania punktów końcowych HTTP w środowisku produkcyjnym. Na przykład nie jest to dobre rozwiązanie do rozpowszechniania udostępnionych wpisów tajnych w publicznej aplikacji. Jeśli funkcja jest wywoływana z klienta publicznego, należy rozważyć zaimplementowanie tych lub innych mechanizmów zabezpieczeń:

Klucze dostępu stanowią podstawę autoryzacji HTTP w funkcjach wyzwalanych przez protokół HTTP. Aby uzyskać więcej informacji, zobacz Poziom autoryzacji.

Informacje o kluczach

Zakres klucza dostępu i obsługiwane akcje zależą od typu klucza dostępu.

Typ klucza Nazwa klucza Poziom uwierzytelniania HTTP opis
Funkcja default lub zdefiniowany przez użytkownika function Zezwala na dostęp tylko do określonego punktu końcowego funkcji.
Host default lub zdefiniowany przez użytkownika function Umożliwia dostęp do wszystkich punktów końcowych funkcji w aplikacji funkcji.
Główna _master admin Specjalny klucz hosta, który zapewnia również dostęp administracyjny do interfejsów API REST środowiska uruchomieniowego w aplikacji funkcji. Nie można odwołać tego klucza. Ponieważ klucz główny przyznaje podniesione uprawnienia w aplikacji funkcji, nie należy udostępniać tego klucza innym firmom ani rozpowszechniać go w natywnych aplikacjach klienckich.
Zadania systemowe Zależy od rozszerzenia nie dotyczy Określone rozszerzenia mogą wymagać klucza zarządzanego przez system w celu uzyskania dostępu do punktów końcowych elementu webhook. Klucze systemowe są przeznaczone dla punktów końcowych funkcji specyficznych dla rozszerzenia, które są wywoływane przez składniki wewnętrzne. Na przykład wyzwalacz usługi Event Grid wymaga, aby subskrypcja używała klucza systemowego podczas wywoływania punktu końcowego wyzwalacza. Rozszerzenie Durable Functions używa również kluczy systemowych do wywoływania interfejsów API rozszerzenia Durable Task.
Klucze systemowe mogą być tworzone tylko przez określone rozszerzenia i nie można jawnie ustawić ich wartości. Podobnie jak inne klucze, można wygenerować nową wartość klucza z portalu lub przy użyciu interfejsów API kluczy.

Każdy klucz jest nazwany jako odwołanie i istnieje klucz domyślny (o nazwie default) na poziomie funkcji i hosta. Klucze funkcji mają pierwszeństwo przed kluczami hosta. Gdy dwa klucze są zdefiniowane o tej samej nazwie, klucz funkcji jest zawsze używany.

W poniższej tabeli porównaliśmy zastosowania dla różnych rodzajów kluczy dostępu:

Akcja Scope Typ klucza
Wykonywanie funkcji Określona funkcja Function
Wykonywanie funkcji Dowolna funkcja Funkcja lub host
Wywoływanie punktu końcowego admin Aplikacja funkcji Tylko wzorzec
Wywoływanie interfejsów API rozszerzenia Durable Task Aplikacja funkcji* System
Wywoływanie elementu webhook specyficznego dla rozszerzenia (wewnętrznego) Aplikacja funkcji* sterowana

*Zakres określony przez rozszerzenie.

Podstawowe wymagania

W usłudze Functions klucze dostępu są losowo generowane 32-bajtowe tablice, które są kodowane jako ciągi base-64 bezpieczne pod adresem URL. Chociaż możesz wygenerować własne klucze dostępu i używać ich z usługą Functions, zdecydowanie zalecamy, aby zamiast tego zezwolić usłudze Functions na generowanie wszystkich kluczy dostępu.

Klucze dostępu generowane przez funkcje obejmują specjalne wartości sygnatur i sumy kontrolnej wskazujące typ klucza dostępu i wygenerowane przez usługę Azure Functions. Posiadanie tych dodatkowych składników w samym kluczu znacznie ułatwia ustalenie źródła tego rodzaju wpisów tajnych znajdujących się podczas skanowania zabezpieczeń i innych zautomatyzowanych procesów.

Aby zezwolić usłudze Functions na generowanie kluczy, nie należy podawać klucza value do żadnego z interfejsów API, których można użyć do generowania kluczy.

Zarządzanie magazynem kluczy

Klucze są przechowywane jako część aplikacji funkcji na platformie Azure i są szyfrowane w spoczynku. Domyślnie klucze są przechowywane w kontenerze usługi Blob Storage na koncie dostarczonym AzureWebJobsStorage przez to ustawienie. Możesz użyć AzureWebJobsSecretStorageType tego ustawienia, aby zastąpić to domyślne zachowanie i zamiast tego przechowywać klucze w jednej z następujących lokalizacji alternatywnych:

Lokalizacja Wartość Opis
Drugie konto magazynu blob Przechowuje klucze w usłudze Blob Storage na koncie magazynu, które różni się od klucza używanego przez środowisko uruchomieniowe usługi Functions. Określone konto i używany kontener są definiowane przez adres URL sygnatury dostępu współdzielonego (SAS) ustawiony w ustawieniu AzureWebJobsSecretStorageSas . Należy zachować AzureWebJobsSecretStorageSas ustawienie, gdy zmieni się adres URL sygnatury dostępu współdzielonego.
Azure Key Vault keyvault Magazyn kluczy ustawiony w programie AzureWebJobsSecretStorageKeyVaultUri służy do przechowywania kluczy.
System plików files Klucze są utrwalane w lokalnym systemie plików, co jest ustawieniem domyślnym w usłudze Functions w wersji 1.x. Magazyn systemu plików nie jest zalecany.
Wpisy tajne usługi Kubernetes kubernetes Zasób ustawiony w parametrze AzureWebJobsKubernetesSecretName służy do przechowywania kluczy. Obsługiwane tylko wtedy, gdy aplikacja funkcji jest wdrażana na platformie Kubernetes. Narzędzia Azure Functions Core Tools generują wartości automatycznie podczas wdrażania aplikacji w klastrze Kubernetes.

W przypadku korzystania z usługi Key Vault dla magazynu kluczy wymagane ustawienia aplikacji zależą od typu tożsamości zarządzanej, przypisanego przez system lub przypisanego przez użytkownika.

Nazwa ustawienia Przypisane przez system Przypisane przez użytkownika Rejestracja aplikacji
AzureWebJobsSecretStorageKeyVaultUri
AzureWebJobsSecretStorageKeyVaultClientId X
AzureWebJobsSecretStorageKeyVaultClientSecret X X
AzureWebJobsSecretStorageKeyVaultTenantId X X

Korzystanie z kluczy dostępu

Funkcje wyzwalane przez protokół HTTP mogą być zwykle wywoływane przy użyciu adresu URL w formacie: https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>. Gdy poziom autoryzacji danej funkcji jest ustawiony wartość inną niż anonymous, należy również podać klucz dostępu w żądaniu. Klucz dostępu można podać w adresie URL przy użyciu ?code= ciągu zapytania lub nagłówka żądania (x-functions-key). Aby uzyskać więcej informacji, zobacz Autoryzacja klucza dostępu.

Aby uzyskać dostęp do interfejsów API REST środowiska uruchomieniowego (w obszarze /admin/), musisz podać klucz główny (_master) w nagłówku x-functions-key żądania. Punkty końcowe administratora można usunąć przy użyciu właściwości lokacjifunctionsRuntimeAdminIsolationEnabled.

Uzyskiwanie kluczy dostępu do funkcji

Klucze funkcji i hosta można uzyskać programowo przy użyciu następujących interfejsów API usługi Azure Resource Manager:

Aby dowiedzieć się, jak wywoływać interfejsy API usługi Azure Resource Manager, zobacz dokumentację interfejsu API REST platformy Azure.

Za pomocą tych metod można uzyskać klucze dostępu bez konieczności używania interfejsów API REST.

  1. Zaloguj się do witryny Azure Portal, a następnie wyszukaj i wybierz pozycję Aplikacja funkcji.

  2. Wybierz aplikację funkcji, z którą chcesz pracować.

  3. W okienku po lewej stronie rozwiń węzeł Funkcje, a następnie wybierz pozycję Klucze aplikacji.

    Zostanie wyświetlona strona Klucze aplikacji. Na tej stronie są wyświetlane klucze hosta, które mogą służyć do uzyskiwania dostępu do dowolnej funkcji w aplikacji. Zostanie również wyświetlony klucz systemowy, który zapewnia każdemu użytkownikowi dostęp na poziomie administratora do wszystkich interfejsów API aplikacji funkcji.

Możesz również ćwiczyć najmniejsze uprawnienia przy użyciu klucza dla określonej funkcji. Klucze specyficzne dla funkcji można pobrać z karty Klucze funkcji określonej funkcji wyzwalanej przez protokół HTTP.

Odnawianie lub tworzenie kluczy dostępu

Po odnowieniu lub utworzeniu wartości klucza dostępu należy ręcznie ponownie rozsyłać zaktualizowane wartości klucza do wszystkich klientów wywołujących funkcję.

Funkcję i klucze hosta można odnowić programowo lub utworzyć nowe przy użyciu następujących interfejsów API usługi Azure Resource Manager:

Aby dowiedzieć się, jak wywoływać interfejsy API usługi Azure Resource Manager, zobacz dokumentację interfejsu API REST platformy Azure.

Za pomocą tych metod można uzyskać klucze dostępu bez konieczności ręcznego tworzenia wywołań do interfejsów API REST.

  1. Zaloguj się do witryny Azure Portal, a następnie wyszukaj i wybierz pozycję Aplikacja funkcji.

  2. Wybierz aplikację funkcji, z którą chcesz pracować.

  3. W okienku po lewej stronie rozwiń węzeł Funkcje, a następnie wybierz pozycję Klucze aplikacji.

    Zostanie wyświetlona strona Klucze aplikacji. Na tej stronie są wyświetlane klucze hosta, które mogą służyć do uzyskiwania dostępu do dowolnej funkcji w aplikacji. Zostanie również wyświetlony klucz systemowy, który zapewnia każdemu użytkownikowi dostęp na poziomie administratora do wszystkich interfejsów API aplikacji funkcji.

  4. Wybierz pozycję Odnów wartość klucza obok klucza, który chcesz odnowić, a następnie wybierz pozycję Odnów i zapisz.

Możesz również odnowić klucz funkcji na karcie Klucze funkcji określonej funkcji wyzwalanej przez protokół HTTP.

Usuwanie kluczy dostępu

Klucze funkcji i hosta można usunąć programowo przy użyciu następujących interfejsów API usługi Azure Resource Manager:

Aby dowiedzieć się, jak wywoływać interfejsy API usługi Azure Resource Manager, zobacz dokumentację interfejsu API REST platformy Azure.