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
Verwaltete Identitäten für App Service und Azure Functions verhalten sich nicht wie erwartet, wenn Ihre App abonnement- bzw. mandantenübergreifend migriert wird. Die App muss eine neue Identität abrufen. Zu diesem Zweck deaktivieren Sie die Funktion und aktivieren Sie anschließend erneut. 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.
Über eine verwaltete Identität aus Azure Active Directory (Azure AD) kann Ihre App einfach auf andere durch Azure AD geschützte Ressourcen wie Azure Key Vault zugreifen. 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 Azure AD 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.
Hinzufügen einer systemseitig zugewiesenen Identität
Scrollen Sie im linken Navigationsbereich der Seite Ihrer App nach unten zur Gruppe Einstellungen.
Wählen Sie Identität aus.
Ändern Sie auf der Registerkarte Systemseitig zugewiesen den Status in Ein. Klicken Sie auf Speichern.
Hinweis
Um die verwaltete Identität für Ihre Web-App oder Slot-App im Azure-Portal zu finden, sehen Sie unter Unternehmensanwendungen im Abschnitt Benutzereinstellungen nach. In der Regel lautet der Slotname ähnlich wie <app name>/slots/<slot name>
.
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.
Folgen Sie zum Erstellen einer benutzerseitig verwalteten Identitätsressource diesen Anweisungen.
Scrollen Sie im linken Navigationsbereich der Seite Ihrer App nach unten zur Gruppe Einstellungen.
Wählen Sie Identität aus.
Klicken Sie auf der Registerkarte Benutzerseitig zugewiesen auf Hinzufügen.
Suchen Sie nach der zuvor erstellten Identität, und wählen Sie sie aus. Klicken Sie auf Hinzufügen.
Wichtig
Wenn Sie Hinzufügen auswählen, nachdem Sie eine benutzerseitig zugewiesene Identität zum Hinzufügen ausgewählt haben, wird Ihre Anwendung 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 Azure Active Directory-Token unterstützen, finden Sie unter Azure-Dienste, die die Azure AD-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 Token für Azure-Ressourcen abrufen, die durch Azure Active Directory 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 Azure AD-Diensten 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 der Azure Active Directory gelöscht. Vom System zugewiesene Identitäten werden auch automatisch aus dem Azure Active Directory gelöscht, wenn Sie die App-Ressource selbst löschen.
Scrollen Sie im linken Navigationsbereich der Seite Ihrer App nach unten zur Gruppe Einstellungen.
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 zum Bestätigen auf Ja.
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 Azure AD-Ressourcen-URI der Ressource, für die ein Token abgerufen werden soll. Dies kann einer der Azure-Dienste, die die Azure AD-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
oderobject_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
oderobject_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
- Tutorial: Verbindungsherstellung mit SQL-Datenbank über App Service ohne Geheimnisse mithilfe einer verwalteten Identität
- Tutorial: Zugreifen auf Azure-Speicher über eine Web-App
- Tutorial: Zugreifen auf Microsoft Graph über eine geschützte App als App
- Sichere Verbindung zu Diensten mit Schlüsseltresor-Geheimnissen