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.

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 per eseguire l'autenticazione DefaultAzureCredential in Azure con una delle tecniche seguenti:

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 con chiave privata (senza protezione password)
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.

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. Connettendosi alle risorse che supportano l'autenticazione di Microsoft Entra, le applicazioni possono usare i token Di Microsoft Entra anziché le credenziali.

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

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

L'autenticazione dell'interfaccia della riga di comando 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:

  1. Creare una directory per testare ed eseguire il codice Go di esempio, quindi passare a tale directory.

  2. Eseguire go mod init per creare un modulo:

    go mod init azure-auth
    
  3. 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"
    
  4. 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.

  5. Eseguire go run per compilare ed eseguire l'applicazione:

    go run .
    

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.

Passaggi successivi