Azure-autentisering med Azure Identity-modulen för Go

I den här självstudien används typen DefaultAzureCredential från Azure Identity-modulen för Go för att autentisera till Azure. Azure Identity-modulen erbjuder flera typer av autentiseringsuppgifter som fokuserar på OAuth med Microsoft Entra-ID.

DefaultAzureCredential förenklar autentiseringen genom att kombinera vanliga typer av autentiseringsuppgifter. Den kedjar typer av autentiseringsuppgifter som används för att autentisera Azure-distribuerade program med autentiseringstyper som används för att autentisera i en utvecklingsmiljö.

Förutsättningar

  • Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
  • Go installerat: Version 1.18 eller senare

1. Installera Azure Identity-modulen för Go

Kör följande kommando för att ladda ned azidentity-modulen :

go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity

2. Autentisera med Azure

Använd för att autentisera DefaultAzureCredential till Azure med någon av följande tekniker:

Mer information om de olika typerna av autentiseringsuppgifter finns i typer av autentiseringsuppgifter.

Alternativ 1: Definiera miljövariabler

DefaultAzureCredential Använder typen EnvironmentCredential för att konfigurera autentisering med hjälp av miljövariabler som stöder tre autentiseringstyper. Välj mellan följande autentiseringstyper och definiera lämpliga miljövariabler.

Tjänstens huvudnamn med en hemlighet

Variabelnamn Värde
AZURE_CLIENT_ID Program-ID för ett Huvudnamn för Azure-tjänsten
AZURE_TENANT_ID ID för programmets Microsoft Entra-klientorganisation
AZURE_CLIENT_SECRET Lösenord för Azure-tjänstens huvudnamn
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"

Tjänstens huvudnamn med certifikat

Variabelnamn Värde
AZURE_CLIENT_ID ID för ett Microsoft Entra-program
AZURE_TENANT_ID ID för programmets Microsoft Entra-klientorganisation
AZURE_CLIENT_CERTIFICATE_PATH Sökväg till en certifikatfil inklusive privat nyckel (utan lösenordsskydd)
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"

Användarnamn och lösenord

Variabelnamn Värde
AZURE_CLIENT_ID ID för ett Microsoft Entra-program
AZURE_USERNAME Ett användarnamn (vanligtvis en e-postadress)
AZURE_PASSWORD Användarens lösenord
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"

Konfigurationen görs i föregående ordning. Om det till exempel finns både värden för en klienthemlighet och ett certifikat används klienthemligheten.

Alternativ 2: Använd arbetsbelastningsidentitet

Med Microsoft Entra-arbetsbelastnings-ID kan poddar i ett Kubernetes-kluster använda en Kubernetes-identitet (tjänstkonto). En Kubernetes-token utfärdas och OIDC-federation gör det möjligt för Kubernetes-program att komma åt Azure-resurser på ett säkert sätt med Microsoft Entra-ID.

Om de miljövariabler som krävs för EnvironmentCredential inte finns DefaultAzureCredential försöker du autentisera med Hjälp av WorkloadIdentityCredential. WorkloadIdentityCredential försöker läsa konfigurationen av tjänstens huvudnamn från miljövariabler som angetts av webhooken Arbetsbelastningsidentitet.

Alternativ 3: Använda en hanterad identitet

Med hanterade identiteter behöver inte utvecklare hantera autentiseringsuppgifter. Genom att ansluta till resurser som stöder Microsoft Entra-autentisering kan program använda Microsoft Entra-token i stället för autentiseringsuppgifter.

Om de miljövariabler som krävs för WorkloadIdentityCredential inte finns DefaultAzureCredential försöker du autentisera med ManagedIdentityCredential.

Om du använder en användartilldelad hanterad identitet kör du följande kommando för att ange AZURE_CLIENT_ID miljövariabeln.

export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"

Alternativ 4: Logga in med Azure CLI

För att minska friktionen i den lokala utvecklingen DefaultAzureCredential kan du autentisera när användaren är inloggad i Azure CLI.

Kör följande kommando för att logga in på Azure CLI:

az login

Azure CLI-autentisering rekommenderas inte för program som körs i Azure.

3. Använd DefaultAzureCredential för att autentisera ResourceClient

Skapa en ny Go-exempelmodul med namnet azure-auth för att testa autentisering till Azure med DefaultAzureCredential:

  1. Skapa en katalog för att testa och köra Go-exempelkoden och ändra sedan till katalogen.

  2. Kör go mod init för att skapa en modul:

    go mod init azure-auth
    
  3. Kör gå och hämta för att ladda ned, skapa och installera nödvändiga Azure SDK för Go-moduler:

    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. Skapa en fil med namnet main.go och infoga följande kod:

    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
      }
    }   
    
    

    Ersätt <subscription ID> med ditt prenumerations-ID.

  5. Kör go run för att skapa och köra programmet:

    go run .
    

Autentisera till Azure med DefaultAzureCredential

Använd följande kod i programmet för att autentisera till Azure med Azure Identity-modulen med :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
}

Felsökning

Information om hur du löser fel från specifika typer av autentiseringsuppgifter finns i felsökningsguiden.

Nästa steg