Azure-Authentifizierung mit dem Azure Identity-Modul für Go
In diesem Lernprogramm wird der DefaultAzureCredential-Typ aus dem Azure Identity-Modul für Go verwendet, um sich bei Azure zu authentifizieren. Das Azure Identity-Modul bietet mehrere Anmeldeinformationstypen, die sich auf OAuth mit Microsoft Entra ID konzentrieren.
DefaultAzureCredential
vereinfacht die Authentifizierung, indem häufig verwendete Anmeldeinformationstypen kombiniert werden. Sie verkettet Anmeldeinformationstypen, die zum Authentifizieren von Azure bereitgestellten Anwendungen mit Anmeldeinformationstypen verwendet werden, die für die Authentifizierung in einer Entwicklungsumgebung verwendet werden.
Voraussetzungen
- Azure-Abonnement: Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
- Installation von Go: Version 1.18 oder höher
1. Installieren des Azure-Identitätsmoduls für Go
Führen Sie den folgenden Befehl aus, um das Modul azidentity herunterzuladen:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
2. Authentifizieren bei Azure
Verwenden Sie DefaultAzureCredential
, um sich mit einer der folgenden Methoden bei Azure zu authentifizieren:
- Option 1: Definieren von Umgebungsvariablen
- Option 2: Verwenden der Workloadidentität
- Option 3: Verwenden einer verwalteten Identität
- Option 4: Anmelden mit Azure CLI
Weitere Informationen zu den verschiedenen Anmeldeinformationstypen finden Sie unter Authentifizierungsmethoden im Azure SDK für Go.
Option 1: Definieren von Umgebungsvariablen
DefaultAzureCredential
nutzt den Typ EnvironmentCredential
, um die Authentifizierung mit Umgebungsvariablen zu konfigurieren, die drei Authentifizierungstypen unterstützt. Wählen Sie zwischen den folgenden Authentifizierungstypen, und definieren Sie die entsprechenden Umgebungsvariablen.
Dienstprinzipal mit Geheimnis
Variablenname | Wert |
---|---|
AZURE_CLIENT_ID |
Anwendungs-ID eines Azure-Dienstprinzipals |
AZURE_TENANT_ID |
ID des Microsoft Entra-Mandanten der Anwendung |
AZURE_CLIENT_SECRET |
Kennwort des Azure-Dienstprinzipals |
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Dienstprinzipal mit Zertifikat
Variablenname | Wert |
---|---|
AZURE_CLIENT_ID |
ID einer Microsoft Entra-Anwendung |
AZURE_TENANT_ID |
ID des Microsoft Entra-Mandanten der Anwendung |
AZURE_CLIENT_CERTIFICATE_PATH |
Pfad zu einer Zertifikatdatei einschließlich privatem Schlüssel (ohne Kennwortschutz) |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Benutzername und Kennwort
Variablenname | Wert |
---|---|
AZURE_CLIENT_ID |
ID einer Microsoft Entra-Anwendung |
AZURE_USERNAME |
Ein Benutzername (normalerweise eine E-Mail-Adresse) |
AZURE_PASSWORD |
Das Kennwort des Benutzers |
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"
Die Konfiguration wird in der vorherigen Reihenfolge versucht. Wenn zum Beispiel sowohl Werte für ein Clientgeheimnis als auch für ein Zertifikat vorhanden sind, wird das Clientgeheimnis verwendet.
Option 2: Verwenden der Workload-Identität
Die Microsoft Entra Workload-ID ermöglicht Pods in einem Kubernetes-Cluster die Verwendung einer Kubernetes-Identität (Dienstkonto). Ein Kubernetes-Token wird ausgegeben, und der OIDC-Partnerverbund ermöglicht Kubernetes-Anwendungen den sicheren Zugriff auf Azure-Ressourcen mit Microsoft Entra ID.
Wenn die erforderlichen Umgebungsvariablen EnvironmentCredential
nicht vorhanden sind, wird versucht, DefaultAzureCredential
sich mit WorkloadIdentityCredential zu authentifizieren. WorkloadIdentityCredential
versucht, die Dienstprinzipalkonfiguration aus Umgebungsvariablen zu lesen, die vom Workload Identity-Webhook festgelegt sind.
Option 3: Verwenden einer verwalteten Identität
Dank verwalteter Identitäten müssen Entwickler keine Anmeldeinformationen mehr verwalten. Durch die Verbindung mit Ressourcen, die die Microsoft Entra-Authentifizierung unterstützen, können Anwendungen Microsoft Entra-Token anstelle von Anmeldeinformationen verwenden.
Wenn die erforderlichen Umgebungsvariablen WorkloadIdentityCredential
nicht vorhanden sind, wird versucht, DefaultAzureCredential
sich mit ManagedIdentityCredential zu authentifizieren.
Wenn Sie eine vom Benutzer zugewiesene verwaltete Identität verwenden, führen Sie den folgenden Befehl aus, um die AZURE_CLIENT_ID
Umgebungsvariable festzulegen.
export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"
Option 4: Anmelden mit Azure CLI
Um die Reibung bei der lokalen Entwicklung zu verringern, kann sich der Benutzer authentifizieren, DefaultAzureCredential
der bei der Azure CLI angemeldet ist.
Führen Sie den folgenden Befehl aus, um sich bei der Azure CLI anzumelden:
az login
Die Azure CLI-Authentifizierung wird für Anwendungen, die in Azure ausgeführt werden, nicht empfohlen.
3. Verwenden von DefaultAzureCredential zum Authentifizieren von ResourceClient
Erstellen Sie ein neues Go-Beispielmodul mit dem Namen azure-auth
zum Testen der Authentifizierung bei Azure mit DefaultAzureCredential
:
Erstellen Sie ein Verzeichnis zum Testen und Ausführen des Go-Beispielcodes, und wechseln Sie dann in dieses Verzeichnis.
Führen Sie "Go mod init " aus, um ein Modul zu erstellen:
go mod init azure-auth
Führen Sie die Schritte aus, um das erforderliche Azure SDK für Go-Module herunterzuladen, zu erstellen und zu installieren:
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
Erstellen Sie eine Datei namens
main.go
, und fügen Sie den folgenden Code ein:package main import ( "context" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" ) const subscriptionID = "<subscription ID>" func main() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { // TODO: handle error } // Azure SDK Resource Management clients accept the credential as a parameter. // The client will authenticate with the credential as necessary. client, err := armsubscription.NewSubscriptionsClient(cred, nil) if err != nil { // TODO: handle error } _, err = client.Get(context.TODO(), subscriptionID, nil) if err != nil { // TODO: handle error } }
Ersetzen Sie
<subscription ID>
durch Ihre Abonnement-ID.Führen Sie den Befehl
go run
aus, um die Anwendung zu erstellen und auszuführen:go run .
Authentifizieren bei Azure mit DefaultAzureCredential
Verwenden Sie den folgenden Code in Ihrer Anwendung, um sich bei Azure mit dem Azure Identity-Modul zu authentifizieren:DefaultAzureCredential
// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
// handle error
}
Problembehandlung
Anleitungen zum Beheben von Fehlern aus bestimmten Anmeldeinformationstypen finden Sie im Handbuch zur Problembehandlung.
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für