Autenticazione di Azure con il modulo Azure Identity per Go
In questa esercitazione viene usato il tipo DefaultAzureCredential del modulo Identità di Azure per Go per l'autenticazione in Azure. Il modulo Identità di Azure offre diversi tipi di credenziali incentrati su OAuth con Microsoft Entra ID.
DefaultAzureCredential
semplifica l'autenticazione combinando tipi di credenziali di uso comune. Concatena i tipi di credenziali usati per autenticare le applicazioni distribuite in Azure con tipi di credenziali usati per l'autenticazione in un ambiente di sviluppo.
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- Go installato: versione 1.18 o successiva
1. Installare il modulo Azure Identity per Go
Eseguire il comando seguente per scaricare il modulo azidentity :
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
2. Eseguire l'autenticazione con Azure
Usare DefaultAzureCredential
per eseguire l'autenticazione in Azure con una delle tecniche seguenti:
- Opzione 1: Definire le variabili di ambiente
- Opzione 2: Usare l'identità del carico di lavoro
- Opzione 3: Usare un'identità gestita
- Opzione 4: Accedere con l'interfaccia della riga di comando di Azure
- Opzione 5: Accedere con l'interfaccia della riga di comando per sviluppatori di Azure
Per altre informazioni sui diversi tipi di credenziali, vedere Tipi di credenziali.
Opzione 1: Definire le variabili di ambiente
DefaultAzureCredential
usa il EnvironmentCredential
tipo per configurare l'autenticazione usando variabili di ambiente che supportano tre tipi di autenticazione. Scegliere tra i tipi di autenticazione seguenti e definire le variabili di ambiente appropriate.
Entità servizio con un segreto
Nome variabile | Valore |
---|---|
AZURE_CLIENT_ID |
ID applicazione di un'entità servizio di Azure |
AZURE_TENANT_ID |
ID del tenant Microsoft Entra dell'applicazione |
AZURE_CLIENT_SECRET |
Password dell'entità servizio di Azure |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Entità servizio con certificato
Nome variabile | Valore |
---|---|
AZURE_CLIENT_ID |
ID di un'applicazione Microsoft Entra |
AZURE_TENANT_ID |
ID del tenant Microsoft Entra dell'applicazione |
AZURE_CLIENT_CERTIFICATE_PATH |
Percorso di un file di certificato PEM o PKCS12, inclusa la chiave privata |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(facoltativo) Password per il file di certificato |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Nome utente e password
Nome variabile | Valore |
---|---|
AZURE_CLIENT_ID |
ID di un'applicazione Microsoft Entra |
AZURE_USERNAME |
Un nome utente (in genere un indirizzo di posta elettronica) |
AZURE_PASSWORD |
Password dell'utente |
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"
La configurazione viene tentata nell'ordine precedente. Ad esempio, se i valori per un segreto client e un certificato sono entrambi presenti, viene usato il segreto client. Per un'esercitazione end-to-end sull'autenticazione con le entità servizio, vedere Autenticazione di Azure SDK per Go con un'entità servizio.
Opzione 2: Usare l'identità del carico di lavoro
ID dei carichi di lavoro di Microsoft Entra consente ai pod in un cluster Kubernetes di usare un'identità Kubernetes (account del servizio). Viene rilasciato un token Kubernetes e la federazione OIDC consente alle applicazioni Kubernetes di accedere in modo sicuro alle risorse di Azure con Microsoft Entra ID.
Se le variabili di ambiente necessarie per EnvironmentCredential
non sono presenti, DefaultAzureCredential
tenta di eseguire l'autenticazione usando WorkloadIdentityCredential. WorkloadIdentityCredential
tenta di leggere la configurazione dell'entità servizio dalle variabili di ambiente impostate dal webhook identità del carico di lavoro.
Opzione 3: Usare un'identità gestita
Le identità gestite eliminano la necessità per gli sviluppatori di gestire credenziali. Quando ci si connette alle risorse che supportano l'autenticazione di Microsoft Entra, le applicazioni ospitate in Azure possono usare i token Microsoft Entra anziché le credenziali. Le identità gestite non sono supportate nello sviluppo locale.
Se le variabili di ambiente necessarie per WorkloadIdentityCredential
non sono presenti, DefaultAzureCredential
tenta di eseguire l'autenticazione usando ManagedIdentityCredential.
Se si usa un'identità gestita assegnata dall'utente, eseguire il comando seguente per impostare la AZURE_CLIENT_ID
variabile di ambiente.
export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"
Se la AZURE_CLIENT_ID
variabile di ambiente non è impostata, DefaultAzureCredentials
tenta di eseguire l'autenticazione usando l'identità gestita assegnata dal sistema se ne è abilitata una nella risorsa di hosting.
Per un'esercitazione end-to-end sull'autenticazione con identità gestite nelle app ospitate in Azure, vedere Autenticazione con Azure SDK for Go usando un'identità gestita.
Opzione 4: Accedere con l'interfaccia della riga di comando di Azure
Per ridurre l'attrito nello sviluppo locale, DefaultAzureCredential
è possibile eseguire l'autenticazione come utente connesso all'interfaccia della riga di comando di Azure.
Eseguire il comando seguente per accedere all'interfaccia della riga di comando di Azure:
az login
Opzione 5: Accedere con l'interfaccia della riga di comando per sviluppatori di Azure
Nello sviluppo locale, se l'utente non ha eseguito l'accesso all'interfaccia della riga di comando di Azure, DefaultAzureCredential
può eseguire l'autenticazione come utente connesso all'interfaccia della riga di comando per sviluppatori di Azure.
Eseguire il comando seguente per accedere all'interfaccia della riga di comando per sviluppatori di Azure:
azd auth login
L'autenticazione dell'interfaccia della riga di comando per sviluppatori di Azure non è consigliata per le applicazioni in esecuzione in Azure.
3. Usare DefaultAzureCredential per autenticare ResourceClient
Creare un nuovo modulo Go di esempio denominato azure-auth
per testare l'autenticazione in Azure con DefaultAzureCredential
:
Creare una directory per testare ed eseguire il codice Go di esempio, quindi passare a tale directory.
Eseguire go mod init per creare un modulo:
go mod init azure-auth
Eseguire go per scaricare, compilare e installare i moduli necessari per Azure SDK per Go:
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
Creare un file denominato
main.go
e inserire il codice seguente: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 } }
Sostituire
<subscription ID>
con l'ID della sottoscrizione.Eseguire
go run
per compilare ed eseguire l'applicazione:go run .
Nota
Per eseguire così come si trova nel sistema locale, è necessario accedere ad Azure usando l'interfaccia della riga di comando di Azure o l'interfaccia della riga di comando per sviluppatori di Azure.
Eseguire l'autenticazione in Azure con DefaultAzureCredential
Usare il codice seguente nell'applicazione per eseguire l'autenticazione in Azure con il modulo Azure Identity usando 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
}
Risoluzione dei problemi
Per indicazioni sulla risoluzione degli errori da tipi di credenziali specifici, vedere la guida alla risoluzione dei problemi.