Authentifizierung mit dem Azure SDK für Go (Legacy)

Wichtig

Dieser Artikel bezieht sich auf die Ältere Version des Azure SDK für Go. Für die Authentifizierung für die neuesten Module verwenden Sie das Azure Identity-Paket .

Das Azure SDK für Go bietet mehrere Möglichkeiten für die Authentifizierung über Azure. Diese Authentifizierungsarten können mit verschiedenen Authentifizierungsmethoden aufgerufen werden. Dieser Artikel behandelt die verfügbaren Typen und Methoden und unterstützt Sie bei der Wahl der optimalen Typen und Methoden für Ihre Anwendung.

Verfügbare Authentifizierungsarten und -methoden

Das Azure SDK für Go bietet verschiedene Authentifizierungsarten mit unterschiedlichen Anmeldeinformationen. Alle Authentifizierungsarten können jeweils über verschiedene Authentifizierungsmethoden verwendet werden, die dazu dienen, die Anmeldeinformationen als Eingabe an das SDK zu übergeben. Die folgende Tabelle enthält Informationen zu den verfügbaren Authentifizierungsarten sowie Verwendungsempfehlungen:

Authentifizierungstyp Verwendungsempfehlung
Zertifikatbasierte Authentifizierung Sie verfügen über ein X509-Zertifikat, das für einen Microsoft Entra-Benutzer oder Dienstprinzipal konfiguriert wurde. Weitere Informationen finden Sie unter "Erste Schritte mit zertifikatbasierter Authentifizierung" in der Microsoft Entra-ID.
Clientanmeldeinformationen Sie verfügen über einen konfigurierten Dienstprinzipal, der für diese Anwendung oder für eine Klasse von Anwendungen konfiguriert ist, der sie angehört. Weitere Informationen finden Sie unter Erstellen eines Azure-Dienstprinzipals mit Azure CLI.
Verwaltete Identitäten für Azure-Ressourcen Ihre Anwendung wird auf einer Azure-Ressource ausgeführt, die mit einer verwalteten Identität konfiguriert wurde. Weitere Informationen finden Sie unter What is managed identities for Azure resources? (Worum handelt es sich bei verwalteten Identitäten für Azure-Ressourcen?).
Gerätetoken Ihre Anwendung ist nur für die interaktive Verwendung vorgesehen. Benutzer haben möglicherweise eine mehrstufige Authentifizierung aktiviert. Benutzer können sich über einen Webbrowser anmelden. Weitere Informationen finden Sie unter Verwenden der Gerätetokenauthentifizierung.
Benutzername/Kennwort Sie verfügen über eine interaktive Anwendung, die keine andere Authentifizierungsmethode verwenden kann. Ihre Benutzer haben keine mehrstufige Authentifizierung für ihre Microsoft Entra-Anmeldung aktiviert.

Wesentliche Punkte

  • Wenn Sie einen anderen Authentifizierungstyp als Clientanmeldeinformationen verwenden, muss Ihre Anwendung in der Microsoft Entra-ID registriert sein. Informationen dazu finden Sie unter "Integrieren von Anwendungen mit Microsoft Entra ID".
  • Verwenden Sie die Authentifizierung mit Benutzername/Kennwort nur, wenn dies zur Erfüllung besonderer Anforderungen erforderlich ist. In Situationen, in denen die benutzerbasierte Anmeldung geeignet ist, kann stattdessen die Gerätetokenauthentifizierung verwendet werden.

Diese Authentifizierungsarten können mit verschiedenen Methoden verwendet werden.

Alle Authentifizierungsfunktionen und -typen sind im github.com/Azure/go-autorest/autorest/azure/auth Paket verfügbar.

Hinweis

Verwenden Sie die clientbasierte Authentifizierung nur, wenn dies zur Erfüllung besonderer Anforderungen erforderlich ist. Diese Authentifizierungsmethode verleitet zu nicht empfehlenswerten Vorgehensweisen. Dazu zählt in erster Linie die Verwendung hartcodierter Anmeldeinformationen. Bei benutzerdefiniertem Code für die Authentifizierung besteht die Gefahr, dass er in späteren SDK-Versionen nicht mehr funktioniert, falls sich die Authentifizierungsanforderungen ändern.

Verwenden der umgebungsbasierten Authentifizierung

Wenn Sie Ihre Anwendung in einer kontrollierten Umgebung ausführen, ist die umgebungsbasierte Authentifizierung eine naheliegende Option. Bei dieser Authentifizierungsmethode konfigurieren Sie die Shell-Umgebung vor dem Ausführen Ihrer Anwendung. Zur Laufzeit liest das Go SDK diese Umgebungsvariablen für die Authentifizierung bei Azure.

Die umgebungsbasierte Authentifizierung unterstützt alle Authentifizierungstypen mit Ausnahme von Gerätetoken, die in der folgenden Reihenfolge ausgewertet werden:

  • Clientanmeldeinformationen
  • Zertifikatbasierte Authentifizierung
  • Benutzername/Kennwort
  • Verwaltete Identitäten für Azure-Ressourcen

Sind für einen Authentifizierungstyp keine Werte festgelegt oder wird der Authentifizierungstyp verweigert, probiert das SDK automatisch den nächsten Authentifizierungstyp aus. Wenn keine weitere Typen mehr übrig sind, gibt das SDK einen Fehler zurück.

Die folgende Tabelle gibt Aufschluss über die Umgebungsvariablen, die für die einzelnen Authentifizierungsarten festgelegt werden müssen, die von der umgebungsbasierten Authentifizierung unterstützt werden.

Authentifizierungstyp Umgebungsvariable Beschreibung
Clientanmeldeinformationen AZURE_TENANT_ID Die ID für den Active Directory-Mandanten, zu dem der Dienstprinzipal gehört.
AZURE_CLIENT_ID Der Name oder die ID des Dienstprinzipals.
AZURE_CLIENT_SECRET Das dem Dienstprinzipal zugeordnete Geheimnis
Certificate AZURE_TENANT_ID Die ID für den Active Directory-Mandanten, bei dem das Zertifikat registriert ist.
AZURE_CLIENT_ID Die dem Zertifikat zugeordnete Anwendungsclient-ID.
AZURE_CERTIFICATE_PATH Der Pfad der Clientzertifikatdatei.
AZURE_CERTIFICATE_PASSWORD Das Kennwort für das Clientzertifikat.
Benutzername/Kennwort AZURE_TENANT_ID Die ID für den Active Directory-Mandanten, zu dem der Benutzer gehört.
AZURE_CLIENT_ID Die Anwendungsclient-ID.
AZURE_USERNAME Der Benutzername für die Anmeldung.
AZURE_PASSWORD Das Kennwort für die Anmeldung.
Verwaltete Identität Für die Authentifizierung der verwalteten Identität sind keine Anmeldeinformationen erforderlich. Die Anwendung muss auf einer Azure-Ressource ausgeführt werden, die für die Verwendung von verwalteten Identitäten konfiguriert ist. Ausführliche Informationen finden Sie unter What is managed identities for Azure resources? (Worum handelt es sich bei verwalteten Identitäten für Azure-Ressourcen?).

Wenn Sie eine Verbindung mit einem Cloud- oder Verwaltungsendpunkt herstellen möchten, bei dem es sich nicht um die standardmäßige öffentliche Azure-Cloud handelt, legen Sie die folgenden Umgebungsvariablen fest. Diese werden häufig bei Verwendung von Azure Stack, bei Verwendung einer Cloud in einer anderen geografischen Region oder bei Verwendung des klassischen Bereitstellungsmodells festgelegt.

Umgebungsvariable Beschreibung
AZURE_ENVIRONMENT Der Name der Cloudumgebung, mit der eine Verbindung hergestellt werden soll.
AZURE_AD_RESOURCE Die Active Directory-Ressourcen-ID, die beim Herstellen einer Verbindung mit dem Verwaltungsendpunkt als URI verwendet wird

Rufen Sie bei Verwendung der umgebungsbasierten Authentifizierung die Funktion NewAuthorizerFromEnvironment auf, um Ihr Authorizer-Objekt abzurufen. Dieses Objekt wird dann für die Eigenschaft Authorizer von Clients festgelegt, um ihnen den Zugriff auf Azure zu ermöglichen.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()

Authentifizierung in Azure Stack

Für die Authentifizierung in Azure Stack müssen Sie die folgenden Variablen festlegen:

Umgebungsvariable Beschreibung
AZURE_AD_ENDPOINT Active Directory-Endpunkt
AZURE_AD_RESOURCE Active Directory-Ressourcen-ID

Diese Variablen können aus den Azure Stack-Metadateninformationen abgerufen werden. Öffnen Sie zum Abrufen der Metadaten einen Webbrowser in Ihrer Azure Stack-Umgebung, und geben Sie die folgende URL ein: (ResourceManagerURL)/metadata/endpoints?api-version=1.0.

ResourceManagerURL variiert basierend auf dem Regionsnamen, dem Computernamen und dem externen vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) der Azure Stack-Bereitstellung:

Environment ResourceManagerURL
Development Kit https://management.local.azurestack.external/
Integrierte Systeme https://management.(region).ext-(machine-name).(FQDN)

Weitere Informationen zur Verwendung des Azure SDK für Go in Azure Stack finden Sie unter Verwenden von API-Versionsprofilen mit Go in Azure Stack.

Verwenden der dateibasierten Authentifizierung

Bei der dateibasierten Authentifizierung wird ein von der Azure CLI generiertes Dateiformat verwendet. Diese Datei können Sie im Rahmen der Erstellung eines neuen Dienstprinzipals ganz einfach mit dem Parameter --sdk-auth erstellen. Wenn Sie die dateibasierte Authentifizierung verwenden möchten, achten Sie darauf, dass dieses Argument bei der Dienstprinzipalerstellung angegeben ist. Da die CLI-Ausgabe in stdout erfolgt, leiten Sie die Ausgabe in eine Datei um.

az ad sp create-for-rbac --role Contributor \
    --scopes /subscriptions/<subscription_id> \
    --sdk-auth > azure.auth

Legen Sie die Umgebungsvariable AZURE_AUTH_LOCATION auf den Speicherort der Autorisierungsdatei fest. Diese Umgebungsvariable wird von der Anwendung gelesen, und die darin enthaltenen Anmeldeinformationen werden analysiert. Wenn Sie die Autorisierungsdatei zur Laufzeit auswählen müssen, bearbeiten Sie die Programmumgebung mithilfe der Funktion os.Setenv.

Rufen Sie zum Laden der Authentifizierungsinformationen die Funktion NewAuthorizerFromFile auf. Im Gegensatz zur umgebungsbasierten Autorisierung benötigt die dateibasierte Autorisierung einen Ressourcenendpunkt.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)

Weitere Informationen zur Verwendung von Dienstprinzipalen sowie zur Verwaltung ihrer Zugriffsberechtigungen finden Sie unter Erstellen eines Azure-Dienstprinzipals mit Azure CLI.

Verwenden der Gerätetokenauthentifizierung

Wenn sich Benutzer interaktiv anmelden sollen, empfiehlt sich die Verwendung der Gerätetokenauthentifizierung. Dieser Authentifizierungsfluss übergibt dem Benutzer ein Token, um es in eine Microsoft-Anmeldewebsite einzufügen, bei der er sich dann mit einem Microsoft Entra-Konto authentifiziert. Diese Authentifizierungsmethode unterstützt Konten mit aktivierter mehrstufiger Authentifizierung, im Gegensatz zur standardmäßigen Benutzernamen-/Kennwortauthentifizierung.

Erstellen Sie zur Verwendung der Gerätetokenauthentifizierung mithilfe der Funktion NewDeviceFlowConfig ein Authorizer-Objekt vom Typ DeviceFlowConfig. Rufen Sie Authorizer für das resultierende Objekt auf, um den Authentifizierungsprozess zu starten. Die Geräteauthentifizierung blockiert die Programmausführung, bis der gesamte Authentifizierungsablauf abgeschlossen ist.

import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()

Verwenden eines Authentifizierungsclients

Wenn Sie eine bestimmte Art von Authentifizierung benötigen und das Laden der Authentifizierungsinformationen des Benutzers Ihrem Programm überlassen möchten, können Sie einen beliebigen Client verwenden, der mit der Schnittstelle auth.AuthorizerConfig kompatibel ist. Verwenden Sie einen Typ, der diese Schnittstelle in den folgenden Fällen implementiert:

  • Schreiben eines interaktiven Programms
  • Verwenden spezieller Konfigurationsdateien
  • Anforderung, die die Verwendung einer integrierten Authentifizierungsmethode verhindert

Warnung

Verwenden Sie in einer Anwendung niemals hartcodierte Azure-Anmeldeinformationen. In der Binärdatei einer Anwendung enthaltene Geheimnisse können von Angreifern leichter extrahiert werden. Dabei spielt es keine Rolle, ob die Anwendung ausgeführt wird oder nicht. Dies gefährdet alle Azure-Ressourcen, für die die Anmeldeinformationen autorisiert sind.

Die folgende Tabelle enthält die mit der Schnittstelle AuthorizerConfig kompatiblen Arten aus dem SDK.

Authentifizierungstyp Authorizer-Typ
Zertifikatbasierte Authentifizierung ClientCertificateConfig
Clientanmeldeinformationen ClientCredentialsConfig
Verwaltete Identitäten für Azure-Ressourcen MSIConfig
Benutzername/Kennwort UsernamePasswordConfig

Erstellen Sie einen Authentifikator mit der entsprechenden New-Funktion, und rufen Sie dann Authorize für das resultierende Objekt auf, um die Authentifizierung durchzuführen. Beispiel für die zertifikatbasierte Authentifizierung:

import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorizer()

Nächste Schritte