Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługa Azure Functions umożliwia używanie kluczy tajnych, aby utrudnić dostęp do punktów końcowych funkcji. W tym artykule opisano rodzaje kluczy dostępu obsługiwane przez usługę Functions 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 dobrą praktyką dystrybuowanie wspólnych sekretów w publicznej aplikacji. Jeśli funkcja jest wywoływana z klienta publicznego, należy rozważyć zaimplementowanie tych lub innych mechanizmów zabezpieczeń:
- Włączanie uwierzytelniania/autoryzacji usługi App Service
- Uwierzytelnianie żądań przy użyciu usługi Azure API Management (APIM)
- Wdróż swoją aplikację funkcji do sieci wirtualnej
- Wdróż aplikację funkcji w izolacji
Klucze dostępu stanowią podstawę autoryzacji HTTP w funkcjach wyzwalanych przez protokół HTTP. Aby uzyskać więcej informacji, zobacz Poziom autoryzacji.
Zrozum klucze
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. |
| Gospodarz |
default lub zdefiniowany przez użytkownika |
function |
Umożliwia dostęp do wszystkich punktów końcowych funkcji w aplikacji funkcjonalnej. |
| Mistrz | _master |
admin |
Specjalny klucz hosta, który zapewnia również administracyjny dostęp do środowiska uruchomieniowego interfejsów REST API w aplikacji funkcjonalnej. 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. |
| System | Zależy od rozszerzenia | N/a | Określone rozszerzenia mogą wymagać klucza zarządzanego przez system w celu uzyskania dostępu do punktów końcowych webhooka. Klucze systemowe są przeznaczone dla punktów końcowych funkcji specyficznych dla rozszerzeń, które są wywoływane przez komponenty 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. Tylko określone rozszerzenia mogą tworzyć klucze systemowe. Nie można jawnie ustawić ich wartości. Podobnie jak inne klucze, można wygenerować nową wartość klucza za pomocą portalu lub przy użyciu interfejsów API dotyczących kluczy. |
Każdy klucz jest nazwany dla identyfikacji. 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 | Funkcja |
| Wykonywanie funkcji | Dowolna funkcja | Funkcja lub host |
Wywołaj punkt końcowy admin |
Aplikacja funkcji | Tylko główny |
| Wywoływanie interfejsów API rozszerzenia Durable Task | Aplikacja funkcyjna* | System |
| Wywołanie webhooka specyficznego dla rozszerzenia (wewnętrznego) | Aplikacja funkcyjna* | system |
*Zakres określony przez rozszerzenie.
Podstawowe wymagania
W usłudze Functions klucze dostępu są losowo generowanymi 32-bajtowymi tablicami, które są kodowane jako ciągi bezpieczne dla adresu URL w formacie base-64. 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 Azure Functions zawierają specjalne wartości sygnatury i sumy kontrolnej, które wskazują typ klucza dostępu oraz fakt, że został on wygenerowany 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 funkcjonalnej na platformie Azure i są szyfrowane w stanie spoczynku. Domyślnie klucze są przechowywane w kontenerze magazynu obiektów Blob na koncie określonym przez ustawienie AzureWebJobsStorage. 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 różnym od tego, które jest używane przez środowisko uruchomieniowe Functions. Określone konto i używany kontener są definiowane przez adres URL sygnatury dostępu współdzielonego (SAS) ustawiony w ustawieniu AzureWebJobsSecretStorageSas . Gdy zmienia się adres URL sygnatury dostępu współdzielonego, należy zachować ustawienie AzureWebJobsSecretStorageSas. |
| 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. Przechowywanie systemu plików nie jest zalecane. |
| Sekrety systemu Kubernetes | kubernetes |
Zestaw zasobów w usłudze 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. Niezmienne sekrety nie są obsługiwane. |
| Tajemnice Azure Container Apps | ContainerApps |
Klucze są przechowywane w magazynie tajemnic usługi Azure Container Apps. Obsługiwane jest to tylko wtedy, gdy aplikacja funkcji jest wdrażana w Azure Container Apps. |
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 ustawień | Przypisane przez system | Przypisane przez użytkownika | Rejestracja aplikacji |
|---|---|---|---|
| AzureWebJobsSecretStorageKeyVaultUri | ✓ | ✓ | ✓ |
| AzureWebJobsSecretStorageKeyVaultClientId | X | ✓ | ✓ |
| AzureWebJobsSecretStorageKeyVaultClientSecret | X | X | ✓ |
| AzureWebJobsSecretStorageKeyVaultTenantId | X | X | ✓ |
Ważne
Sekrety nie są ograniczone do poszczególnych aplikacji funkcji poprzez ustawienie AzureWebJobsSecretStorageKeyVaultUri. Jeśli wiele aplikacji funkcji jest skonfigurowanych do używania tego samego magazynu kluczy, współużytkują te same sekrety, co potencjalnie prowadzi do konfliktu kluczy lub ich zastępowania. Aby uniknąć niezamierzonego zachowania, zalecamy użycie oddzielnego wystąpienia usługi Key Vault dla każdej aplikacji funkcjonalnej.
Korzystanie z kluczy dostępu
Funkcje wyzwalane przez protokół HTTP mogą być zwykle wywoływane przy użyciu adresu URL zawierającego nazwę funkcji. Gdy poziom autoryzacji danej funkcji jest ustawiony jako wartość inna 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. Można usunąć punkty końcowe administratora przy użyciu właściwości witryny .
Uzyskiwanie kluczy dostępu do funkcji
Klucze funkcji i hosta można uzyskać programowo, korzystając z następujących interfejsów API Azure Resource Manager.
- Lista klawiszy funkcyjnych
- Lista kluczy hosta
- Miejsce na klawisze funkcyjne listy
- Lista slotów kluczy hosta
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.
Zaloguj się do portalu Azure, a następnie wyszukaj i wybierz Function App.
Wybierz aplikację funkcji, z którą chcesz pracować.
W menu 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 umożliwia dostęp na poziomie administratora każdemu użytkownikowi do wszystkich interfejsów API aplikacji funkcjonalnych.
Możesz także stosować zasadę najmniejszych uprawnień, używając klucza do określonej funkcji. Klucze specyficzne dla funkcji można pobrać z karty Klucze funkcji określonej funkcji wyzwalanej przez protokół HTTP.
Wskazówka
Klucze dostępu dla funkcji można również uzyskać, używając polecenia Azure Functions Core Tools func azure functionapp list-functions z opcją --show-keys. Aby uzyskać więcej informacji, zobacz dokumentację narzędzi Azure Functions Core Tools.
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:
- Tworzenie lub aktualizowanie sekretu funkcji
- Tworzenie lub aktualizowanie miejsca wpisu tajnego funkcji
- Tworzenie lub aktualizowanie tajemnicy hosta
- Tworzenie lub aktualizowanie tajnego slotu hosta
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.
Zaloguj się do portalu Azure, a następnie wyszukaj i wybierz Function App.
Wybierz aplikację funkcji, z którą chcesz pracować.
W menu 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 umożliwia dostęp na poziomie administratora każdemu użytkownikowi do wszystkich interfejsów API aplikacji funkcjonalnych.
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.