Avvio rapido: Libreria client di chiavi di Azure Key Vault per Go
In questa guida introduttiva si apprenderà come usare Azure SDK per Go per creare, recuperare, aggiornare, elencare ed eliminare le chiavi di Azure Key Vault.
Azure Key Vault è un servizio cloud che funziona come archivio protetto dei segreti. È possibile archiviare in modo sicuro chiavi, password, certificati e altri segreti. Per altre informazioni su Key Vault, vedere la panoramica.
Seguire questa guida per informazioni su come usare il pacchetto azkeys per gestire le chiavi di Azure Key Vault usando Go.
Prerequisiti
- Una sottoscrizione di Azure: creare un account gratuitamente.
- Go installato: versione 1.18 o successiva
- Interfaccia della riga di comando di Azure
Accedere al portale di Azure
Nell'interfaccia della riga di comando di Azure eseguire il comando seguente:
az login
Se l'interfaccia della riga di comando di Azure può aprire il browser predefinito, questa operazione verrà eseguita nella pagina di accesso del portale di Azure.
Se la pagina non viene aperta automaticamente, passare a https://aka.ms/devicelogin, quindi immettere il codice di autorizzazione visualizzato nel terminale.
Accedere al portale di Azure con le credenziali dell'account.
Creare un gruppo di risorse e un insieme di credenziali delle chiavi
In questo avvio rapido si usa un'istanza creata in precedenza di Azure Key Vault. È possibile creare un insieme di credenziali delle chiavi seguendo la procedura descritta negli argomenti di avvio rapido per l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.
In alternativa, è possibile eseguire i comandi dell'interfaccia della riga di comando di Azure o di Azure PowerShell.
Importante
Ogni insieme di credenziali delle chiavi deve avere un nome univoco. Negli esempi seguenti sostituire <your-unique-keyvault-name> con il nome dell'insieme di credenziali delle chiavi in uso.
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization
Concedere l'accesso all'insieme di credenziali delle chiavi
Per ottenere le autorizzazioni per l’insieme di credenziali delle chiavi tramite il controllo degli accessi in base al ruolo (RBAC), assegnare un ruolo all’UPN (User Principal Name) usando il comando dell’interfaccia della riga di comando di Azure az role assignment create.
az role assignment create --role "Key Vault Crypto Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Sostituire <upn>, <subscription-id>, <resource-group-name> e <your-unique-keyvault-name> con i valori effettivi. L'UPN in genere sarà nel formato di un indirizzo e-mail (ad esempio, username@domain.com).
Creare un nuovo modulo Go e installare i pacchetti
Eseguire i seguenti comandi Go:
go mod init quickstart-keys
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
go get -u github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys
Creare il codice di esempio
Creare un file denominato main.go e copiare il codice seguente nel file:
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys"
)
func main() {
keyVaultName := os.Getenv("KEY_VAULT_NAME")
keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName)
// create credential
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
// create azkeys client
client, err := azkeys.NewClient(keyVaultUrl, cred, nil)
if err != nil {
log.Fatal(err)
}
// create RSA Key
rsaKeyParams := azkeys.CreateKeyParameters{
Kty: to.Ptr(azkeys.JSONWebKeyTypeRSA),
KeySize: to.Ptr(int32(2048)),
}
rsaResp, err := client.CreateKey(context.TODO(), "new-rsa-key", rsaKeyParams, nil)
if err != nil {
log.Fatalf("failed to create rsa key: %v", err)
}
fmt.Printf("New RSA key ID: %s\n", *rsaResp.Key.KID)
// create EC Key
ecKeyParams := azkeys.CreateKeyParameters{
Kty: to.Ptr(azkeys.JSONWebKeyTypeEC),
Curve: to.Ptr(azkeys.JSONWebKeyCurveNameP256),
}
ecResp, err := client.CreateKey(context.TODO(), "new-ec-key", ecKeyParams, nil)
if err != nil {
log.Fatalf("failed to create ec key: %v", err)
}
fmt.Printf("New EC key ID: %s\n", *ecResp.Key.KID)
// list all vault keys
fmt.Println("List all vault keys:")
pager := client.NewListKeysPager(nil)
for pager.More() {
page, err := pager.NextPage(context.TODO())
if err != nil {
log.Fatal(err)
}
for _, key := range page.Value {
fmt.Println(*key.KID)
}
}
// update key properties to disable key
updateParams := azkeys.UpdateKeyParameters{
KeyAttributes: &azkeys.KeyAttributes{
Enabled: to.Ptr(false),
},
}
// an empty string version updates the latest version of the key
version := ""
updateResp, err := client.UpdateKey(context.TODO(), "new-rsa-key", version, updateParams, nil)
if err != nil {
panic(err)
}
fmt.Printf("Key %s Enabled attribute set to: %t\n", *updateResp.Key.KID, *updateResp.Attributes.Enabled)
// delete the created keys
for _, keyName := range []string{"new-rsa-key", "new-ec-key"} {
// DeleteKey returns when Key Vault has begun deleting the key. That can take several
// seconds to complete, so it may be necessary to wait before performing other operations
// on the deleted key.
delResp, err := client.DeleteKey(context.TODO(), keyName, nil)
if err != nil {
panic(err)
}
fmt.Printf("Successfully deleted key %s", *delResp.Key.KID)
}
}
Eseguire il codice
Prima di eseguire il codice, creare una variabile di ambiente denominata KEY_VAULT_NAME. Impostare il valore della variabile di ambiente sul nome dell'istanza di Azure Key Vault creata in precedenza.
export KEY_VAULT_NAME=quickstart-kv
Eseguire quindi il seguente comando go run
per eseguire l'app:
go run main.go
Key ID: https://quickstart-kv.vault.azure.net/keys/new-rsa-key4/f78fe1f34b064934bac86cc8c66a75c3: Key Type: RSA
Key ID: https://quickstart-kv.vault.azure.net/keys/new-ec-key2/10e2cec51d1749c0a26aab784808cfaf: Key Type: EC
List all vault keys:
https://quickstart-kv.vault.azure.net/keys/new-ec-key
https://quickstart-kv.vault.azure.net/keys/new-ec-key1
https://quickstart-kv.vault.azure.net/keys/new-ec-key2
https://quickstart-kv.vault.azure.net/keys/new-rsa-key4
Enabled set to: false
Successfully deleted key https://quickstart-kv.vault.azure.net/keys/new-rsa-key4/f78fe1f34b064934bac86cc8c66a75c3
Nota
L'output è esclusivamente a scopo informativo. I valori restituiti possono variare in base alla sottoscrizione di Azure e ad Azure Key Vault.
Esempi di codice
Per altri esempi, vedere la documentazione del modulo.
Pulire le risorse
Eseguire il comando seguente per eliminare il gruppo di risorse e tutte le risorse rimanenti:
az group delete --resource-group quickstart-rg