Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure Functions ermöglicht die Verwendung geheimer Schlüssel, um den Zugriff auf Ihre Funktionsendpunkte zu erschweren. In diesem Artikel werden die Arten von Zugriffsschlüsseln beschrieben, die Funktionen unterstützen, und wie Sie mit Zugriffsschlüsseln arbeiten.
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.
| Schlüsseltyp | Schlüsselname | HTTP-Authentifizierungsebene | BESCHREIBUNG |
|---|---|---|---|
| Funktion |
default oder benutzerdefiniert |
function |
Gewährt nur Zugriff auf einen bestimmten Funktionsendpunkt. |
| Gastgeber |
default oder benutzerdefiniert |
function |
Gewährt Zugriff auf alle Funktionsendpunkte in einer Funktions-App. |
| Master | _master |
admin |
Spezieller Hostschlüssel, der auch Administratorzugriff auf die Runtime-REST-APIs in einer Funktions-App bietet. 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 | – | 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. Nur bestimmte Erweiterungen können Systemschlüssel erstellen. Sie können deren Werte nicht explizit festlegen. 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 wird zu Referenzzwecken benannt. Es gibt einen Standardschlüssel (benannt default) auf der Funktion und Hostebene. 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 | `Scope` | Schlüsseltyp |
|---|---|---|
| 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.
Durch Funktionen generierte Zugriffstasten umfassen spezielle Signatur- und Prüfsummenwerte, die den Typ des Zugriffsschlüssels angeben und 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:
| Standort | Wert | BESCHREIBUNG |
|---|---|---|
| Zweites Speicherkonto | blob |
Speichert Schlüssel im Blob-Speicher in einem anderen Speicherkonto als dem, das von der Funktionenlaufzeit verwendet wird. Das verwendete Konto und der verwendete Container werden durch eine SAS-URL (Shared Access Signature) definiert, die in der AzureWebJobsSecretStorageSas Einstellung festgelegt ist. 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. Unveränderliche Geheimschlüssel werden nicht unterstützt. |
| Geheime Azure-Container-Apps | ContainerApps |
Schlüssel werden im geheimen Azure-Container-Apps-Speicher gespeichert. Wird nur unterstützt, wenn Ihre Funktions-App in Azure-Container-Apps bereitgestellt wird. |
Wenn Sie Key Vault für die Schlüsselspeicherung verwenden, sind die benötigten App-Einstellungen vom verwalteten Identitätstyp abhängig, entweder vom System zugewiesen oder vom Benutzer zugewiesen.
| Einstellungsname | Systemseitig zugewiesen | Benutzerseitig zugewiesen | App-Registrierung |
|---|---|---|---|
| AzureWebJobsSecretStorageKeyVaultUri | ✓ | ✓ | ✓ |
| AzureWebJobsSecretStorageKeyVaultClientId | X | ✓ | ✓ |
| AzureWebJobsSecretStorageKeyVaultClientSecret | X | X | ✓ |
| AzureWebJobsSecretStorageKeyVaultTenantId | X | X | ✓ |
Von Bedeutung
Geheimnisse werden nicht über die AzureWebJobsSecretStorageKeyVaultUri-Einstellung für einzelne Funktions-Apps festgelegt. Wenn mehrere Funktions-Apps so konfiguriert sind, dass sie denselben Schlüsseltresor verwenden, verwenden sie die gleichen Geheimnisse, was möglicherweise zu Schlüsselkonflikten oder Überschreibungen führt. Um unbeabsichtigtes Verhalten zu vermeiden, empfiehlt es sich, für jede Funktions-App eine separate Key Vault-Instanz zu verwenden.
Verwenden von Zugriffsschlüsseln
HTTP-ausgelöste Funktionen können in der Regel mithilfe einer URL aufgerufen werden, die den Funktionsnamen enthält. Wenn die Autorisierungsebene einer bestimmten Funktion als ein anderer Wert als anonymous festgelegt wird, müssen Sie auch einen Zugriffsschlüssel in Ihrer Anforderung 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üsselplatz 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 Menü "Funktionen", und wählen Sie dann "App-Tasten" 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.
Tipp
Sie können auch Zugriffsschlüssel für Ihre Funktionen abrufen, indem Sie den Befehl func azure functionapp list-functions mit der Option --show-keys in den Azure Functions Core Tools verwenden. Weitere Informationen finden Sie in der Referenz zu Azure Functions Core Tools.
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 Menü "Funktionen", und wählen Sie dann "App-Tasten" 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.