Authentifizieren von Azure gehosteten Apps bei Azure-Ressourcen mit dem Azure SDK für Python
Wenn Sie eine App in Azure mit Diensten wie Azure-App Dienst, virtuellen Azure-Computern oder Azure-Containerinstanzen hosten, ist der empfohlene Ansatz zum Authentifizieren einer App bei Azure-Ressourcen mit verwalteter Identität.
Eine verwaltete Identität stellt eine Identität für Ihre App bereit, sodass sie eine Verbindung mit anderen Azure-Ressourcen herstellen kann, ohne einen geheimen Schlüssel oder ein anderes Anwendungsgeheimnis verwenden zu müssen. Intern kennt Azure die Identität Ihrer App und die Ressourcen, mit der eine Verbindung hergestellt werden darf. Azure verwendet diese Informationen, um automatisch Microsoft Entra-Token für die App abzurufen, damit sie eine Verbindung mit anderen Azure-Ressourcen herstellen kann, ohne dass Sie Anwendungsgeheimnisse verwalten müssen.
Arten von verwalteten Identitäten
Es gibt zwei Arten von verwalteten Identitäten:
- Vom System zugewiesene verwaltete Identitäten : Diese Art von verwalteter Identität wird von einer Azure-Ressource bereitgestellt und direkt an sie gebunden. Wenn Sie die verwaltete Identität für eine Azure-Ressource aktivieren, erhalten Sie eine systemseitig zugewiesene verwaltete Identität für diese Ressource. Eine systemseitig zugewiesene verwaltete Identität ist an den Lebenszyklus der Azure-Ressource gebunden, der sie zugeordnet ist. Azure löscht automatisch die Identität, wenn die Ressource gelöscht wird. Da Sie nur die verwaltete Identität für die Azure-Ressource aktivieren müssen, die Ihren Code hosten soll, ist dieser Ansatz die einfachste Art verwalteter Identität zu verwenden.
- Vom Benutzer zugewiesene verwaltete Identitäten – Sie können auch eine verwaltete Identität als eigenständige Azure-Ressource erstellen. Dieser Ansatz wird am häufigsten verwendet, wenn Ihre Lösung über mehrere Workloads verfügt, die auf mehreren Azure-Ressourcen ausgeführt werden, die alle die gleiche Identität und dieselben Berechtigungen gemeinsam nutzen müssen. Wenn Ihre Lösung beispielsweise Komponenten enthält, die auf mehreren App Service- und virtuellen Computerinstanzen ausgeführt werden, die alle Zugriff auf dieselbe Gruppe von Azure-Ressourcen benötigen, ist eine vom Benutzer zugewiesene verwaltete Identität, die für diese Ressourcen verwendet wird, sinnvoll.
In diesem Artikel werden die Schritte zum Aktivieren und Verwenden einer vom System zugewiesenen verwalteten Identität für eine App behandelt. Wenn Sie eine benutzerseitig zugewiesene verwaltete Identität verwenden müssen, lesen Sie den Artikel Verwalten benutzerseitig zugewiesener verwalteter Identitäten , um zu erfahren, wie Sie eine benutzerseitig zugewiesene verwaltete Identität erstellen.
1: Aktivieren der verwalteten Identität in der Azure-Ressource, die die App hosten
Der erste Schritt besteht darin, die verwaltete Identität in Azure-Ressourcen zu aktivieren, die Ihre App hosten. Wenn Sie beispielsweise eine Django-Anwendung mit Azure-App Dienst hosten, müssen Sie die verwaltete Identität für die App Service-Web-App aktivieren, die Ihre App hosten. Wenn Sie einen virtuellen Computer verwenden, um Ihre App zu hosten, würden Sie Ihre VM für die Verwendung der verwalteten Identität aktivieren.
Sie können die Verwendung der verwalteten Identität für eine Azure-Ressource mithilfe der Azure-Portal oder der Azure CLI aktivieren.
Azure CLI-Befehle können in der Azure Cloud Shell oder auf einer Workstation mit installierter Azure CLI ausgeführt werden.
Die Azure CLI-Befehle, die zum Aktivieren der verwalteten Identität für eine Azure-Ressource verwendet werden, haben das Format az <command-group> identity --resource-group <resource-group-name> --name <resource-name>
. Spezifische Befehle für beliebte Azure-Dienste sind unten dargestellt.
az webapp identity assign --resource-group <resource-group-name> -name <web-app-name>
Die Ausgabe sieht dann wie folgt aus:
{
"principalId": "99999999-9999-9999-9999-999999999999",
"tenantId": "33333333-3333-3333-3333-333333333333",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
Der principalId
Wert ist die eindeutige ID der verwalteten Identität. Behalten Sie eine Kopie dieser Ausgabe bei, da Sie diese Werte im nächsten Schritt benötigen.
2 - Zuweisen einer Rolle zur verwalteten Identität
Als Nächstes müssen Sie ermitteln, welche Rollen (Berechtigungen) Ihre App benötigt, und die verwaltete Identität diesen Rollen in Azure zuweisen. Einer verwalteten Identität können Rollen in einem Ressourcen-, Ressourcengruppen- oder Abonnementbereich zugewiesen werden. In diesem Beispiel wird gezeigt, wie Rollen im Ressourcengruppenbereich zugewiesen werden, da die meisten Anwendungen alle ihre Azure-Ressourcen in einer einzelnen Ressourcengruppe gruppieren.
Eine verwaltete Identität wird mithilfe des Befehls az role assignment create in Azure einer Rolle zugewiesen. Verwenden Sie für den Zugewiesenen die principalId
kopierte Datei in Schritt 1.
az role assignment create --assignee {managedIdentityprincipalId} \
--scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
--role "{roleName}"
Verwenden Sie den Befehl az role definition list , um die Rollennamen abzurufen, denen ein Dienstprinzipal zugewiesen werden kann.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Um beispielsweise die verwaltete Identität mit der ID des 99999999-9999-9999-9999-999999999999
Lese-, Schreib- und Löschzugriffs auf Azure Storage-Blobcontainer und -Daten in allen Speicherkonten in der Msdocs-python-sdk-auth-beispiel-Ressourcengruppe im Abonnement mit ID 11111111-1111-1111-1111-111111111111
zuzulassen, würden Sie den Anwendungsdienstprinzipal der Rolle "Storage Blob Data Contributor " mit dem folgenden Befehl zuweisen.
az role assignment create --assignee 99999999-9999-9999-9999-999999999999 \
--scope /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/msdocs-python-sdk-auth-example \
--role "Storage Blob Data Contributor"
Informationen zum Zuweisen von Berechtigungen auf Ressourcen- oder Abonnementebene mithilfe der Azure CLI finden Sie im Artikel Zuweisen von Azure-Rollen mithilfe der Azure CLI.
3 - Implementieren von DefaultAzureCredential in Ihrer Anwendung
Wenn Ihr Code in Azure ausgeführt wird und die verwaltete Identität auf der Azure-Ressource aktiviert wurde, die Ihre App hostet, bestimmt die DefaultAzureCredential
Anmeldeinformationen, die in der folgenden Reihenfolge verwendet werden sollen:
- Überprüfen Sie die Umgebung auf einen Dienstprinzipal gemäß der Definition der Umgebungsvariablen
AZURE_CLIENT_ID
,AZURE_TENANT_ID
und entwederAZURE_CLIENT_SECRET
oder (optionalAZURE_CLIENT_CERTIFICATE_PATH
)AZURE_CLIENT_CERTIFICATE_PASSWORD
. - Überprüfen Sie Schlüsselwort (keyword) Parameter für eine vom Benutzer zugewiesene verwaltete Identität. Sie können eine vom Benutzer zugewiesene verwaltete Identität übergeben, indem Sie die
managed_identity_client_id
Client-ID im Parameter angeben. - Überprüfen Sie die
AZURE_CLIENT_ID
Umgebungsvariable auf die Client-ID einer vom Benutzer zugewiesenen verwalteten Identität. - Verwenden Sie die vom System zugewiesene verwaltete Identität für die Azure-Ressource, wenn sie aktiviert ist.
Sie können verwaltete Identitäten aus den Anmeldeinformationen ausschließen, indem Sie den exclude_managed_identity_credential
Parameter Schlüsselwort (keyword) True
festlegen.
In diesem Artikel verwenden wir die vom System zugewiesene verwaltete Identität für eine Azure-App Service Web App, daher müssen wir keine verwaltete Identität in der Umgebung konfigurieren oder als Parameter übergeben. In den folgenden Schritten wird die Verwendung DefaultAzureCredential
veranschaulicht.
Fügen Sie zuerst das azure.identity
Paket zu Ihrer Anwendung hinzu.
pip install azure-identity
Als Nächstes sollten Sie für jeden Python-Code, der ein Azure SDK-Clientobjekt in Ihrer App erstellt, Folgendes ausführen:
- Importieren Sie die
DefaultAzureCredential
Klasse aus demazure.identity
Modul. - Erstellen eines
DefaultAzureCredential
-Objekts - Übergeben Sie das
DefaultAzureCredential
Objekt an den Azure SDK-Clientobjektkonstruktor.
Ein Beispiel für diese Schritte ist im folgenden Codesegment dargestellt.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Acquire a credential object
token_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=token_credential)
Wie im Artikel zur Übersicht über die Azure SDK für Python-Authentifizierung erläutert, werden mehrere Authentifizierungsmethoden unterstützt und die Authentifizierungsmethode bestimmt, DefaultAzureCredential
die zur Laufzeit verwendet wird. Der Vorteil dieses Ansatzes besteht darin, dass Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen verwenden kann, ohne umgebungsspezifischen Code zu implementieren. Wenn der vorangehende Code während der lokalen Entwicklung auf Ihrer Arbeitsstation ausgeführt wird, DefaultAzureCredential
wird entweder ein Anwendungsdienstprinzipal verwendet, wie durch Umgebungseinstellungen bestimmt, oder Anmeldeinformationen des Entwicklertools, um sich bei anderen Azure-Ressourcen zu authentifizieren. Daher kann derselbe Code verwendet werden, um Ihre App bei Azure-Ressourcen sowohl während der lokalen Entwicklung als auch bei der Bereitstellung in Azure zu authentifizieren.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für