Schnellstart: Azure Key Vault-Clientbibliothek für Go

In dieser Schnellstartanleitung erfahren Sie, wie Sie das Azure SDK für Go verwenden, um Azure Key Vault-Schlüssel zu erstellen, abzurufen, zu aktualisieren und zu löschen.

Azure Key Vault ist ein Clouddienst, der als sicherer Geheimnisspeicher fungiert. Dadurch können Schlüssel, Kennwörter, Zertifikate und andere Geheimnisse sicher gespeichert werden. Weitere Informationen zu Key Vault finden Sie in der Übersicht.

In dieser Anleitung erfahren Sie, wie Sie das Paket azkeys verwenden, um Ihre Azure Key Vault-Schlüssel mit Go zu verwalten.

Voraussetzungen

Einrichten Ihrer Umgebung

  1. Melden Sie sich bei Azure an.

    az login
    
  2. Erstellen Sie eine neue Ressourcengruppe.

    az group create --name quickstart-rg --location eastus
    
  3. Stellen Sie eine neue Key Vault-Instanz bereit.

    az keyvault create --name <keyVaultName> --resource-group quickstart-rg
    

    Ersetzen Sie <keyVaultName> durch einen Namen, der innerhalb von Azure eindeutig ist. In der Regel verwenden Sie Ihren persönlichen oder Firmennamen zusammen mit Ziffern und anderen Bezeichnern.

  4. Erstellen eines neuen Go-Moduls und Installieren von Paketen

    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
    

Erstellen des Beispielcodes

Erstellen Sie eine Datei mit dem Namen „main.go“, und kopieren Sie den folgenden Code in die Datei:

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)
	}
}

Ausführen des Codes

Bevor Sie den Code ausführen, erstellen Sie eine Umgebungsvariable namens KEY_VAULT_NAME. Legen Sie den Wert der Umgebungsvariablen auf den Namen der zuvor erstellten Azure Key Vault-Instanz fest.

export KEY_VAULT_NAME=quickstart-kv

Führen Sie als Nächstes den folgenden go run-Befehl aus, um die App auszuführen:

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

Hinweis

Diese Ausgabe dient nur zu Informationszwecken. Ihre Rückgabewerte können je nach Azure-Abonnement und Azure Key Vault-Instanz variieren.

Codebeispiele

Weitere Beispiele finden Sie in der Moduldokumentation.

Bereinigen von Ressourcen

Führen Sie die folgenden Befehle aus, um die Ressourcengruppe und alle dazugehörigen Ressourcen zu löschen:

az group delete --resource-group quickstart-rg

Nächste Schritte