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
Wird DefaultAzureCredential
verwendet, um sich bei Azure mit einer der folgenden Techniken 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
- Option 5: Anmelden mit azure Developer 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 PEM- oder PKCS12-Zertifikatdatei einschließlich privatem Schlüssel |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(optional) Kennwort für die Zertifikatdatei |
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. Ein End-to-End-Lernprogramm zur Authentifizierung mit Dienstprinzipalen finden Sie unter Azure SDK für die Go-Authentifizierung mit einem Dienstprinzipal.
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. Beim Herstellen einer Verbindung mit Ressourcen, die die Microsoft Entra-Authentifizierung unterstützen, können in Azure gehostete Anwendungen Microsoft Entra-Token anstelle von Anmeldeinformationen verwenden. Verwaltete Identitäten werden in der lokalen Entwicklung nicht unterstützt.
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>"
Wenn die AZURE_CLIENT_ID
Umgebungsvariable nicht festgelegt ist, wird versucht, die vom System zugewiesene verwaltete Identität zu authentifizieren, DefaultAzureCredentials
wenn eine für die Hostingressource aktiviert ist.
Ein End-to-End-Lernprogramm zur Authentifizierung mit verwalteten Identitäten in in azure-gehosteten Apps finden Sie unter Authentifizierung mit dem Azure SDK für Go mithilfe einer verwalteten Identität.
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
Option 5: Anmelden mit azure Developer CLI
Wenn der Benutzer bei der lokalen Entwicklung nicht bei der Azure CLI angemeldet ist, kann er sich authentifizieren, DefaultAzureCredential
wenn er bei der Azure Developer CLI angemeldet ist.
Führen Sie den folgenden Befehl aus, um sich bei der Azure Developer CLI anzumelden:
azd auth login
Die Azure Developer 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 .
Hinweis
Um as-is auf Ihrem lokalen System auszuführen, müssen Sie sich mit der Azure CLI oder der Azure Developer CLI bei Azure anmelden.
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.