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:
- Alternativ 1: Definiera miljövariabler
- Alternativ 2: Använd arbetsbelastningsidentitet
- Alternativ 3: Använda en hanterad identitet
- Alternativ 4: Logga in med Azure 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 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
:
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 .
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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för