Verwenden von Zugriffsschlüsseln in Azure Functions
Azure Functions ermöglicht die Verwendung geheimer Schlüssel, um den Zugriff auf Ihre Funktionsendpunkte zu erschweren. In diesem Artikel werden die verschiedenen Arten von Zugriffsschlüsseln beschrieben, die von Azure Functions unterstützt werden, und Sie erfahren, wie Sie sie verwenden.
Zugriffsschlüssel bieten zwar einen gewissen Schutz vor unerwünschtem Zugriff, in der Produktion sollten jedoch andere Optionen zum Schutz von HTTP-Endpunkten in Betracht gezogen werden. So ist es beispielsweise nicht empfehlenswert, gemeinsam genutzte Geheimnisse in einer öffentlichen App zu verteilen. Wenn Ihre Funktion über einen öffentlichen Client aufgerufen wird, empfiehlt es sich gegebenenfalls, die folgenden (oder auch andere) Sicherheitsmechanismen zu implementieren:
- Aktivieren der App Service-Authentifizierung/-Autorisierung
- Verwenden von Azure API Management (APIM) zum Authentifizieren von Anforderungen
- Bereitstellen der Funktions-App in einem virtuellen Netzwerk
- Isoliertes Bereitstellen Ihrer Funktions-App
Zugriffsschlüssel stellen die Grundlage für die HTTP-Autorisierung in Funktionen mit HTTP-Trigger bereit. Weitere Informationen finden Sie unter Autorisierungsebene.
Grundlegendes zu Schlüsseln
Der Geltungsbereich eines Zugriffsschlüssels und die von ihm unterstützten Aktionen hängen von der Art des Zugriffsschlüssels ab.
Typ Key | Schlüsselname | HTTP-Authentifizierungsebene | Beschreibung |
---|---|---|---|
Function | default oder benutzerdefiniert |
function |
Gewährt nur Zugriff auf einen bestimmten Funktionsendpunkt. |
Host | default oder benutzerdefiniert |
function |
Gewährt Zugriff auf alle Funktionsendpunkte in einer Funktions-App. |
Haupt | _master |
admin |
Spezieller Hostschlüssel, der auch Administratorzugriff auf die Runtime-REST-APIs in einer Funktions-App bietet. Dieser Schlüssel kann nicht widerrufen werden. Aufgrund der erhöhten Berechtigungen, die der Hauptschlüssel in Ihrer Funktions-App erteilt, sollten Sie diesen Schlüssel nicht an Dritte weitergeben oder ihn in nativen Clientanwendungen verteilen. |
System | Abhängig von der Erweiterung | Nicht zutreffend | Für bestimmte Erweiterungen kann ein systemseitig verwalteter Schlüssel für den Zugriff auf Webhook-Endpunkte erforderlich sein. Systemschlüssel sind für erweiterungsspezifische Funktionsendpunkte vorgesehen, die von internen Komponenten aufgerufen werden. Beispielsweise erfordert der Event Grid-Auslöser, dass das Abonnement beim Aufruf des Endpunkts des Auslösers einen Systemschlüssel nutzt. Das Feature „Durable Functions“ nutzt auch Systemschlüssel zum Aufrufen von Durable Task-Erweiterungs-APIs. Systemschlüssel können nur von bestimmten Erweiterungen erstellt werden. Ihre Werte können nicht explizit festgelegt werden. Wie bei anderen Schlüsseln können Sie einen neuen Wert für den Schlüssel über das Portal oder mithilfe der Schlüssel-APIs generieren. |
Jeder Schlüssel ist zu Referenzzwecken benannt. Auf Funktions- und Hostebene gibt es einen Standardschlüssel (mit dem Namen default
). Funktionsschlüssel haben Vorrang vor Hostschlüsseln. Wenn zwei Schlüssel mit dem gleichen Namen definiert wurden, wird immer der Funktionsschlüssel verwendet.
In der folgenden Tabelle wird der Zweck der verschiedenen Arten von Zugriffsschlüsseln verglichen:
Aktion | Bereich | Typ Key |
---|---|---|
Funktion ausführen | Spezifische Funktion | Funktion |
Funktion ausführen | Beliebige Funktion | Funktion oder Host |
Aufrufen eines admin -Endpunkts |
Funktionen-App | Nur Hauptschlüssel |
Durable Task-Erweiterungs-APIs aufrufen | Funktions-App* | System |
Erweiterungsspezifischen Webhook (intern) aufrufen | Funktions-App* | system |
* Von der Erweiterung bestimmter Geltungsbereich.
Schlüsselanfoderungen
In Azure Functions sind Zugriffsschlüssel nach dem Zufallsprinzip generierte 32-Byte-Arrays, die als URL-sichere Base64-Zeichenfolgen codiert werden. Sie können zwar eigene Zugriffsschlüssel generieren und mit Azure Functions verwenden, wir empfehlen jedoch dringend, Azure Functions alle Zugriffsschlüssel für Sie generieren zu lassen.
Von Azure Functions generierte Zugriffsschlüssel enthalten spezielle Signatur- und Prüfsummenwerte, die angeben, um welche Art von Zugriffsschlüssel es sich handelt und dass sie von Azure Functions generiert wurden. Durch diese zusätzlichen Komponenten im Schlüssel ist es viel einfacher, die Quelle dieser Arten von Geheimnissen zu bestimmen, die bei der Sicherheitsüberprüfung oder bei anderen automatisierten Prozessen gefunden wurden.
Damit Azure Functions Schlüssel für Sie generieren kann, geben Sie für keine der APIs, die Sie zum Generieren von Schlüsseln verwenden können, den Schlüssel value
an.
Verwalten der Schlüsselspeicherung
Schlüssel werden als Teil Ihrer Funktionen-App in Azure gespeichert und sind im Ruhezustand verschlüsselt. Standardmäßig werden Schlüssel in einem Blob Storage-Container in dem Konto gespeichert, das von der AzureWebJobsStorage
Einstellung bereitgestellt wird. Sie können die Einstellung AzureWebJobsSecretStorageType
verwenden, um dieses Standardverhalten außer Kraft zu setzen und Schlüssel stattdessen an einem der folgenden alternativen Speicherorte zu speichern:
Location | Wert | Beschreibung |
---|---|---|
Zweites Speicherkonto | blob |
Speichert Schlüssel im Blobspeicher in einem Speicherkonto, das sich von dem Speicherkonto unterscheidet, das von der Azure Functions-Runtime verwendet wird. Das spezifische verwendete Konto und der spezifische verwendete Container werden durch eine SAS-URL (Shared Access Signature) definiert, die in der Einstellung AzureWebJobsSecretStorageSas festgelegt wird. Die Einstellung AzureWebJobsSecretStorageSas muss beibehalten werden, wenn sich die SAS-URL ändert. |
Azure Key Vault | keyvault |
Der in AzureWebJobsSecretStorageKeyVaultUri festgelegte Schlüsseltresor wird zum Speichern von Schlüsseln verwendet. |
Dateisystem | files |
Schlüssel werden im Dateisystem persistent gespeichert. Dies ist die Standardeinstellung in Azure Functions v1.x. Die Speicherung im Dateisystem wird nicht empfohlen. |
Kubernetes-Geheimnisse | kubernetes |
Der Ressourcensatz in AzureWebJobsKubernetesSecretName wird zum Speichern von Schlüsseln verwendet. Wird nur unterstützt, wenn Ihre Funktions-App für Kubernetes bereitgestellt wird. Azure Functions Core Tools generiert die Werte automatisch, wenn Sie Ihre App damit in einem Kubernetes-Cluster bereitstellen. |
Wenn Sie Key Vault als Schlüsselspeicher verwenden, hängen die von Ihnen benötigten App-Einstellungen von der Art der verwalteten Identität ab (systemseitig zugewiesen oder benutzerseitig zugewiesen).
Einstellungsname | Systemseitig zugewiesen | Benutzerseitig zugewiesen | App-Registrierung |
---|---|---|---|
AzureWebJobsSecretStorageKeyVaultUri | ✓ | ✓ | ✓ |
AzureWebJobsSecretStorageKeyVaultClientId | X | ✓ | ✓ |
AzureWebJobsSecretStorageKeyVaultClientSecret | X | X | ✓ |
AzureWebJobsSecretStorageKeyVaultTenantId | X | X | ✓ |
Verwenden von Zugriffsschlüsseln
Durch HTTP ausgelöste Funktionen können im Allgemeinen mithilfe einer URL im folgenden Format aufgerufen werden: https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>
. Wenn die Autorisierungsstufe einer Funktion auf einen anderen Wert als anonymous
festgelegt ist, müssen Sie in Ihrer Anforderung auch einen Zugriffsschlüssel bereitstellen. Der Zugriffsschlüssel kann entweder in der URL (unter Verwendung der ?code=
-Abfragezeichenfolge) oder im Anforderungsheader (x-functions-key
) bereitgestellt werden. Weitere Informationen zur Zugriffsschlüsselautorisierung finden Sie hier.
Um auf die Runtime-REST-APIs (unter /admin/
) zuzugreifen, müssen Sie den Hauptschlüssel (_master
) im Anforderungsheader x-functions-key
bereitstellen. Sie können die Administratorendpunkte mithilfe der functionsRuntimeAdminIsolationEnabled
Websiteeigenschaft entfernen.
Abrufen Ihrer Funktionszugriffsschlüssel
Funktions- und Hostschlüssel können programmgesteuert über die folgenden Azure Resource Manager-APIs abgerufen werden:
- Funktionsschlüssel auflisten
- Hostschlüssel auflisten
- Funktionsschlüssel für Slots auflisten
- Hostschlüssel für Slots auflisten
Informationen zum Aufrufen von Azure Resource Manager-APIs finden Sie in der Azure REST-API-Referenz.
Sie können diese Methoden verwenden, um Zugriffsschlüssel abzurufen, ohne die REST-APIs verwenden zu müssen.
Melden Sie sich beim Azure-Portal an, suchen Sie nach Funktions-App, und wählen Sie diese Option aus.
Wählen Sie die gewünschte Funktions-App aus.
Erweitern Sie im linken Bereich die Option Funktionen, und wählen Sie dann App-Schlüssel aus.
Die Seite App-Schlüssel wird angezeigt. Auf dieser Seite werden die Hostschlüssel angezeigt. Diese können für den Zugriff auf eine beliebige Funktion in der App verwendet werden. Außerdem wird der Systemschlüssel angezeigt. Dieser gibt einem beliebigen Benutzer Zugriff auf Administratorebene auf alle Funktions-App-APIs.
Sie können auch das Prinzip der geringsten Rechte anwenden, indem Sie den Schlüssel für eine spezifische Funktion verwenden. Funktionsspezifische Schlüssel können über die Registerkarte Funktionsschlüssel einer bestimmten Funktion mit HTTP-Trigger abgerufen werden.
Erneuern oder Erstellen von Zugriffsschlüsseln
Wenn Sie Ihre Funktionsschlüsselwerte erneuern oder erstellen, müssen die aktualisierten Schlüsselwerte manuell an alle Clients verteilt werden, von denen Ihre Funktion aufgerufen wird.
Funktions- und Hostschlüssel können programmgesteuert über die folgenden Azure Resource Manager-APIs erneuert oder neu erstellt werden:
- Funktionsgeheimnis erstellen oder aktualisieren
- Funktionsgeheimnis für Slots erstellen oder aktualisieren
- Hostgeheimnis erstellen oder aktualisieren
- Hostgeheimnis für Slot erstellen oder aktualisieren
Informationen zum Aufrufen von Azure Resource Manager-APIs finden Sie in der Azure REST-API-Referenz.
Sie können diese Methoden verwenden, um Zugriffsschlüssel abzurufen, ohne manuell Aufrufe für die REST-APIs erstellen zu müssen.
Melden Sie sich beim Azure-Portal an, suchen Sie nach Funktions-App, und wählen Sie diese Option aus.
Wählen Sie die gewünschte Funktions-App aus.
Erweitern Sie im linken Bereich die Option Funktionen, und wählen Sie dann App-Schlüssel aus.
Die Seite App-Schlüssel wird angezeigt. Auf dieser Seite werden die Hostschlüssel angezeigt. Diese können für den Zugriff auf eine beliebige Funktion in der App verwendet werden. Außerdem wird der Systemschlüssel angezeigt. Dieser gibt einem beliebigen Benutzer Zugriff auf Administratorebene auf alle Funktions-App-APIs.
Wählen Sie neben dem Schlüssel, den Sie erneuern möchten, die Option Schlüsselwert erneuern und anschließend Erneuern und speichern aus.
Funktionsschlüssel können auch auf der Registerkarte Funktionsschlüssel einer bestimmten Funktion mit HTTP-Trigger erneuert werden.
Löschen von Zugriffsschlüsseln
Funktions- und Hostschlüssel können programmgesteuert über die folgenden Azure Resource Manager-APIs gelöscht werden:
- Funktionsgeheimnis löschen
- Funktionsgeheimnis für Slots löschen
- Hostgeheimnis löschen
- Hostgeheimnis für Slots löschen
Informationen zum Aufrufen von Azure Resource Manager-APIs finden Sie in der Azure REST-API-Referenz.