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:
- Alternativ 1: Definiera miljövariabler
- Alternativ 2: Använd arbetsbelastningsidentitet
- Alternativ 3: Använda en hanterad identitet
- Alternativ 4: Logga in med Azure CLI
- Alternativ 5: Logga in med Azure Developer CLI
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
:
Skapa en katalog för att testa och köra Go-exempelkoden och ändra sedan till katalogen.
Kör go mod init för att skapa en modul:
go mod init azure-auth
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"
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.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.