Authentifizieren von Python-Apps bei Azure-Diensten während der lokalen Entwicklung mithilfe von Entwicklerkonten

Wenn Entwickler Cloudanwendungen erstellen, debuggen und testen sie in der Regel Anwendungen auf ihrer lokalen Arbeitsstation. Wenn eine Anwendung während der lokalen Entwicklung auf der Arbeitsstation eines Entwicklers ausgeführt wird, muss sie sich weiterhin bei allen von der App verwendeten Azure-Diensten authentifizieren. In diesem Artikel wird beschrieben, wie Sie die Azure-Anmeldeinformationen eines Entwicklers verwenden, um die App während der lokalen Entwicklung bei Azure zu authentifizieren.

Ein Diagramm, das zeigt, wie eine Python-App während der lokalen Entwicklung die Entwickleranmeldeinformationen verwendet, um eine Verbindung mit Azure herzustellen, indem diese Anmeldeinformationen von lokal installierten Entwicklungstools abgerufen werden.

Damit eine App bei Azure während der lokalen Entwicklung mithilfe der Azure-Anmeldeinformationen des Entwicklers authentifiziert werden kann, muss ein Entwickler über die Azure CLI, Azure PowerShell oder azure Developer CLI bei Azure angemeldet sein. Das Azure SDK für Python kann erkennen, dass der Entwickler von einem dieser Tools aus angemeldet ist, und dann die erforderlichen Anmeldeinformationen aus dem Anmeldeinformationscache abrufen, um die App bei Azure als angemeldeten Benutzer zu authentifizieren.

Dieser Ansatz ist am einfachsten für ein Entwicklungsteam einzurichten, da es die Vorteile der vorhandenen Azure-Konten der Entwickler nutzt. Das Konto eines Entwicklers verfügt jedoch wahrscheinlich über mehr Berechtigungen als für die Anwendung erforderlich, weshalb die Berechtigungen überschritten werden, mit denen die App in der Produktion ausgeführt wird. Alternativ können Sie Anwendungsdienstprinzipale erstellen, die während der lokalen Entwicklung verwendet werden können, die nur auf den Von der App benötigten Zugriff zugreifen können.

1 – Erstellen einer Microsoft Entra-Sicherheitsgruppe für die lokale Entwicklung

Da es fast immer mehrere Entwickler gibt, die an einer Anwendung arbeiten, empfiehlt es sich, zuerst eine Microsoft Entra-Sicherheitsgruppe zu erstellen, um die Rollen (Berechtigungen) zu kapseln, die die App in der lokalen Entwicklung benötigt. Dieser Ansatz bietet die folgenden Vorteile.

  • Jedem Entwickler wird sichergestellt, dass dieselben Rollen zugewiesen werden, da Rollen auf Gruppenebene zugewiesen werden.
  • Wenn eine neue Rolle für die App erforderlich ist, muss sie nur der Microsoft Entra-Gruppe für die App hinzugefügt werden.
  • Wenn ein neuer Entwickler dem Team beitritt, muss er einfach der richtigen Microsoft Entra-Gruppe hinzugefügt werden, um die richtigen Berechtigungen für die Arbeit an der App zu erhalten.

Wenn Sie über eine microsoft Entra-Sicherheitsgruppe für Ihr Entwicklungsteam verfügen, können Sie diese Gruppe verwenden. Führen Sie andernfalls die folgenden Schritte aus, um eine Microsoft Entra-Sicherheitsgruppe zu erstellen.

Der Befehl "az ad group create " wird zum Erstellen von Gruppen in der Microsoft Entra-ID verwendet. Die --display-name- und --main-nickname-Parameter sind erforderlich. Der der Gruppe angegebene Name sollte auf dem Namen der Anwendung basieren. Es ist auch hilfreich, eine Zeichenfolge wie local-dev in den Namen der Gruppe aufzunehmen, um den Zweck der Gruppe anzugeben.

az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"

Kopieren Sie den Wert der id Eigenschaft in der Ausgabe des Befehls. Dies ist die Objekt-ID für die Gruppe. Sie benötigen sie in späteren Schritten. Sie können auch den Befehl "az ad group show" verwenden, um diese Eigenschaft abzurufen.

Um der Gruppe Mitglieder hinzuzufügen, benötigen Sie die Objekt-ID des Azure-Benutzers. Verwenden Sie die az ad user list , um die verfügbaren Dienstprinzipale aufzulisten. Der --filter Parameterbefehl akzeptiert OData-Formatfilter und kann verwendet werden, um die Liste wie gezeigt nach dem Anzeigenamen des Benutzers zu filtern. Der --query Parameter schränkt die Ausgabe auf interessante Spalten ein.

az ad user list \
    --filter "startswith(displayName, 'Bob')" \
    --query "[].{objectId:id, displayName:displayName}" \
    --output table

Der Befehl az ad group member add kann dann verwendet werden, um Gruppen Mitglieder hinzuzufügen.

az ad group member add \
    --group <group-name> \
    --member-id <object-id>

Hinweis

Standardmäßig ist die Erstellung von Microsoft Entra-Sicherheitsgruppen auf bestimmte privilegierte Rollen in einem Verzeichnis beschränkt. Wenn Sie keine Gruppe erstellen können, wenden Sie sich an einen Administrator für Ihr Verzeichnis. Wenn Sie einer vorhandenen Gruppe keine Mitglieder hinzufügen können, wenden Sie sich an den Gruppenbesitzer oder einen Verzeichnisadministrator. Weitere Informationen finden Sie unter Verwalten von Microsoft Entra-Gruppen und Gruppenmitgliedschaften.

2 – Zuweisen von Rollen zur Microsoft Entra-Gruppe

Als Nächstes müssen Sie bestimmen, welche Rollen (Berechtigungen) Ihre App für welche Ressourcen benötigt, und diese Rollen Ihrer App zuweisen. In diesem Beispiel werden die Rollen der In Schritt 1 erstellten Microsoft Entra-Gruppe zugewiesen. Rollen können einer Ressource, Einer Ressourcengruppe oder einem 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.

Einem Benutzer, einer Gruppe oder einem Anwendungsdienstprinzipal wird eine Rolle in Azure mithilfe des Befehls "az role assignment create " zugewiesen. Sie können eine Gruppe mit seiner Objekt-ID angeben.

az role assignment create --assignee {objectId} \
    --scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
    --role "{roleName}" 

Um die Rollennamen abzurufen, die zugewiesen werden können, verwenden Sie den Befehl "az role definition list" .

az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Um beispielsweise den Mitgliedern einer Gruppe mit einer Objekt-ID mit 00000000-0000-0000-0000-000000000000 Lese-, Schreib- und Löschzugriff auf Azure Storage-Blobcontainer und -Daten in allen Speicherkonten in der Msdocs-python-sdk-auth-Beispielressourcengruppe im Abonnement mit ID 11111111-1111-1111-1111-111111111111zu ermöglichen, würden Sie der Gruppe die Rolle "Storage Blob Data Contributor " mit dem folgenden Befehl zuweisen.

az role assignment create --assignee 00000000-0000-0000-0000-000000000000 \
    --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 – Melden Sie sich mit azure CLI, Azure PowerShell, Azure Developer CLI oder in einem Browser bei Azure an.

Öffnen Sie ein Terminal auf Ihrer Entwicklerarbeitsstation, und melden Sie sich über die Azure CLI bei Azure an.

az login

4. Implementieren von DefaultAzureCredential in Ihrer Anwendung

Um Azure SDK-Clientobjekte für Azure zu authentifizieren, sollte Ihre Anwendung die DefaultAzureCredential Klasse aus dem azure.identity Paket verwenden. In diesem Szenario wird sequenziell überprüft, DefaultAzureCredential ob sich der Entwickler mit der Azure CLI, Azure PowerShell oder Azure Developer CLI bei Azure angemeldet hat. Wenn der Entwickler mit einem dieser Tools bei Azure angemeldet ist, werden die Zum Anmelden beim Tool verwendeten Anmeldeinformationen von der App zur Authentifizierung bei Azure verwendet.

Fügen Sie zunächst 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:

  1. Importieren Sie die DefaultAzureCredential Klasse aus dem azure.identity Modul.
  2. Erstellen eines DefaultAzureCredential-Objekts
  3. Ü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)