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:

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:

  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 .
    

    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.

Nächste Schritte