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.
- Bei der umgebungsbasierten Authentifizierung werden die Anmeldeinformationen direkt aus der Umgebung des Programms gelesen.
- Bei der dateibasierten Authentifizierung wird eine Datei mit Dienstprinzipal-Anmeldeinformationen geladen.
- Bei der clientbasierten Authentifizierung wird ein Objekt im Code verwendet, und die Anmeldeinformationen müssen von Ihnen während der Programmausführung angegeben werden.
- Bei der Gerätetokenauthentifizierung müssen sich Benutzer interaktiv mit einem Token über einen Webbrowser anmelden.
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()