Spring Cloud Azure-Authentifizierung

In diesem Artikel werden Spring Cloud Azure-Authentifizierungsmethoden erläutert, und Sie können den richtigen Anmeldeinformationstyp auswählen, um den Zugriff auf Azure Ressourcen zu sichern.

Authentifizierung und Autorisierung mit Microsoft Entra ID

Mithilfe von Microsoft Entra ID können Sie Azure rollenbasierte Zugriffssteuerung (Azure RBAC) verwenden, um Berechtigungen für einen Sicherheitsprinzipal zu erteilen, bei dem es sich um einen Benutzer oder einen Anwendungsdienstprinzipal handeln kann. Wenn ein Sicherheitsprinzipal (ein Benutzer oder eine Anwendung) versucht, auf eine Azure Ressource zuzugreifen, z. B. eine Event Hubs-Ressource, muss die Anforderung autorisiert sein. Durch die Verwendung von Microsoft Entra ID ist der Zugriff auf eine Ressource ein zweistufiger Prozess:

  1. Authentifizieren Sie zunächst die Identität des Sicherheitsprinzipals, und geben Sie ein OAuth 2.0-Token zurück.
  2. Übergeben Sie als Nächstes das Token als Teil einer Anforderung an den Azure-Dienst, um den Zugriff auf die angegebene Ressource zu autorisieren.

Anmeldeinformationstypen

Spring Cloud Azure ermöglicht es Ihnen, verschiedene Anmeldeinformationstypen für die Authentifizierung zu konfigurieren, einschließlich DefaultAzureCredential, , WorkloadIdentityCredential, ManagedIdentityCredential, ClientSecretCredential, AzureCliCredentialund vieles mehr.

DefaultAzureCredential

DefaultAzureCredential eignet sich für die meisten Szenarien, in denen die Anwendung in der Azure Cloud ausgeführt werden soll, da sie die folgenden Anmeldeinformationen kombiniert:

  • Anmeldeinformationen, die häufig für die Authentifizierung bei der Bereitstellung verwendet werden.
  • Anmeldeinformationen, die für die Authentifizierung in einer Entwicklungsumgebung verwendet werden.

Anmerkung

DefaultAzureCredentialvereinfacht die ersten Schritte mit dem Azure SDK, indem allgemeine Szenarien mit vernünftigen Standardverhalten behandelt werden. Wenn Sie mehr Kontrolle wünschen oder die Standardeinstellungen Ihr Szenario nicht unterstützen, verwenden Sie andere Anmeldeinformationstypen.

DefaultAzureCredential versucht, sich über die folgenden Mechanismen zu authentifizieren:

Screenshot des DefaultAzureCredential-Authentifizierungsflusses und der Reihenfolge der Anmeldeinformationen.

  • Umgebung – DefaultAzureCredential versucht, über Umgebungsvariablen angegebene Kontoinformationen zu lesen und zur Authentifizierung zu verwenden.
  • Verwaltete Identität – Wenn die Anwendung auf einem Azure-Host mit aktivierter verwalteter Identität bereitgestellt wird, versucht, DefaultAzureCredential sich mithilfe dieses Kontos zu authentifizieren.
  • Workload Identity – Wenn die Anwendung auf einem virtuellen Computer (VM) bereitgestellt wird, versucht, DefaultAzureCredential sich mithilfe dieses Kontos zu authentifizieren.
  • Cache für freigegebene Token – Wenn Sie sich über Visual Studio authentifiziert haben, versucht, DefaultAzureCredential sich mithilfe dieses Kontos zu authentifizieren.
  • IntelliJ – Wenn Sie sich über Azure Toolkit für IntelliJ authentifiziert haben, versucht, DefaultAzureCredential sich mithilfe dieses Kontos zu authentifizieren.
  • Azure CLI – Wenn Sie ein Konto über den Befehl Azure CLI az login authentifiziert haben, versucht, DefaultAzureCredential sich mithilfe dieses Kontos zu authentifizieren.
  • Azure PowerShell – Wenn Sie sich über Azure PowerShell authentifiziert haben, versucht, DefaultAzureCredential sich mithilfe dieses Kontos zu authentifizieren.
  • Azure Developer CLI – Wenn Sie sich über die Azure Developer CLI authentifiziert haben, versucht, DefaultAzureCredential sich mithilfe dieses Kontos zu authentifizieren.

Trinkgeld

Stellen Sie sicher, dass der Sicherheitsprinzipal über ausreichende Berechtigungen für den Zugriff auf die Azure-Ressource verfügt. Weitere Informationen finden Sie unter Autorisieren des Zugriffs mit microsoft Entra ID.

Anmerkung

Seit Spring Cloud Azure AutoConfigure 4.1.0 müssen Sie einen ThreadPoolTaskExecutor Bean namens springCloudAzureCredentialTaskExecutor registrieren, um alle von Azure Identity erstellten Threads zu verwalten. Der Name jedes threads, der von diesem Threadpool verwaltet wird, wird az-identity-vorangestellt. Diese ThreadPoolTaskExecutor Bohnen ist unabhängig von der Executor von Spring Boot bereitgestellt.

Verwaltete Identitäten

Eine häufige Herausforderung ist die Verwaltung von geheimen Schlüsseln und Anmeldeinformationen, die zur Sicherung der Kommunikation zwischen verschiedenen Komponenten verwendet werden, die eine Lösung bilden. Verwaltete Identitäten vermeiden die Notwendigkeit, Anmeldeinformationen zu verwalten. Verwaltete Identitäten stellen eine Identität für Anwendungen bereit, die beim Herstellen einer Verbindung mit Ressourcen verwendet werden sollen, die die Microsoft Entra-Authentifizierung unterstützen. Anwendungen können die verwaltete Identität verwenden, um Microsoft Entra Token abzurufen. Beispielsweise kann eine Anwendung eine verwaltete Identität verwenden, um auf Ressourcen wie Azure Key Vault zuzugreifen, in denen Sie Anmeldeinformationen auf sichere Weise speichern oder auf Speicherkonten zugreifen können.

Verwenden Sie verwaltete Identität, anstatt Verbindungszeichenfolge oder Schlüssel in Ihrer Anwendung zu verwenden, da sie sicherer ist und die Probleme beim Verwalten von geheimen Schlüsseln und Anmeldeinformationen speichert. In diesem Fall ist es besser, DefaultAzureCredential das Szenario der lokalen Entwicklung mithilfe von lokal gespeicherten Kontoinformationen zu entwickeln und dann die Anwendung in Azure Cloud bereitzustellen und verwaltete Identität zu verwenden.

Verwaltete Identitätstypen

Es gibt zwei Arten von verwalteten Identitäten:

  • vom System zugewiesenen – Einige Azure-Dienste ermöglichen es Ihnen, eine verwaltete Identität direkt in einer Dienstinstanz zu aktivieren. Wenn Sie eine vom System zugewiesene verwaltete Identität aktivieren, erstellen Sie eine Identität in Microsoft Entra, die an den Lebenszyklus dieser Dienstinstanz gebunden ist. Wenn Sie die Ressource löschen, löscht Azure die Identität automatisch für Sie. Standardmäßig kann nur diese Azure-Ressource diese Identität verwenden, um Token von Der Microsoft Entra-ID anzufordern.
  • Vom Benutzer zugewiesen – Sie können auch eine verwaltete Identität als eigenständige Azure Ressource erstellen. Sie können eine vom Benutzer zugewiesene verwaltete Identität erstellen und sie einer oder mehreren Instanzen eines Azure-Diensts zuweisen. Mit vom Benutzer zugewiesenen verwalteten Identitäten verwalten Sie die Identität getrennt von den Ressourcen, die sie verwenden.

Anmerkung

Wenn Sie eine vom Benutzer zugewiesene verwaltete Identität verwenden, geben Sie die Client-ID über spring.cloud.azure.credential.client-id oder spring.cloud.azure.<azure-service>.credential.client-id. Sie benötigen keine Konfiguration für Anmeldeinformationen, wenn Sie eine vom System zugewiesene verwaltete Identität verwenden.

Trinkgeld

Um auf die Azure-Ressource zuzugreifen, stellen Sie sicher, dass der Sicherheitsprinzipal über ausreichende Berechtigungen verfügt. Weitere Informationen finden Sie unter Autorisieren des Zugriffs mit microsoft Entra ID.

Weitere Informationen zu verwalteter Identität finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.

Andere Anmeldeinformationstypen

Wenn Sie mehr Kontrolle als die von Ihnen bereitgestellten DefaultAzureCredentialElemente wünschen oder die Standardeinstellungen Ihr Szenario nicht unterstützen, verwenden Sie andere Anmeldeinformationstypen.

Authentifizieren mit Der Microsoft Entra-ID

Wenn Sie Anwendungen mit Ressourcen verbinden möchten, die Microsoft Entra Authentifizierung unterstützen, legen Sie die folgenden Konfigurationen mit dem Präfix oder dem Präfix spring.cloud.azure.credential festspring.cloud.azure.<azure-service>.credential.

In der folgenden Tabelle sind die Authentifizierungseigenschaften aufgeführt:

Eigentum Beschreibung
client-id Die Client-ID, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
client-secret Der geheime Clientschlüssel, der beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
client-certificate-path Pfad einer PEM-Zertifikatdatei, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
client-certificate-password Das Kennwort der Zertifikatdatei.
username Der Benutzername, der bei der Authentifizierung mit Benutzername/Kennwort bei Azure verwendet werden soll.
password Das Kennwort, das beim Ausführen der Authentifizierung mit Benutzername/Kennwort mit Azure verwendet werden soll.
managed-identity-enabled Gibt an, ob verwaltete Identität aktiviert werden soll.
token-credential-bean-name Der Bohnenname des Typs TokenCredential, der beim Ausführen der Authentifizierung mit Azure verwendet werden soll.

Trinkgeld

Eine Liste aller Spring Cloud Azure-Konfigurationseigenschaften finden Sie unter Spring Cloud Azure-Konfigurationseigenschaften.

Die Anwendung sucht an mehreren Stellen nach verfügbaren Anmeldeinformationen. Jede Azure SDK Client-Generator-Factory übernimmt zuerst einen benutzerdefinierten Strich vom TypTokenCredential, wenn Sie die Eigenschaft token-credential-bean-nameangeben, und fällt auf die Verwendung DefaultAzureCredential zurück, wenn Sie keine Anmeldeinformationseigenschaften konfigurieren.

Authentifizieren mithilfe einer benutzerdefinierten TokenCredential Bean

Das folgende Beispiel zeigt, wie Sie eine benutzerdefinierte TokenCredential Bohnen definieren, um die Authentifizierung auszuführen:

@Bean
TokenCredential myTokenCredential() {
    // Your concrete TokenCredential instance
}
spring.cloud.azure:
  credential:
    token-credential-bean-name: myTokenCredential

Authentifizieren mithilfe einer vom System zugewiesenen verwalteten Identität

Das folgende Beispiel zeigt, wie Sie sich mithilfe einer vom System zugewiesenen verwalteten Identität authentifizieren:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true

Authentifizieren mithilfe einer vom Benutzer zugewiesenen verwalteten Identität

Das folgende Beispiel zeigt, wie Sie sich mithilfe einer vom Benutzer zugewiesenen verwalteten Identität authentifizieren:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
    client-id: ${AZURE_CLIENT_ID}

Authentifizieren mithilfe eines Dienstprinzipals mit geheimem Clientschlüssel

Das folgende Beispiel zeigt, wie Sie sich mithilfe eines Dienstprinzipals mit einem geheimen Clientschlüssel authentifizieren:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-secret: ${AZURE_CLIENT_SECRET}
  profile:
    tenant-id: <tenant>

Anmerkung

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Verwendung des falschen Endpunkts (persönliche und Organisationskonten) Abschnitt Fehler-AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten-nicht vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in multitenant auf Microsoft Entra ID.

Authentifizieren mithilfe eines Dienstprinzipals mit Clientzertifikat

Das folgende Beispiel zeigt, wie Sie sich mithilfe eines Dienstprinzipals mit einem PFX-Clientzertifikat authentifizieren:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
    client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
  profile:
    tenant-id: <tenant>

Anmerkung

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Verwendung des falschen Endpunkts (persönliche und Organisationskonten) Abschnitt Fehler-AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten-nicht vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in multitenant auf Microsoft Entra ID.

Das folgende Beispiel zeigt, wie Sie sich mithilfe eines Dienstprinzipals mit einem Client-PEM-Zertifikat authentifizieren:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
  profile:
    tenant-id: <tenant>

Anmerkung

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Verwendung des falschen Endpunkts (persönliche und Organisationskonten) Abschnitt Fehler-AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten-nicht vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in multitenant auf Microsoft Entra ID.

Authentifizieren mithilfe von Benutzeranmeldeinformationen

Das folgende Beispiel zeigt, wie Sie sich mithilfe einer Benutzeranmeldeinformationen authentifizieren:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    username: ${AZURE_USER_USERNAME}
    password: ${AZURE_USER_PASSWORD}

Authentifizieren eines Diensts mithilfe einer anderen Anmeldeinformationen von anderen

Das folgende Beispiel zeigt, wie Sie sich mit Key Vault mithilfe eines anderen Dienstprinzipals authentifizieren. In diesem Beispiel wird die Anwendung mit zwei Anmeldeinformationen konfiguriert: eine vom System zugewiesene verwaltete Identität und ein Dienstprinzipal. Der Key Vault Secret-Client verwendet den Dienstprinzipal, aber alle anderen Komponenten verwenden stattdessen verwaltete Identität.

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
  keyvault.secret:
    credential:
      client-id: ${AZURE_CLIENT_ID}
      client-secret: ${AZURE_CLIENT_SECRET}
    profile:
      tenant-id: <tenant>

Anmerkung

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Verwendung des falschen Endpunkts (persönliche und Organisationskonten) Abschnitt Fehler-AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten-nicht vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in multitenant auf Microsoft Entra ID.

Autorisieren des Zugriffs mit der Microsoft Entra-ID

Der Autorisierungsschritt erfordert das Zuweisen einer oder mehrerer Azure Rollen zum Sicherheitsprinzipal. Die Rollen, die Sie einem Sicherheitsprinzipal zuweisen, bestimmen die Berechtigungen, über die der Prinzipal verfügt.

Trinkgeld

Die Liste aller integrierten Azure-Rollen finden Sie unter integrierten Azure-Rollen.

In der folgenden Tabelle sind die integrierten Azure-Rollen für die Autorisierung des Zugriffs auf Azure-Dienste aufgeführt, die in Spring Cloud Azure unterstützt werden:

Rolle Beschreibung
App-Konfigurationsdatenbesitzer Ermöglicht vollzugriff auf App-Konfigurationsdaten.
App-Konfigurationsdatenleser Ermöglicht lesezugriff auf App-Konfigurationsdaten.
Azure Event Hubs-Datenbesitzer Ermöglicht vollzugriff auf Azure Event Hubs-Ressourcen.
Azure Event Hubs-Datenempfänger Ermöglicht den Zugriff auf Azure Event Hubs-Ressourcen.
Azure Event Hubs-Datensender Ermöglicht das Senden des Zugriffs auf Azure Event Hubs-Ressourcen.
Besitzer von Azure Service Bus-Daten Ermöglicht vollzugriff auf Azure Service Bus-Ressourcen.
Azure Service Bus-Datenempfänger Ermöglicht den Zugriff auf Azure Service Bus-Ressourcen.
Azure Service Bus-Datensender Ermöglicht das Senden des Zugriffs auf Azure Service Bus-Ressourcen.
des Speicherblobdatenbesitzers Bietet vollzugriff auf Azure Storage-BLOB-Container und -Daten, einschließlich des Zuweisens der POSIX-Zugriffssteuerung.
Lesen und Auflisten von Azure Storage-Containern und Blobs.
des Speicherwarteschlangen-Datenlesers Lesen und Auflisten von Azure Storage-Warteschlangen und Warteschlangennachrichten.
Redis Cache-Mitwirkender Verwalten von Redis-Caches.

Anmerkung

Wenn Sie Spring Cloud Azure Resource Manager verwenden, um die Verbindungszeichenfolgen für Event Hubs, Service Bus und Speicherwarteschlange oder die Eigenschaften von Cache für Redis abzurufen, weisen Sie die Azure integrierte Rolle Contributorzu. Azure Cache for Redis ist besonders, und Sie können auch die rolle Redis Cache Contributor zuweisen, um die Redis-Eigenschaften abzurufen.

Anmerkung

Eine Key Vault Zugriffsrichtlinie bestimmt, ob ein bestimmter Sicherheitsprinzipal, nämlich ein Benutzer, eine Anwendung oder eine Benutzergruppe, unterschiedliche Vorgänge für Key Vault Geheimschlüssel, Schlüssel und Zertifikate ausführen kann. Sie können Zugriffsrichtlinien mithilfe des Azure Portals, der Azure CLI oder Azure PowerShell zuweisen. Weitere Informationen finden Sie unter Zuweisen einer Zugriffsrichtlinie für den Schlüsseltresor.

Wichtig

Azure Cosmos DB macht zwei integrierte Rollendefinitionen verfügbar: Cosmos DB Built-in Data Reader und Cosmos DB Built-in Data Contributor. Die Unterstützung des Azure-Portals für die Rollenverwaltung ist jedoch noch nicht verfügbar. Weitere Informationen zum Berechtigungsmodell, Rollendefinitionen und Rollenzuweisung finden Sie unter Konfigurieren der rollenbasierten Zugriffssteuerung mit Microsoft Entra ID für Ihr Azure Cosmos DB-Konto.

Authentifizieren mithilfe von SAS-Token

Sie können dienste auch für die Authentifizierung konfigurieren, indem Sie die Freigegebene Zugriffssignatur (Shared Access Signature, SAS) verwenden. Verwenden Sie die spring.cloud.azure.<azure-service>.sas-token Eigenschaft, um diese Authentifizierung zu konfigurieren. Verwenden Sie spring.cloud.azure.storage.blob.sas-token z. B. die Authentifizierung beim Storage Blob-Dienst.

Authentifizieren mithilfe von Verbindungszeichenfolgen

Einige Azure Dienste unterstützen Verbindungszeichenfolgen, um Verbindungsinformationen und Anmeldeinformationen bereitzustellen. Um mithilfe von Verbindungszeichenfolgen eine Verbindung mit diesen Azure Diensten herzustellen, konfigurieren Sie spring.cloud.azure.<azure-service>.connection-string. Konfigurieren Sie z. B. spring.cloud.azure.eventhubs.connection-string, um eine Verbindung mit dem Event Hubs-Dienst herzustellen.