Mit einer verwalteten Microsoft Entra ID-Identität kann Ihre Container-App auf andere von Microsoft Entra geschützte Ressourcen zugreifen. Weitere Informationen zu verwalteten Identitäten in Microsoft Entra ID finden Sie unter Verwaltete Identitäten für Azure-Ressourcen.
Ihrer Container-App können zwei Arten von Identitäten zugewiesen werden:
Eine systemseitig zugewiesene Identität ist an Ihre Container-App 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 Sie Ihrer Container-App und anderen Ressourcen zuweisen können. Eine Container-App kann über mehrere benutzerseitig zugewiesene Identitäten verfügen. Benutzerseitig zugewiesene Identitäten sind vorhanden, bis Sie sie löschen.
Gründe für die Verwendung einer verwalteten Identität
Ihre App stellt mit der verwalteten Identität eine Verbindung mit Ressourcen her. Sie müssen keine Anmeldeinformationen in Ihrer Container-App verwalten.
Sie können die rollenbasierte Zugriffssteuerung verwenden, um einer verwalteten Identität bestimmte Berechtigungen zuzuweisen.
Systemseitig zugewiesene Identitäten werden automatisch erstellt und verwaltet. Sie werden gelöscht, wenn Ihre Container-App gelöscht wird.
Sie können benutzerseitig zugewiesene Identitäten hinzufügen und löschen und mehreren Ressourcen zuweisen. Sie sind unabhängig vom Lebenszyklus Ihrer Container-App.
Systemseitig zugewiesene Identitäten eignen sich am besten für Workloads, die:
in einer einzelnen Ressource enthalten sind
unabhängige Identitäten benötigen
Benutzerseitig zugewiesene Identitäten sind ideal für Workloads, die:
auf mehreren Ressourcen ausgeführt werden und eine einzelne Identität gemeinsam nutzen können
vorab für eine sichere Ressource autorisiert werden müssen
Begrenzungen
Verwaltete Identitäten in Skalierungsregeln werden nicht unterstützt. Sie müssen Verbindungszeichenfolgen oder Schlüssel in die secretRef der Skalierungsregel einschließen.
Init-Container können nicht auf verwaltete Identitäten zugreifen.
Konfigurieren von verwalteten Identitäten
Sie können Ihre verwalteten Identitäten über Folgendes konfigurieren:
dem Azure-Portal
Azure CLI
Ihre ARM-Vorlage (Azure Resource Manager)
Wenn eine verwaltete Identität in einer ausgeführten Container-App hinzugefügt, gelöscht oder geändert wird, wird die App nicht automatisch neu gestartet, und es wird keine neue Revision erstellt.
Hinweis
Beim Hinzufügen einer verwalteten Identität zu einer Container-App, die vor dem 11. April 2022 bereitgestellt wurde, müssen Sie eine neue Revision erstellen.
Hinzufügen einer systemseitig zugewiesenen Identität
Navigieren Sie im Azure-Portal zu Ihrer Container App.
Wählen Sie in der Gruppe Einstellungen die Option Identität aus.
Ändern Sie auf der Registerkarte Systemseitig zugewiesen den Status in Ein.
Wählen Sie Speichern.
Führen Sie den Befehl az containerapp identity assign aus, um eine vom System zugewiesene Identität zu erstellen:
az containerapp identity assign --name myApp --resource-group myResourceGroup --system-assigned
Eine ARM-Vorlage kann verwendet werden, um die Bereitstellung Ihrer Container-App und Ressourcen zu automatisieren. Um eine systemseitig zugewiesene Identität hinzuzufügen, fügen Sie Ihrer ARM-Vorlage einen identity-Abschnitt hinzu.
"identity": {
"type": "SystemAssigned"
}
Durch das Hinzufügen des systemseitig zugewiesenen Typs wird Azure angewiesen, die Identität für Ihre Anwendung zu erstellen und zu verwalten. Ein vollständiges ARM-Vorlagenbeispiel finden Sie unter ARM-API-Spezifikation.
Einige Azure CLI-Befehle (einschließlich az containerapp create und az containerapp job create) unterstützen YAML-Dateien für die Eingabe. Um eine systemseitig zugewiesene Identität hinzuzufügen, fügen Sie Ihrer YAML-Datei einen identity-Abschnitt hinzu.
identity:
type: SystemAssigned
Durch das Hinzufügen des systemseitig zugewiesenen Typs wird Azure angewiesen, die Identität für Ihre Anwendung zu erstellen und zu verwalten. Ein vollständiges YAML-Vorlagenbeispiel finden Sie unter ARM-API-Spezifikation.
Eine Bicep-Vorlage kann verwendet werden, um die Bereitstellung Ihrer Container-App und Ressourcen zu automatisieren. Um eine systemseitig zugewiesene Identität hinzuzufügen, fügen Sie Ihrer Bicep-Vorlage einen identity-Abschnitt hinzu.
Hinzufügen einer benutzerseitig zugewiesenen Identität
Beim Konfigurieren einer Container-App mit einer benutzerseitig zugewiesenen Identität müssen Sie zuerst die Identität erstellen und dann deren Ressourcenbezeichner zur Konfiguration ihrer Container-App hinzufügen. Sie können benutzerseitig zugewiesene Identitäten über das Azure-Portal oder die Azure-Befehlszeilenschnittstelle erstellen. Informationen zum Erstellen und Verwalten einer benutzerseitig zugewiesenen verwalteten Identität finden Sie unter Benutzerseitig zugewiesene verwaltete Identitäten verwalten.
Navigieren Sie im Azure-Portal zu Ihrer Container App.
Wählen Sie in der Gruppe Einstellungen die Option Identität aus.
Wählen Sie auf der Registerkarte Benutzerseitig zugewiesen die Option Hinzufügen aus.
Suchen Sie nach der zuvor erstellten Identität, und wählen Sie sie aus.
Wählen Sie Hinzufügen.
Erstellen Sie eine benutzerseitig zugewiesene Identität.
az identity create --resource-group <GROUP_NAME> --name <IDENTITY_NAME> --output json
Beachten Sie die id-Eigenschaft der neuen Identität.
Führen Sie den Befehl az containerapp identity assign aus, um die Identität der App zuzuweisen. Der Identitätenparameter ist eine durch Leerzeichen getrennte Liste.
Ersetzen Sie <IDENTITY_RESOURCE_ID> mit der id-Eigenschaft der Identität. Um mehr als eine benutzerseitig zugewiesene Identität zuzuweisen, geben Sie dem --user-assigned-Parameter eine durch Leerzeichen getrennte Liste von Identitäts-IDs an.
Um eine oder mehrere benutzerseitig zugewiesene Identitäten hinzuzufügen, fügen Sie Ihrer ARM-Vorlage einen identity-Abschnitt hinzu. Ersetzen Sie <IDENTITY1_RESOURCE_ID> und <IDENTITY2_RESOURCE_ID> mit den Ressourcenbezeichnern der Identitäten, die Sie hinzufügen möchten.
Geben Sie jede benutzerseitig zugewiesene Identität an, indem Sie dem userAssignedIdentities-Objekt ein Element mit dem Ressourcenbezeichner der Identität als Schlüssel hinzufügen. Verwenden Sie ein leeres Objekt als Wert.
Eine Anwendung kann gleichzeitig sowohl über systemseitig als auch über benutzerseitig zugewiesene Identitäten verfügen. In diesem Fall wäre SystemAssigned,UserAssigned der Wert für die type-Eigenschaft.
Um eine oder mehrere benutzerseitig zugewiesene Identitäten hinzuzufügen, fügen Sie Ihrer YAML-Konfigurationsdatei einen identity-Abschnitt hinzu. Ersetzen Sie <IDENTITY1_RESOURCE_ID> und <IDENTITY2_RESOURCE_ID> mit den Ressourcenbezeichnern der Identitäten, die Sie hinzufügen möchten.
Geben Sie jede benutzerseitig zugewiesene Identität an, indem Sie dem userAssignedIdentities-Objekt ein Element mit dem Ressourcenbezeichner der Identität als Schlüssel hinzufügen. Verwenden Sie ein leeres Objekt als Wert.
Eine Anwendung kann gleichzeitig sowohl über systemseitig als auch über benutzerseitig zugewiesene Identitäten verfügen. In diesem Fall hat die type-Eigenschaft den Wert SystemAssigned,UserAssigned.
Um eine oder mehrere benutzerseitig zugewiesene Identitäten hinzuzufügen, fügen Sie Ihrer Bicep-Vorlage einen identity-Abschnitt hinzu. Ersetzen Sie <IDENTITY1_RESOURCE_ID> und <IDENTITY2_RESOURCE_ID> mit den Ressourcenbezeichnern der Identitäten, die Sie hinzufügen möchten.
Geben Sie jede benutzerseitig zugewiesene Identität an, indem Sie dem userAssignedIdentities-Objekt ein Element mit dem Ressourcenbezeichner der Identität als Schlüssel hinzufügen. Verwenden Sie ein leeres Objekt als Wert.
Eine Anwendung kann gleichzeitig sowohl über systemseitig als auch über benutzerseitig zugewiesene Identitäten verfügen. In diesem Fall hat die type-Eigenschaft den Wert SystemAssigned,UserAssigned.
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. Das Erzwingen einer Tokenaktualisierung wird nicht unterstützt.
Verbinden mit Azure-Diensten im App-Code
Mit verwalteten Identitäten kann eine App Tokens für den Zugriff auf Azure-Ressourcen abrufen, die Microsoft Entra-ID verwenden (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.
Container Apps bietet einen intern zugänglichen REST-Endpunkt zum Abrufen von Token. Der REST-Endpunkt ist in der App mit der HTTP-Standardanforderung GET verfügbar, die Sie mit einem generischen HTTP-Client in Ihrer bevorzugten Sprache senden können. Für .NET, JavaScript, Java und Python bietet die Azure Identity-Clientbibliothek eine Abstraktion über diesen REST-Endpunkt. Sie können eine Verbindung mit anderen Azure-Diensten herstellen, indem Sie dem dienstspezifischen Client ein Anmeldeinformationsobjekt hinzufügen.
Hinweis
Bei Verwendung der Azure Identity-Clientbibliothek müssen Sie explizit die Client-ID für die benutzerseitig zugewiesene verwaltete Identität angeben.
Beim Herstellen einer Verbindung mit Azure SQL-Datenquellen mit Entity Framework Core empfiehlt sich die Verwendung von Microsoft.Data.SqlClient, das spezielle Verbindungszeichenfolgen für Verbindungen mit verwalteten Identitäten bietet.
In .NET-Apps ist es am einfachsten, über die Azure Identity-Clientbibliothek mit einer verwalteten Identität zu arbeiten. Weitere Informationen finden Sie in den folgenden Ressourcen:
In den verknüpften Beispielen wird DefaultAzureCredential verwendet. Dieses Objekt ist in den meisten Szenarios effektiv, da dasselbe Muster in Azure (mit verwalteten Identitäten) und auf Ihrem lokalen Computer (ohne verwaltete Identitäten) funktioniert.
In Node.js-Apps ist es am einfachsten, über die Azure Identity-Clientbibliothek für JavaScript mit einer verwalteten Identität zu arbeiten. Weitere Informationen finden Sie in den folgenden Ressourcen:
In den verknüpften Beispielen wird DefaultAzureCredential verwendet. Dieses Objekt ist in den meisten Szenarios effektiv, da dasselbe Muster in Azure (mit verwalteten Identitäten) und auf Ihrem lokalen Computer (ohne verwaltete Identitäten) funktioniert.
Weitere Codebeispiele für die Azure Identity-Clientbibliothek für JavaScript finden Sie unter Beispiele für Azure-Identitäten.
In Python-Apps ist es am einfachsten, über die Azure Identity-Clientbibliothek für Pythonmit einer verwalteten Identität zu arbeiten. Weitere Informationen finden Sie in den folgenden Ressourcen:
In den verknüpften Beispielen wird DefaultAzureCredential verwendet. Dieses Objekt ist in den meisten Szenarios effektiv, da dasselbe Muster in Azure (mit verwalteten Identitäten) und auf Ihrem lokalen Computer (ohne verwaltete Identitäten) funktioniert.
In Java-Apps und -Funktionen ist es am einfachsten, über die Azure Identity-Clientbibliothek für Java mit einer verwalteten Identität zu arbeiten. Weitere Informationen finden Sie in den folgenden Ressourcen:
In den verknüpften Beispielen wird DefaultAzureCredential verwendet. Dieses Objekt ist in den meisten Szenarios effektiv, da dasselbe Muster in Azure (mit verwalteten Identitäten) und auf Ihrem lokalen Computer (ohne verwaltete Identitäten) funktioniert.
Verwenden Sie das folgende Skript, um ein Token vom lokalen Endpunkt abzurufen, indem Sie einen Ressourcen-URI eines Azure-Diensts angeben. Ersetzen Sie den Platzhalter durch den Ressourcen-URI, um das Token abzurufen.
Die unformatierte HTTP-Anforderung vom Typ GET sieht wie im folgenden Beispiel aus.
Rufen Sie die Tokenendpunkt-URL aus der Umgebungsvariablen IDENTITY_ENDPOINT ab. x-identity-header enthält die GUID, die in der Umgebungsvariablen IDENTITY_HEADER gespeichert ist.
GET http://localhost:42356/msi/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
x-identity-header: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a
Eine Antwort könnte folgendem Beispiel entsprechen:
Eine Container-App mit einer verwalteten Identität macht den Identitätsendpunkt verfügbar, indem zwei Umgebungsvariablen definiert werden:
IDENTITY_ENDPOINT: Lokale URL, über die Ihre Container-App Tokens anfordern kann
IDENTITY_HEADER: Ein Header, der verwendet wird, um SSRF-Angriffe (Server-side Request Forgery) zu minimieren. Der Wert wird von der Plattform rotiert.
Um ein Token für eine Ressource abzurufen, erstellen Sie eine HTTP-Anforderung vom Typ GET an den Endpunkt (einschließlich der folgenden Parameter):
Die Version der zu verwendenden Token-API. Verwenden Sie „2019-08-01“ oder höher.
X-IDENTITY-HEADER
Header
Der Wert der Umgebungsvariablen IDENTITY_HEADER. Dieser Header entschärft SSRF-Angriffe (Server-Side Request Forgery).
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.
Anzeigen verwalteter Identitäten
Sie können die systemseitig zugewiesenen und benutzerseitig zugewiesenen verwalteten Identitäten mithilfe des folgenden Azure CLI-Befehls anzeigen. Die Ausgabe zeigt den Typ der verwalteten Identität, Mandanten-IDs und Prinzipal-IDs aller verwalteten Identitäten an, die Ihrer Container-App zugewiesen sind.
az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>
Entfernen einer verwalteten 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 Container-App-Ressource selbst löschen. Durch das Entfernen der benutzerseitig zugewiesenen verwalteten Identitäten aus Ihrer Container-App werden sie nicht aus Microsoft Entra ID entfernt.
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. Wählen Sie 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.
Um die systemseitig zugewiesene Identität zu entfernen:
az containerapp identity remove --name <APP_NAME> --resource-group <GROUP_NAME> --system-assigned
So entfernen Sie eine oder mehrere vom Benutzer zugewiesene Identitäten: