Dela via


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 DefaultAzureCredential för att autentisera 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 PEM- eller PKCS12-certifikatfil inklusive privat nyckel
AZURE_CLIENT_CERTIFICATE_PASSWORD (valfritt) Lösenord för certifikatfilen
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. En självstudiekurs från slutpunkt till slutpunkt om autentisering med tjänstens huvudnamn finns i Azure SDK för Go-autentisering med tjänstens huvudnamn.

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. När du ansluter till resurser som stöder Microsoft Entra-autentisering kan program som finns i Azure använda Microsoft Entra-token i stället för autentiseringsuppgifter. Hanterade identiteter stöds inte i lokal utveckling.

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

AZURE_CLIENT_ID Om miljövariabeln inte har angetts DefaultAzureCredentials försöker du autentisera med hjälp av den systemtilldelade hanterade identiteten om en är aktiverad på värdresursen.

En självstudiekurs från slutpunkt till slutpunkt om autentisering med hanterade identiteter i Azure-värdbaserade appar finns i Autentisering med Azure SDK för Go med hjälp av en hanterad identitet.

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

Alternativ 5: Logga in med Azure Developer CLI

Om användaren inte är inloggad i Azure CLI DefaultAzureCredential i lokal utveckling kan den autentiseras när användaren är inloggad i Azure Developer CLI.

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

azd auth login

Azure Developer 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 .
    

    Kommentar

    Om du vill köra som det är i ditt lokala system måste du logga in på Azure med hjälp av Azure CLI eller Azure Developer CLI.

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