Autenticazione di Azure SDK per Go con un'entità servizio

In questa esercitazione si userà Azure SDK for Go per eseguire l'autenticazione in Azure con un'entità servizio di Azure usando un segreto o un certificato.

Le entità servizio di Azure definiscono i criteri di accesso e le autorizzazioni in un tenant di Microsoft Entra. Abilitazione di funzionalità di base come l'autenticazione durante l'accesso e l'autorizzazione durante l'accesso alle risorse. Rimozione della necessità di usare account personali per accedere alle risorse di Azure. Il modulo Azure Identity di Azure SDK per Go offre un modo pratico per eseguire l'autenticazione con Azure usando un'entità servizio usando variabili di ambiente, un segreto o un certificato

Seguire questa esercitazione per creare ed eseguire l'autenticazione con Azure SDK per Go usando un'entità servizio.

Prerequisiti

  • Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

1. Configurare l'ambiente

Prima di iniziare, creare un nuovo gruppo di risorse e un'istanza dell'insieme di credenziali delle chiavi.

az group create --name go-on-azure --location eastus

az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure

Sostituire <keyVaultName> con un nome univoco globale. Prendere nota anche dell'oggetto Id dell'output, che verrà usato per l'ambito dell'account del servizio.

2. Creare un'entità servizio di Azure

Usare una delle tecniche seguenti per creare un'entità servizio di Azure:

Per altre informazioni sulle entità servizio di Azure, vedere Oggetto entità servizio.

Opzione 1: Creare un'entità servizio di Azure con un segreto

Eseguire i comandi seguenti per creare un'entità servizio di Azure.

az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>

Sostituire <servicePrincipalName> e <resourceGroupId> con i valori appropriati.

Assicurarsi di copiare il valore della password . Non è possibile recuperarlo. Se si dimentica la password, reimpostare le credenziali dell'entità servizio.

Opzione 2: Creare un'entità servizio di Azure con un certificato

az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>

Sostituire <servicePrincipalName> e <resourceGroupId> con i valori appropriati.

3. Eseguire l'autenticazione in Azure con un'entità servizio

DefaultAzureCredentialUsando , è possibile evitare di scrivere codice specifico dell'ambiente per l'autenticazione in Azure.

Usare per configurare le credenziali dell'entità DefaultAzureCredential servizio definendo le variabili di ambiente.

Scegliere una delle opzioni seguenti per configurare le credenziali dell'entità servizio:

Per altre informazioni su DefaultAzureCredential, vedere Autenticazione di Azure con Azure SDK per Go

Opzione 1: Eseguire l'autenticazione con un segreto

Definire le variabili di ambiente seguenti:

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

Opzione 2: Eseguire l'autenticazione con un certificato

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

Usare DefaultAzureCredential per autenticare ResourceClient

Usare la NewDefaultAzureCredential funzione del modulo Identità di Azure per autenticare un oggetto ResourceClient.

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    log.Fatalf("failed to obtain a credential: %v", err)
}

4. Codice di esempio

Usare l'esempio di codice seguente per verificare che l'entità servizio esegua l'autenticazione in Azure e disponga delle autorizzazioni appropriate per il gruppo di risorse.

  1. Creare una nuova directory denominata go-on-azure nella home directory.

    mkdir ~/go-on-azure
    
  2. Passare alla go-on-azure directory.

    cd ~/go-on-azure
    
  3. Eseguire go mod init per creare il file go.mod.

    go mod init go-on-azure
    
  4. Eseguire go get per installare i moduli Go necessari.

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
    
  5. Creare un file denominato main.go e aggiungere il codice seguente.

    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    	"os"
    
    	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    	"github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
    )
    
    func createSecret(name, value string) {
    	keyVaultName := os.Getenv("KEY_VAULT_NAME")
    	keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName)
    
    	cred, err := azidentity.NewDefaultAzureCredential(nil)
    	if err != nil {
    		log.Fatalf("failed to obtain a credential: %v", err)
    	}
    
    	client, err := azsecrets.NewClient(keyVaultUrl, cred, nil)
    	if err != nil {
    		log.Fatalf("failed to create a client: %v", err)
    	}
    
    	resp, err := client.SetSecret(context.TODO(), name, value, nil)
    	if err != nil {
    		log.Fatalf("failed to create a secret: %v", err)
    	}
    
    	fmt.Printf("Name: %s, Value: %s\n", *resp.ID, *resp.Value)
    }
    
    func main() {
    	createSecret("ExamplePassword", "hVFkk965BuUv")
    }
    
    
  6. Creare una variabile di ambiente denominata KEY_VAULT_NAME. Impostare il valore della variabile di ambiente sul nome dell'insieme di credenziali delle chiavi di Azure creato in precedenza.

    export KEY_VAULT_NAME=<KeyVaultName>
    

    Sostituire <KeyVaultName> con il nome dell'istanza di Azure Key Vault.

  7. Eseguire il go run comando per creare il nuovo segreto dell'insieme di credenziali delle chiavi.

     go run main.go
    

Passaggi successivi