Autenticazione con Azure SDK per Go usando un'identità gestita
In questa esercitazione viene configurata una macchina virtuale di Azure con un'identità gestita per l'autenticazione in Azure usando Azure SDK for Go.
Le identità gestite eliminano la necessità di gestire le credenziali fornendo un'identità direttamente a una risorsa di Azure. Le autorizzazioni assegnate all'identità concedono alla risorsa l'accesso ad altre risorse di Azure che supportano le identità gestite, rimuovendo la necessità di passare le credenziali nell'applicazione. È possibile usare le identità gestite per autenticare e autorizzare le app ospitate in Azure con altre risorse di Azure.
Seguire questa esercitazione per assegnare un'identità gestita a una macchina virtuale ed eseguire l'autenticazione ad Azure usando un'identità gestita.
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Per usare l'interfaccia della riga di comando di Azure per eseguire i passaggi descritti in questo articolo:
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido per Bash in Azure Cloud Shell.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Per usare Azure PowerShell per eseguire la procedura descritta in questo articolo:
- Se si sceglie di usare Azure PowerShell in locale:
- Installare la versione più recente del modulo Az di PowerShell.
- Connettersi all'account Azure con il cmdlet Connect-AzAccount.
- Se si sceglie di usare Azure Cloud Shell:
- Vedere Panoramica di Azure Cloud Shell per altre informazioni.
- Se si sceglie di usare Azure PowerShell in locale:
1. Creare risorse di Azure
Prima di iniziare, è necessario creare un nuovo gruppo di risorse, una macchina virtuale e un'istanza dell'insieme di credenziali delle chiavi.
Distribuire una macchina virtuale
Distribuire una macchina virtuale in Azure. Eseguire il codice Go per creare un segreto nell'insieme di credenziali delle chiavi di Azure da tale macchina virtuale.
Crea gruppo di risorse di Azure.
az group create --name go-on-azure --location eastus
Modificare il
--location
parametro con il valore appropriato per l'ambiente in uso.Creare la macchina virtuale di Azure.
az vm create \ --resource-group go-on-azure \ --name go-on-azure-vm \ --image canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest \ --admin-username azureuser \ --admin-password <password>
Sostituire la
<password>
password.
Per altre informazioni su altri servizi che supportano le identità gestite, vedere Servizi che supportano le identità gestite per le risorse di Azure.
Distribuire un'istanza dell'insieme di credenziali delle chiavi
Creare una nuova istanza di Azure Key Vault eseguendo il comando seguente:
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Sostituire <keyVaultName>
con un nome univoco globale.
2. Creare un'identità gestita
In Azure sono supportati due tipi di identità gestite. assegnata dal sistema e assegnata dall'utente.
Le identità assegnate dal sistema vengono collegate direttamente a una risorsa di Azure e limitate solo a tale risorsa. Le identità assegnate dall'utente sono risorse autonome che possono essere assegnate a una o più risorse di Azure.
Per altre informazioni sulla differenza tra i tipi di identità gestiti assegnati dal sistema e assegnati dall'utente, vedere Tipi di identità gestite.
Scegli una delle opzioni seguenti:
- Opzione 1: Creare un'identità assegnata dal sistema
- Opzione 2: Creare un'identità assegnata dall'utente
Opzione 1: Creare un'identità assegnata dal sistema
Eseguire i comandi seguenti per creare un'identità gestita assegnata dal sistema:
az vm identity assign -g go-on-azure -n go-on-azure-vm
Opzione 2: Creare un'identità assegnata dall'utente
Eseguire i comandi seguenti per creare un'identità gestita assegnata dall'utente:
az identity create -g go-on-azure -n GoUserIdentity
az vm identity assign -g go-on-azure -n go-on-azure-vm --identities GoUserIdentity
Per altre informazioni, vedere Configurare le identità gestite per le risorse di Azure in una macchina virtuale di Azure usando l'interfaccia della riga di comando di Azure.
3. Assegnare un ruolo all'identità gestita
Dopo aver creato un'identità gestita, assegnare i ruoli per concedere le autorizzazioni di identità per accedere ad altre risorse di Azure. In questa esercitazione si assegna il ruolo predefinito di Key Vault Secrets Officer
all'identità gestita in modo che l'applicazione Go possa creare un segreto all'interno dell'istanza dell'insieme di credenziali delle chiavi.
Scegli una delle opzioni seguenti:
- Opzione 1: Assegnare un ruolo a un'identità assegnata dal sistema
- Opzione 2: Assegnare un ruolo a un'identità assegnata dall'utente
Opzione 1: Assegnare un ruolo a un'identità assegnata dal sistema
Eseguire i comandi seguenti per assegnare il Key Vault Secrets Officer
ruolo all'identità gestita assegnata dal sistema:
#output system identity principal ID
az vm identity show --name go-on-azure-vm --resource-group go-on-azure --query principalId -o tsv
#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Nel secondo comando sostituire <keyVaultName>
con il nome dell'insieme di credenziali delle chiavi. Nell'ultimo comando sostituire <principalId>
e <keyVaultId>
con l'output dei primi due comandi.
Opzione 2: Assegnare un ruolo a un'identità assegnata dall'utente
Eseguire i comandi seguenti per assegnare il Key Vault Secrets Officer
ruolo all'identità gestita assegnata dall'utente:
#output user identity principal ID
az identity show --resource-group go-on-azure --name GoUserIdentity --query principalId -o tsv
#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Nel secondo comando sostituire <keyVaultName>
con il nome dell'insieme di credenziali delle chiavi. Nell'ultimo comando sostituire <principalId>
e <keyVaultId>
con l'output dei primi due comandi.
Per altre informazioni sui ruoli predefiniti in Azure Key Vault, vedere Fornire l'accesso a chiavi, certificati e segreti di Key Vault con un controllo degli accessi in base al ruolo di Azure. Per altre informazioni sui ruoli predefiniti in Azure, vedere Ruoli predefiniti di Azure.
4. Creare un segreto dell'insieme di credenziali delle chiavi con Go
Successivamente, eseguire SSH nella macchina virtuale di Azure, installare Go e compilare il pacchetto Go.
Installare Go nella macchina virtuale di Azure
Ottenere l'indirizzo IP pubblico della macchina virtuale di Azure.
az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
Ssh nella macchina virtuale di Azure.
ssh azureuser@<public-ip>
Sostituire
<public-ip>
con l'indirizzo IP pubblico della macchina virtuale di Azure.Installare Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Creare il pacchetto Go
Creare una nuova directory con il nome
go-on-azure
nella home directory.mkdir ~/go-on-azure
Passare alla
go-on-azure
directory.cd ~/go-on-azure
Eseguire
go mod init
per creare il filego.mod
.go mod init go-on-azure
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/security/keyvault/azsecrets"
Creare un
main.go
file e copiarne 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/security/keyvault/azsecrets" ) func createSecret() { keyVaultName := os.Getenv("KEY_VAULT_NAME") secretName := "quickstart-secret" secretValue := "createdWithGO" 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) } params := azsecrets.SetSecretParameters{Value: &secretValue} resp, err := client.SetSecret(context.TODO(), secretName, params, 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() }
Creare una variabile di ambiente denominata
KEY_VAULT_NAME
. Sostituire<keyVaultName>
con il nome dell'istanza di Azure Key Vault.export KEY_VAULT_NAME=<keyVaultName>
Eseguire
go run
il comando per creare un segreto dell'insieme di credenziali delle chiavi.go run main.go
In caso di esito positivo, l'output è simile al seguente:
Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
È possibile verificare che il segreto dell'insieme di credenziali delle chiavi sia stato creato usando Azure PowerShell, l'interfaccia della riga di comando di Azure o il portale di Azure.
Nota
Se si usa l'interfaccia della riga di comando di Azure o Azure PowerShell, è necessario assicurarsi che all'account utente di Azure sia assegnato un ruolo che consenta di leggere i segreti nell'insieme di credenziali delle chiavi, ad esempio "Key Vault Secrets Officer" o "Key Vault Secrets User".
5. Pulire le risorse
Se non si vogliono più usare le risorse di Azure create in questo articolo, è consigliabile eliminarle. L'eliminazione di risorse inutilizzate consente di evitare di incorrere in addebiti in corso e di mantenere la sottoscrizione non ordinata. Il modo più semplice per eliminare le risorse usate in questa esercitazione consiste nell'eliminare il gruppo di risorse.
az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes
L'argomento force-deletion-type
indica al comando di forzare l'eliminazione delle macchine virtuali nel gruppo di risorse. L'argomento --yes
indica al comando di non chiedere conferma.
Il comando precedente esegue un'eliminazione temporanea nell'insieme di credenziali delle chiavi nel gruppo di risorse. Per rimuoverlo definitivamente dalla sottoscrizione, immettere il comando seguente:
az keyvault purge --name <keyVaultName> --no-wait
Sostituire <keyVaultName>
con il nome dell'insieme di credenziali delle chiavi.