Autenticazione con Azure SDK per Go (legacy)

Importante

Questo articolo si applica alla versione legacy di Azure SDK per Go. Per l'autenticazione ai moduli più recenti, usare il pacchetto Di identità di Azure.

Azure SDK per Go offre più modalità di autenticazione in Azure. Questi tipi di autenticazione vengono richiamati tramite diversi metodi di autenticazione. Questo articolo illustra i tipi e i metodi disponibili e mostra come scegliere l'approccio ottimale per l'applicazione.

Metodi e tipi di autenticazione disponibili

Azure SDK per Go offre diversi tipi di autenticazione che usano set di credenziali diversi. Ogni tipo di autenticazione è disponibile tramite metodi di autenticazione diversi, ovvero secondo il modo in cui l'SDK riceve le credenziali come input. La tabella seguente descrive i tipi di autenticazione e le situazioni in cui sono consigliati per l'uso da parte dell'applicazione.

Tipo di autenticazione Consigliato quando...
Autenticazione basata su certificati Si dispone di un certificato X509 configurato per un utente di Microsoft Entra o un'entità servizio. Per altre informazioni, vedere Introduzione all'autenticazione basata su certificati in Microsoft Entra ID.
Credenziali del client Si dispone di un'entità servizio configurata per l'applicazione o una classe di applicazioni a cui questa appartiene. Per altre informazioni, vedere Creare un'entità servizio con l'interfaccia della riga di comando di Azure.
Identità gestite per le risorse di Azure L'applicazione viene eseguita in una risorsa di Azure che è stata configurata con un'identità gestita. Per altre informazioni, vedere l'articolo relativo alle identità gestite per le risorse di Azure.
Token dispositivo L'applicazione è stata progettata solo per l'utilizzo interattivo. Gli utenti possono avere l'autenticazione a più fattori abilitata. Gli utenti hanno accesso a un Web browser per eseguire l'accesso. Per altre informazioni, vedere Uso dell'autenticazione tramite token dispositivo.
Nome utente e password È disponibile un'applicazione interattiva che non può usare alcun altro metodo di autenticazione. Gli utenti non hanno l'autenticazione a più fattori abilitata per l'accesso a Microsoft Entra.

Punti chiave

  • Se si usa un tipo di autenticazione diverso dalle credenziali client, l'applicazione deve essere registrata in Microsoft Entra ID. Per informazioni su come, vedere Integrazione di applicazioni con Microsoft Entra ID.
  • A meno che non si abbiano esigenze particolari, evitare l'autenticazione con nome utente/password. In situazioni in cui l'accesso basato sull'utente è appropriato, in genere è possibile usare l'autenticazione del token del dispositivo.

Questi tipi di autenticazione sono disponibili tramite metodi diversi.

Tutte le funzioni e i tipi di autenticazione sono disponibili nel pacchetto github.com/Azure/go-autorest/autorest/azure/auth .

Nota

A meno che non si abbiano esigenze particolari, evitare l'autenticazione basata su client. Questo metodo di autenticazione incoraggia procedure non valide. In particolare, l'autenticazione basata su client spinge a impostare le credenziali come hardcoded. La scrittura di codici personalizzati per l'autenticazione potrà essere anche interrotta in versioni future di SDK qualora i requisiti di autenticazione cambino.

Usare l'autenticazione basata su ambiente

Se si esegue l'applicazione in un contesto controllato, l'autenticazione basata su ambiente è una scelta naturale. Con questo metodo di autenticazione è possibile configurare l'ambiente shell prima di eseguire l'applicazione. In fase di esecuzione Go SDK legge tali variabili di ambiente per l'autenticazione in Azure.

L'autenticazione basata sull'ambiente include il supporto per tutti i tipi di autenticazione ad eccezione dei token del dispositivo, valutati nell'ordine seguente:

  • Credenziali del client
  • Autenticazione basata su certificati
  • Nome utente e password
  • Identità gestite per le risorse di Azure

Se un tipo di autenticazione ha valori non configurati o viene rifiutato, l'SDK prova automaticamente il tipo di autenticazione successivo. Quando non sono disponibili altri tipi, l'SDK restituisce un errore.

La tabella seguente illustra in dettaglio le variabili di ambiente che devono essere impostate per ogni tipo di autenticazione supportato dall'autenticazione basata su ambiente.

Tipo di autenticazione Variabile di ambiente Descrizione
Credenziali del client AZURE_TENANT_ID ID del tenant di Active Directory a cui appartiene l'entità servizio.
AZURE_CLIENT_ID Nome o ID dell'entità servizio.
AZURE_CLIENT_SECRET Segreto associato all'entità servizio.
Certificate AZURE_TENANT_ID ID del tenant di Active Directory che viene registrato con il certificato.
AZURE_CLIENT_ID ID client dell'applicazione associato al certificato.
AZURE_CERTIFICATE_PATH Percorso del file di certificato client.
AZURE_CERTIFICATE_PASSWORD Password del certificato client.
Nome utente/password AZURE_TENANT_ID ID del tenant di Active Directory a cui appartiene l'utente.
AZURE_CLIENT_ID ID client dell'applicazione.
AZURE_USERNAME Nome utente con cui accedere.
AZURE_PASSWORD Password con cui accedere.
Identità gestita Non sono necessarie credenziali per l'autenticazione con identità gestita. L'applicazione deve essere eseguita in una risorsa di Azure configurata per l'uso delle identità gestite. Per informazioni dettagliate, vedere l'articolo relativo alle identità gestite per le risorse di Azure.

Per connettersi a un endpoint di gestione o cloud diverso dal cloud pubblico di Azure, impostare anche le variabili di ambiente seguenti. I motivi più comuni per impostarle includono l'uso di Azure Stack, un cloud in un'area geografica diversa o il modello di distribuzione classica.

Variabile di ambiente Descrizione
AZURE_ENVIRONMENT Nome dell'ambiente cloud a cui connettersi.
AZURE_AD_RESOURCE ID di risorsa di Active Directory da usare durante la connessione, come URI per l'endpoint di gestione.

Quando si usa l'autenticazione basata su ambiente, chiamare la funzione NewAuthorizerFromEnvironment per ottenere l'oggetto provider di autorizzazioni. Questo oggetto viene quindi impostato sulla proprietà Authorizer dei client per consentire loro l'accesso ad Azure.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()

Autenticazione in Azure Stack

Per autenticarsi in Azure Stack, è necessario impostare le variabili seguenti:

Variabile di ambiente Descrizione
AZURE_AD_ENDPOINT Endpoint di Active Directory.
AZURE_AD_RESOURCE ID risorsa di Active Directory.

Queste variabili possono essere recuperate dalle informazioni sui metadati di Azure Stack. Per recuperare i metadati, aprire un Web browser nel proprio ambiente di Azure Stack e utilizzare l'URL: (ResourceManagerURL)/metadata/endpoints?api-version=1.0

ResourceManagerURL varia in base al nome dell'area, al nome del computer e al nome di dominio completo esterno (FQDN) della distribuzione di Azure Stack:

Ambiente ResourceManagerURL
Kit di sviluppo https://management.local.azurestack.external/
Sistemi integrati https://management.(region).ext-(machine-name).(FQDN)

Per altre informazioni su come usare Azure SDK per Go in Azure Stack, vedere Usare profili di versioni delle API con Go in Azure Stack

Usare l'autenticazione basata su file

L'autenticazione basata su file usa un formato di file generato dall'interfaccia della riga di comando di Azure. È possibile creare facilmente questo file quando si crea una nuova entità servizio con il parametro --sdk-auth. Se si intende usare l'autenticazione basata su file, assicurarsi che questo argomento venga fornito quando si crea un'entità servizio. Poiché l'interfaccia della riga di comando stampa l'output in stdout, reindirizzare l'output verso un file.

az ad sp create-for-rbac --role Contributor \
    --scopes /subscriptions/<subscription_id> \
    --sdk-auth > azure.auth

Impostare la variabile di ambiente AZURE_AUTH_LOCATION in cui si trova il file di autorizzazione. Questa variabile di ambiente viene letta dall'applicazione e le credenziali contenute in essa vengono analizzate. Se è necessario selezionare il file di autorizzazione in fase di runtime, modificare l'ambiente del programma tramite la funzione os.Setenv.

Per caricare le informazioni di autenticazione, chiamare la funzione NewAuthorizerFromFile. A differenza dell'autorizzazione basata su ambiente, l'autorizzazione basata su file richiede un endpoint di risorse.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)

Per altre informazioni sull'uso delle entità servizio e sulla gestione delle relative autorizzazioni di accesso, vedere Creare un'entità servizio con l'interfaccia della riga di comando di Azure.

Uso dell'autenticazione tramite token dispositivo

Se si vuole che gli utenti accedano in modo interattivo, l'autenticazione tramite token dispositivo è l'approccio ottimale. Questo flusso di autenticazione passa all'utente un token da incollare in un sito di accesso Microsoft, in cui quindi esegue l'autenticazione con un account Microsoft Entra. Questo metodo di autenticazione supporta gli account in cui è abilitata l'autenticazione a più fattori, a differenza dell'autenticazione standard di nome utente/password.

Per usare l'autenticazione tramite token dispositivo, creare un provider di autorizzazioni DeviceFlowConfig con la funzione NewDeviceFlowConfig. Chiamare il provider di autorizzazioni nell'oggetto risultante per avviare il processo di autenticazione. L'autenticazione tramite flusso del dispositivo blocca l'esecuzione del programma fino a quando non è stato completato l'intero flusso di autenticazione.

import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()

Usare un client di autenticazione

Se è necessario un tipo di autenticazione specifico e si è disposti a far eseguire al programma il caricamento delle informazioni di autenticazione da parte dell'utente, è possibile usare qualsiasi client conforme all'interfaccia auth.AuthorizerConfig. Usare un tipo che implementa questa interfaccia nelle situazioni seguenti:

  • Scrittura di un programma interattivo
  • Uso di file di configurazione specializzati
  • Presenza di un requisito che impedisce l'uso di un metodo di autenticazione predefinito

Avviso

Mai impostare come hardcoded le credenziali di Azure in un'applicazione. L'inserimento di informazioni riservate in un file binario dell'applicazione rende più semplice per un utente malintenzionato estrarle, indipendentemente dal fatto che l'applicazione sia in esecuzione o meno. In questo modo vengono messe a rischio tutte le risorse di Azure per cui sono autorizzate le credenziali!

Nella tabella seguente sono elencati i tipi conformi all'interfaccia AuthorizerConfig nell'SDK.

Tipo di autenticazione Tipo di provider di autorizzazioni
Autenticazione basata su certificati ClientCertificateConfig
Credenziali del client ClientCredentialsConfig
Identità gestite per le risorse di Azure MSIConfig
Nome utente e password UsernamePasswordConfig

Creare un autenticatore con la rispettiva funzione New associata e quindi chiamare Authorize nell'oggetto risultante per eseguire l'autenticazione. Ad esempio, per usare l'autenticazione basata su certificati:

import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorizer()

Passaggi successivi