Condividi tramite


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 DefaultAzureCredential per eseguire l'autenticazione 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 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:

  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 .
    

    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.

Passaggi successivi