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:

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:

  1. Erstellen Sie ein Verzeichnis zum Testen und Ausführen des Go-Beispielcodes, und wechseln Sie dann in dieses Verzeichnis.

  2. Führen Sie "Go mod init " aus, um ein Modul zu erstellen:

    go mod init azure-auth
    
  3. 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"
    
  4. 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.

  5. 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