Exemplarische Vorgehensweise: Integrierte Authentifizierung für Python-Apps mit Azure-Diensten

Microsoft Entra-ID, wenn sie mit Azure Key Vault verwendet wird, bietet einen robusten und sicheren Ansatz für die Authentifizierung von Anwendungen für Azure-Dienste und Drittanbieterplattformen, die Zugriffstasten oder Anmeldeinformationen erfordern. Diese Kombination beseitigt die Notwendigkeit, geheime Schlüssel im Anwendungscode zu hartcodieren, sondern auf verwaltete Identitäten, rollenbasierte Zugriffssteuerung (RBAC) und zentrale geheime Verwaltung über Key Vault zu vertrauen. Dieser Ansatz optimiert die Identitätsverwaltung und verbessert den Sicherheitsstatus in Cloudumgebungen.

In dieser exemplarischen Vorgehensweise werden diese Authentifizierungsmechanismen anhand eines praktischen Beispiels im GitHub-Repository erläutert: github.com/Azure-Samples/python-integrated-authentication.

Das Beispiel veranschaulicht, wie eine Python-Anwendung:

  • Authentifizieren mit Azure mit DefaultAzureCredential

  • Zugreifen auf geheime Azure Key Vault-Schlüssel ohne Speichern von Anmeldeinformationen

  • Sichere Kommunikation mit anderen Azure-Diensten wie Azure Storage, Cosmos DB und mehr

Dieser Artikel ist Teil einer Reihe, die eine ausführliche exemplarische Vorgehensweise zum Authentifizieren einer Python-App mit Microsoft Entra ID, Azure Key Vault und Azure Queue Storage mithilfe der Azure Python SDK-Bibliothek azure-identity bereitstellt.

Teil 1: Hintergrund

Während viele Azure Dienste ausschließlich auf rollenbasierte Zugriffssteuerung (RBAC) basieren, benötigen andere Zugriff über geheime Schlüssel oder Schlüssel. Zu diesen Diensten gehören Azure Storage, Datenbanken, Foundry Tools, Key Vault und Event Hubs.

Beim Erstellen von Cloudanwendungen, die mit diesen Diensten interagieren, können Entwickler das Azure-Portal, die CLI oder PowerShell verwenden, um dienstspezifische Zugriffstasten zu generieren und zu konfigurieren. Diese Schlüssel sind an bestimmte Zugriffsrichtlinien gebunden, um unbefugten Zugriff zu verhindern. Dieses Modell erfordert jedoch, dass Ihre Anwendung Schlüssel explizit verwaltet und separat bei jedem Dienst authentifiziert, einem Prozess, der sowohl mühsam als auch fehleranfällig ist.

Das direkte Einbetten von Geheimnissen in den Code und das Speichern auf Entwicklercomputern birgt das Risiko ihrer Offenlegung.

  • Quellcodeverwaltung
  • Unsichere lokale Umgebungen
  • Versehentliche Protokolle oder Konfigurationsexporte

Azure bietet zwei wichtige Dienste, um die Sicherheit zu verbessern und die Authentifizierung zu vereinfachen:

  • Azure Key Vault Azure Key Vault bietet einen sicheren, cloudbasierten Speicher für geheime Schlüssel, einschließlich Zugriffsschlüsseln, Verbindungszeichenfolgen und Zertifikaten. Durch das Abrufen von geheimen Schlüsseln aus Key Vault nur zur Laufzeit vermeiden Anwendungen, vertrauliche Daten in Quellcode- oder Konfigurationsdateien verfügbar zu geben.

  • Mit von Microsoft Entra verwalteten Identitäten kann Ihre Anwendung sich einmal mit der Microsoft Entra-ID authentifizieren. Von dort aus kann er auf andere Azure-Dienste , einschließlich Key Vault, zugreifen, ohne anmeldeinformationen direkt zu verwalten.

Dieser Ansatz bietet Folgendes:

  • Code ohne Anmeldeinformationen (keine geheimen Schlüssel in der Quellcodeverwaltung)
  • Nahtlose Integration in Azure-Dienste
  • Umgebungskonsistenz: Derselbe Code wird lokal und in der Cloud mit minimaler Konfiguration ausgeführt

In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie die verwaltete Identität und den Key Vault von Microsoft Entra in derselben App verwenden. Durch die gemeinsame Verwendung von Microsoft Entra ID und Key Vault muss Ihre App sich nie bei einzelnen Azure-Diensten authentifizieren und kann problemlos und sicher auf alle Schlüssel zugreifen, die für Drittanbieterdienste erforderlich sind.

Von Bedeutung

In diesem Artikel wird der allgemeine generische Begriff "Schlüssel" verwendet, um auf das zu verweisen, was in Azure Key Vault als "geheime Schlüssel" gespeichert ist, z. B. einen Zugriffsschlüssel für eine REST-API. Diese Verwendung sollte nicht mit der Verwaltung kryptografischer Schlüssel von Key Vault verwechselt werden, die ein separates Feature von Key Vaults Verwaltung von Geheimnissen ist.

Beispielszenario für Cloud-App

Um den Authentifizierungsprozess von Azure genauer zu verstehen, berücksichtigen Sie das folgende Szenario: Eine Flask-Webanwendung wird für Azure App Service bereitgestellt. Er macht einen öffentlichen, nicht authentifizierten API-Endpunkt verfügbar, der JSON-Daten als Reaktion auf HTTP-Anforderungen zurückgibt.

  • Um die Antwort zu generieren, ruft die API eine Drittanbieter-API auf, die einen Zugriffsschlüssel erfordert. Anstatt diesen Schlüssel in Code- oder Konfigurationsdateien zu speichern, ruft die App ihn zur Laufzeit mithilfe der von Microsoft Entra verwalteten Identität sicher aus Azure Key Vault ab.

  • Bevor die App ihre Antwort an den Client sendet, wird eine Nachricht zur asynchronen Verarbeitung in eine Azure Storage-Warteschlange geschrieben. Die Nachricht kann eine Aufgabe, ein Protokoll oder ein Signal darstellen, obwohl die nachgeschaltete Verarbeitung nicht der Fokus dieses Szenarios ist.

Diagramm des Anwendungsszenarios

Hinweis

Obwohl öffentliche API-Endpunkte in der Regel durch ihre eigenen Zugriffstasten oder Authentifizierungsmechanismen geschützt sind, wird in dieser exemplarischen Vorgehensweise davon ausgegangen, dass der Endpunkt geöffnet und nicht authentifiziert ist.

Diese Vereinfachung hilft dabei, die internen Authentifizierungsanforderungen der App – z. B. den Zugriff auf Azure Key Vault und Azure Storage – von allen Authentifizierungsproblemen im Zusammenhang mit externen Clients zu isolieren.

Das Szenario konzentriert sich ausschließlich auf das Verhalten der App und zeigt keinen externen Aufrufer, der sich mit dem Endpunkt authentifiziert.