Freigeben über


Authentifizieren von Python-Apps bei Azure-Services bei der lokalen Entwicklung mithilfe von Entwicklerkonten

Beim Entwickeln von Cloudanwendungen erstellen Entwickler ihren Code in der Regel lokal, bevor sie in Azure bereitgestellt werden. Selbst während der lokalen Entwicklung muss sich die Anwendung jedoch bei allen Azure-Diensten authentifizieren, mit denen sie interagiert, z. B. Key Vault, Speicher oder Datenbanken.

In diesem Artikel wird erläutert, wie Sie Ihre Anwendung so konfigurieren, dass die Azure-Anmeldeinformationen des Entwicklers während der lokalen Entwicklung für die Authentifizierung verwendet werden. Dieser Ansatz ermöglicht eine nahtlose und sichere Entwicklungsumgebung, ohne geheime Schlüssel einzubetten oder umgebungsspezifische Logik zu schreiben.

Übersicht über die lokale Entwicklungsauthentifizierung mit Entwicklerkonten

Beim Entwickeln einer Anwendung, die die Azure Identity-Bibliothek für Python verwendet, können Sie sich während der lokalen Entwicklung mithilfe des Azure-Kontos des Entwicklers bei Azure-Diensten authentifizieren. Dieser Ansatz ist häufig die einfachste Möglichkeit, sich während der lokalen Entwicklung bei Azure-Diensten zu authentifizieren, da es keine Erstellung und Verwaltung von Dienstprinzipalen oder geheimen Schlüsseln erfordert.

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

Damit sich eine Anwendung während der lokalen Entwicklung mit den eigenen Azure-Anmeldeinformationen des Entwicklers bei Azure authentifizieren kann, muss sich der Entwickler zuerst mit einem der unterstützten Befehlszeilentools anmelden:

  • Azure CLI (az login)
  • Azure Developer CLI (azd login)
  • Azure PowerShell (Connect-AzAccount)

Nach der Anmeldung kann die Azure Identity-Bibliothek für Python die aktive Sitzung automatisch erkennen und die erforderlichen Token aus dem Anmeldeinformationscache abrufen. Mit dieser Funktion kann sich die App bei Azure-Diensten als angemeldeter Benutzer authentifizieren, ohne dass zusätzliche Konfigurations- oder hartcodierte Geheimschlüssel erforderlich sind.

Dieses Verhalten ist bei Verwendung DefaultAzureCredentialaktiviert, was transparent auf CLI-basierte Anmeldeinformationen in lokalen Umgebungen zurückfällt.

Die Verwendung der angemeldeten Azure-Anmeldeinformationen eines Entwicklers ist die einfachste Einrichtung für die lokale Entwicklung. Es nutzt das vorhandene Azure-Konto jedes Teammitglieds und ermöglicht den nahtlosen Zugriff auf Azure-Dienste, ohne dass eine zusätzliche Konfiguration erforderlich ist.

Entwicklerkonten verfügen jedoch in der Regel über breitere Berechtigungen als die Anwendung in der Produktion. Diese umfassenderen Berechtigungen können zu Inkonsistenzen bei Tests führen oder versehentlich Vorgänge zulassen, die von der App nicht für die Ausführung in einer Produktionsumgebung autorisiert wurden. Um Produktionsberechtigungen genau zu spiegeln und den Sicherheitsstatus zu verbessern, können Sie stattdessen anwendungsspezifische Dienstprinzipale für die lokale Entwicklung erstellen. Diese Identitäten:

  • Kann nur den Rollen und Berechtigungen zugewiesen werden, die die Anwendung benötigt
  • Einhalten des Prinzips des geringsten Privilegs
  • Bieten Sie konsistente Tests des zugriffsbezogenen Verhaltens in allen Umgebungen.

Entwickler können die lokale Umgebung so konfigurieren, dass der Dienstprinzipal über Umgebungsvariablen verwendet wird, und DefaultAzureCredential übernimmt diese automatisch. Weitere Informationen finden Sie im Artikel Authentifizieren von Python-Apps für Azure-Dienste während der lokalen Entwicklung mithilfe von Dienstprinzipalen.

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

In den meisten Entwicklungsszenarien tragen mehrere Entwickler zur gleichen Anwendung bei. Um die Zugriffssteuerung zu optimieren und konsistente Berechtigungen im gesamten Team sicherzustellen, empfehlen wir, zuerst eine Microsoft Entra-Sicherheitsgruppe speziell für die lokalen Entwicklungsanforderungen der Anwendung zu erstellen.

Das Zuweisen von Azure-Rollen auf Gruppenebene – statt einzelner Benutzer – bietet mehrere wichtige Vorteile:

  • Einheitliche Rollenzuweisungen

    Alle Entwickler in der Gruppe erben automatisch dieselben Rollen und Berechtigungen, um eine einheitliche Entwicklungsumgebung sicherzustellen.

  • Vereinfachte Rollenverwaltung

    Wenn die Anwendung eine neue Rolle erfordert, müssen Sie sie nur einmal zur Gruppe hinzufügen. Sie müssen keine einzelnen Benutzerberechtigungen aktualisieren.

  • Einfache Einarbeitung

    Neuen Entwicklern können einfach die erforderlichen Berechtigungen erteilt werden, indem Sie sie der Gruppe hinzufügen. Es sind keine manuellen Rollenzuweisungen erforderlich.

Wenn Ihre Organisation bereits über eine geeignete Microsoft Entra-Sicherheitsgruppe für das Entwicklungsteam verfügt, können Sie sie wiederverwenden. Andernfalls können Sie eine neue Gruppe speziell für die App erstellen.

Verwenden Sie zum Erstellen einer Sicherheitsgruppe in Microsoft Entra ID den Befehl „az ad group create“ der Azure CLI.

Für diesen Befehl sind die folgenden Parameter erforderlich:

--display-name: Ein benutzerfreundlicher Name für die Gruppe

--mail-nickname: Ein eindeutiger Bezeichner, der für E-Mail und interne Referenz verwendet wird

Wir empfehlen, den Gruppennamen auf dem Anwendungsnamen zu basieren und ein Suffix wie -local-dev hinzuzufügen, um den Zweck deutlich anzugeben.

#!/bin/bash
az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"
# PowerShell syntax
az ad group create `
    --display-name MyDisplay `
    --mail-nickname MyDisplay `
    --description "<group-description>"

Kopieren Sie nach dem Ausführen des az ad group create Befehls den Wert der id Eigenschaft aus der Befehlsausgabe. Sie benötigen die Object ID der Sicherheitsgruppe Microsoft Entra für die Rollenzuweisung in späteren Schritten in diesem Artikel. Verwenden Sie zum späteren Abrufen des Object ID den folgenden Befehl az ad group show: az ad group show --group "my-app-local-dev" --query id --output tsv.

Um der Gruppe einen Benutzer hinzuzufügen, müssen Sie zuerst das Object ID Azure-Benutzerkonto abrufen, das Sie hinzufügen möchten. Verwenden Sie den Befehl "az ad user list" mit dem --filter Parameter, um nach einem bestimmten Benutzer anhand des Anzeigenamens zu suchen. Der --query Parameter hilft, die Ausgabe auf relevante Felder einzuschränken:

#!/bin/bash
az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table
# PowerShell syntax
az ad user list `
    --filter "startswith(displayName, 'Bob')" `
    --query "[].{objectId:id, displayName:displayName}" `
    --output table

Sobald Sie ein Benutzerkonto Object ID haben, können Sie es mithilfe des Befehls az ad group member add zur Gruppe hinzufügen.

#!/bin/bash
az ad group member add \
    --group <group-name> \
    --member-id <object-id>
# PowerShell syntax
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

Nachdem Sie Ihre Microsoft Entra-Sicherheitsgruppe erstellt und Mitglieder hinzugefügt haben, besteht der nächste Schritt darin, zu bestimmen, welche Rollen (Berechtigungen) Ihre Anwendung erfordert, und diese Rollen der Gruppe im entsprechenden Bereich zuweisen.

  • Bestimmen der erforderlichen Rollen

    Identifizieren Sie die Rollen, die Ihre App zum Funktionieren benötigt. Häufige Beispiele sind:

    • Key Vault Secrets User – zum Lesen geheimer Schlüssel aus Azure Key Vault
    • Beitragender für Speicher-Queue-Daten – zum Senden von Nachrichten an Azure Queue Storage

    Weitere Optionen finden Sie in den integrierten Rollendefinitionen.

  • Auswählen eines Bereichs für die Rollenzuweisung

    Rollen können in verschiedenen Bereichen zugewiesen werden:

    • Ressourcenebene (z. B. ein einzelnes Key Vault- oder Speicherkonto)
    • Ressourcengruppenebene (empfohlen für die meisten Apps)
    • Abonnementebene (Mit Vorsicht – größtmöglicher Zugriff)

In diesem Beispiel weisen wir Rollen im Ressourcengruppenbereich zu, was typisch ist, wenn alle Anwendungsressourcen unter einer Ressourcengruppe gruppiert werden.

Einem Benutzer, einer Gruppe oder einem Anwendungsdienstprinzipal wird in Azure mit dem Befehl az role assignment create eine Rolle zugewiesen. Sie können eine Gruppe mit der zugehörigen Object IDAngeben.

#!/bin/bash
az role assignment create --assignee <objectId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 
# PowerShell syntax
az role assignment create `
    --assignee <objectId> `
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> `
    --role "<roleName>"

Verwenden Sie den Befehl az role definition list, um die Rollennamen abzurufen, die zugewiesen werden können.

#!/bin/bash
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table
# PowerShell syntax
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Um Lese-, Schreib- und Löschzugriff auf Azure Storage-BLOB-Container und -Daten für alle Speicherkonten in einer bestimmten Ressourcengruppe zu gewähren, weisen Sie ihrer Microsoft Entra-Sicherheitsgruppe die Rolle "Mitwirkender für Speicher-Blobdaten" zu.

#!/bin/bash
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"
# PowerShell syntax
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc `
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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 – Anmeldung mit Azure-CLI, Azure PowerShell, Azure Developer-CLI oder in einem Browser bei Azure

Um sich mit Ihrem Azure-Konto zu authentifizieren, wählen Sie eine der folgenden Methoden aus:

Ö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 mit Azure zu authentifizieren, sollte Ihre Anwendung die DefaultAzureCredential Klasse aus dem azure-identity Paket verwenden. Dies ist die empfohlene Authentifizierungsmethode für lokale Entwicklungs- und Produktionsbereitstellungen.

In einem lokalen Entwicklungsszenario funktioniert DefaultAzureCredential durch die sequentielle Überprüfung der verfügbaren Authentifizierungsquellen. Insbesondere wird in den folgenden Tools nach aktiven Sitzungen gesucht:

  • Azure CLI (az login)
  • Azure PowerShell (Connect-AzAccount)
  • Azure Developer CLI (azd auth login)

Wenn der Entwickler mit einem dieser Tools bei Azure angemeldet ist, DefaultAzureCredential erkennt die Sitzung automatisch und verwendet diese Anmeldeinformationen, um die Anwendung mit Azure-Diensten zu authentifizieren. Auf diese Weise können Entwickler sich sicher authentifizieren, ohne geheime Schlüssel zu speichern oder Code für verschiedene Umgebungen zu ändern.

Fügen Sie Ihrer Anwendung zunächst das Paket azure.identity hinzu.

pip install azure-identity

Als Nächstes möchten 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 wird im folgenden Codeausschnitt gezeigt.

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)