Verwenden verwalteter Identitäten für App Service und Azure Functions

In diesem Artikel erfahren Sie, wie eine verwaltete Identität für App Service- und Azure Functions-Anwendungen erstellt und für den Zugriff auf andere Ressourcen verwendet wird.

Wichtig

Da verwaltete Identitäten keine verzeichnisübergreifenden Szenarien unterstützen, verhalten sie sich nicht wie erwartet, wenn Ihre App abonnement- oder mandantenübergreifend migriert wird. Wenn Sie die verwalteten Identitäten nach einer solchen Verschiebung neu erstellen möchten, lesen Sie den Artikel Werden verwaltete Identitäten automatisch neu erstellt, wenn ich ein Abonnement in ein anderes Verzeichnis verschiebe?. Für nachgeschaltete Ressourcen müssen außerdem die Zugriffsrichtlinien für die Verwendung der neuen Identität aktualisiert werden.

Hinweis

Verwaltete Identitäten sind für Apps, die in Azure Arc bereitgestellt sind, nicht verfügbar.

Eine verwaltete Identität von Microsoft Entra ID ermöglicht es Ihrer App, einfach auf andere durch Microsoft Entra geschützte Ressourcen wie Azure Key Vault zuzugreifen. Da die Identität von der Azure-Plattform verwaltet wird, müssen Sie keine Geheimnisse bereitstellen oder rotieren. Weitere Informationen zu verwalteten Identitäten in Microsoft Entra ID finden Sie unter Verwaltete Identitäten für Azure-Ressourcen.

Ihrer Anwendung können zwei Arten von Identitäten zugewiesen werden:

  • Eine systemseitig zugewiesene Identität ist an Ihre Anwendung gebunden und wird gelöscht, wenn Ihre App gelöscht wird. Eine App kann nur über eine systemseitig zugewiesene Identität verfügen.
  • Eine benutzerseitig zugewiesene Identität ist eine eigenständige Azure-Ressource, die Ihrer App zugewiesen werden kann. Eine App kann über mehrere benutzerseitig zugewiesene Identitäten verfügen.

Die Konfiguration der verwalteten Identität ist spezifisch für den Slot. Um eine verwaltete Identität für einen Bereitstellungsslot im Portal zu konfigurieren, navigieren Sie zuerst zum Slot. Um die verwaltete Identität für Ihre Web-App oder den Bereitstellungsslot in Ihrem Microsoft Entra-Mandanten über das Azure-Portal zu finden, suchen Sie direkt auf der Seite Übersicht Ihres Mandanten nach dieser Identität. In der Regel lautet der Slotname ähnlich wie <app-name>/slots/<slot-name>.

In diesem Video wird die Verwendung von verwalteten Identitäten für App Service gezeigt.

Die Schritte im Video werden auch in den folgenden Abschnitten beschrieben.

Hinzufügen einer systemseitig zugewiesenen Identität

  1. Scrollen Sie im linken Navigationsbereich der Seite Ihrer App nach unten zur Gruppe Einstellungen.

  2. Wählen Sie Identität aus.

  3. Ändern Sie auf der Registerkarte Systemseitig zugewiesen den Status in Ein. Klicken Sie auf Speichern.

    Screenshot, der zeigt, wo Sie den Status in „Ein“ ändern und „Speichern“ auswählen

Hinzufügen einer benutzerseitig zugewiesenen Identität

Für das Erstellen einer App mit einer benutzerseitig zugewiesenen Identität müssen Sie die Identität erstellen und dann den Ressourcenbezeichner der Identität zu Ihrer App-Konfiguration hinzufügen.

Zunächst müssen Sie eine Ressource für eine benutzerseitig zugewiesene Identität erstellen.

  1. Folgen Sie zum Erstellen einer benutzerseitig verwalteten Identitätsressource diesen Anweisungen.

  2. Scrollen Sie im linken Navigationsbereich der Seite Ihrer App nach unten zur Gruppe Einstellungen.

  3. Wählen Sie Identität aus.

  4. Wählen Sie Benutzerseitig zugewiesen>Hinzufügen aus.

  5. Suchen Sie nach der zuvor erstellten Identität, und wählen Sie Hinzufügen aus.

    Verwaltete Identität in App Service

    Nachdem Sie Hinzufügen ausgewählt haben, wird die App neu gestartet.

Zielressource konfigurieren

Sie müssen die Zielressource möglicherweise für den Zugriff über die App oder Funktion konfigurieren. Wenn Sie beispielsweise ein Token für den Zugriff auf Key Vault anfordern, müssen Sie auch eine Zugriffsrichtlinie hinzufügen, die die verwaltete Identität Ihrer App oder Funktion enthält. Andernfalls werden Ihre Aufrufe von Key Vault abgelehnt, auch wenn Sie ein gültiges Token verwenden. Dasselbe gilt für Azure SQL-Datenbank. Informationen zu den Ressourcen, die Microsoft Entra-Tokens unterstützen, finden Sie unter Azure-Dienste, die die Microsoft Entra-Authentifizierung unterstützen.

Wichtig

Die Back-End-Dienste für verwaltete Identitäten behalten pro Ressourcen-URI für ca. 24 Stunden einen Cache bei. Wenn Sie die Zugriffsrichtlinie einer bestimmten Zielressource aktualisieren und sofort ein Token für diese Ressource abrufen, erhalten Sie möglicherweise weiterhin ein zwischengespeichertes Token mit veralteten Berechtigungen, bis dieses Token abläuft. Zurzeit gibt es keine Möglichkeit, eine Tokenaktualisierung zu erzwingen.

Verbinden mit Azure-Diensten im App-Code

Mit der verwalteten Identität kann eine App Tokens für Azure-Ressourcen abrufen, die durch Microsoft Entra ID geschützt sind, z. B. Azure SQL-Datenbank, Azure Key Vault und Azure Storage. Diese Tokens stellen die Anwendung dar, die auf die Ressource zugreift, nicht einen bestimmten Benutzer der Anwendung.

App Service und Azure Functions einen intern zugänglichen REST-Endpunkt für den Tokenabruf bereitstellen. Auf den REST-Endpunkt kann innerhalb der App mit einem HTTP GET-Standard zugegriffen werden, der mit einem generischen HTTP-Client in jeder Sprache implementiert werden kann. Für .NET, JavaScript, Java und Python bietet die Azure Identity-Clientbibliothek eine Abstraktion über diesen REST-Endpunkt und vereinfacht die Entwicklungserfahrung. Das Herstellen einer Verbindung mit anderen Azure-Diensten ist so einfach wie das Hinzufügen eines Anmeldeinformationsobjekts zum dienstspezifischen Client.

Eine unformatierte HTTP GET-Anforderung sieht wie im folgenden Beispiel aus:

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: localhost:4141
X-IDENTITY-HEADER: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a

Eine Beispielantwort könnte folgendermaßen aussehen:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "5E29463D-71DA-4FE0-8E69-999B57DB23B0"
}

Diese Antwort ist mit der Antwort auf die Zugriffstokenanforderung zwischen zwei Diensten in Microsoft Entra identisch. Um auf Key Vault zugreifen zu können, fügen Sie den Wert access_token einer Clientverbindung mit dem Tresor hinzu.

Weitere Informationen zum REST-Endpunkt finden Sie in der REST-Endpunktreferenz.

Entfernen einer Identität

Wenn Sie eine vom System zugewiesene Identität entfernen, wird sie aus Microsoft Entra ID gelöscht. Systemseitig zugewiesene Identitäten werden auch automatisch aus Microsoft Entra ID entfernt, wenn Sie die App-Ressource selbst löschen.

  1. Scrollen Sie im linken Navigationsbereich der Seite Ihrer App nach unten zur Gruppe Einstellungen.

  2. Wählen Sie Identität aus. Führen Sie dann die Schritte basierend auf dem Identitätstyp aus:

    • Vom System zugewiesene Identität: Ändern Sie auf der Registerkarte Vom System zugewiesen den Status zu Aus. Klicken Sie auf Speichern.
    • Vom Benutzer zugewiesene Identität: Klicken Sie auf die Registerkarte Vom Benutzer zugewiesen, aktivieren Sie das Kontrollkästchen für die Identität, und klicken Sie auf Entfernen. Klicken Sie auf Ja, um zu bestätigen.

Hinweis

Es gibt auch eine Anwendungseinstellung, die festgelegt werden kann (WEBSITE_DISABLE_MSI). Hierdurch wird nur der lokale Tokendienst deaktiviert. Die Identität bleibt jedoch erhalten, und Tools zeigen die verwaltete Identität weiterhin als "ein" oder "aktiviert" an. Daher wird die Verwendung dieser Einstellung nicht empfohlen.

REST-Endpunktverweis

Eine App mit einer verwalteten Identität macht diesen Endpunkt verfügbar, indem zwei Umgebungsvariablen definiert werden:

  • IDENTITY_ENDPOINT: die URL zum lokalen Tokendienst
  • IDENTITY_HEADER: ein Header, der als Maßnahme gegen SSRF-Angriffe (Server-Side Request Forgery) verwendet wird. Der Wert wird von der Plattform rotiert.

Bei IDENTITY_ENDPOINT handelt es sich um eine lokale URL, über die Ihre App Token anfordern kann. Um ein Token für eine Ressource abzurufen, senden Sie eine HTTP-GET-Anforderung mit folgenden Parametern an diesen Endpunkt:

Parametername Geben Sie in BESCHREIBUNG
resource Abfrage Der Ressourcen-URI von Microsoft Entra für die Ressource, für die ein Token abgerufen werden soll. Dies kann einer der Azure-Dienste, die die Microsoft Entra-Authentifizierung unterstützen, oder ein anderer Ressourcen-URI sein.
api-version Abfrage Die Version der zu verwendenden Token-API. Verwenden Sie 2019-08-01.
X-IDENTITY-HEADER Header Der Wert der Umgebungsvariable IDENTITY_HEADER. Dieser Header wird als Maßnahme gegen SSRF-Angriffe (Server-Side Request Forgery) verwendet.
client_id Abfrage (Optional:) Die Client-ID der benutzerseitig zugewiesenen Identität, die verwendet werden soll. Kann nicht für eine Anforderung verwendet werden, die principal_id, mi_res_id oder object_id einschließt. Wenn keiner der ID-Parameter (client_id, principal_id, object_id, mi_res_id) angegeben ist, wird die systemseitig zugewiesene Identität verwendet.
principal_id Abfrage (Optional:) Die Prinzipal-ID der benutzerseitig zugewiesenen Identität, die verwendet werden soll. object_id ist ein Alias, der stattdessen verwendet werden kann. Kann nicht für eine Anforderung verwendet werden, die client_id, mi_res_id oder object_id einschließt. Wenn keiner der ID-Parameter (client_id, principal_id, object_id, mi_res_id) angegeben ist, wird die systemseitig zugewiesene Identität verwendet.
mi_res_id Abfrage (Optional:) Die Azure-Ressourcen-ID der benutzerseitig zugewiesenen Identität, die verwendet werden soll. Kann nicht für eine Anforderung verwendet werden, die principal_id, client_id oder object_id einschließt. Wenn keiner der ID-Parameter (client_id, principal_id, object_id, mi_res_id) angegeben ist, wird die systemseitig zugewiesene Identität verwendet.

Wichtig

Wenn Sie Token für benutzerseitig zugewiesene Identitäten abrufen möchten, müssen Sie eine der optionalen Eigenschaften einschließen. Andernfalls versucht der Tokendienst, ein Token für eine vom System zugewiesene Identität abzurufen, die möglicherweise nicht vorhanden ist.

Nächste Schritte