Quickstart: Geheimen beheren met behulp van de Azure Key Vault Go-clientbibliotheek

In deze quickstart leert u hoe u de Azure SDK voor Go gebruikt om geheimen te maken, op te halen, weer te geven en te verwijderen uit een Azure-sleutelkluis.

U kunt verschillende objecttypen opslaan in een Azure-sleutelkluis. Wanneer u geheimen opslaat in een sleutelkluis, hoeft u ze niet op te slaan in uw code, waardoor de beveiliging van uw toepassingen wordt verbeterd.

Ga aan de slag met het azsecrets-pakket en leer hoe je jouw geheimen beheert in een Azure Key Vault met behulp van Go.

Prerequisites

Setup

Voor deze quickstart gebruikt u het azidentity-pakket om u te authenticeren bij Azure met behulp van de Azure CLI. Zie Azure-verificatie met de Azure SDK voor Go voor informatie over de verschillende authenticatiemethoden.

Meld u aan bij het Azure Portal

  1. Voer in de Azure CLI de volgende opdracht uit:

    az login
    

    Als de Azure CLI uw standaardbrowser kan openen, gebeurt dit op de aanmeldingspagina van Azure Portal.

    Als de pagina niet automatisch wordt geopend, gaat u naar https://aka.ms/deviceloginen voert u vervolgens de autorisatiecode in die wordt weergegeven in uw terminal.

  2. Meld u aan bij Azure Portal met uw accountreferenties.

Maak een resourcegroep en een sleutelkluis aan

In deze quickstart wordt een vooraf gemaakte Azure-sleutelkluis gebruikt. U kunt een sleutelkluis maken door de stappen in deze quickstarts te volgen:

U kunt deze Azure CLI-opdrachten ook uitvoeren.

Important

Elke sleutelkluis moet een unieke naam hebben. Vervang <vault-name> door de naam van uw sleutelkluis in de volgende voorbeelden.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

Toegang verlenen tot uw sleutelkluis

Om machtigingen te verkrijgen voor uw sleutelkluis via Role-Based Access Control (RBAC), wijst u een rol toe aan uw "User Principal Name" (UPN) met behulp van de Azure CLI-opdracht az role assignment create.

az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

Vervang , <upn>en <subscription-id> door <vault-name>uw werkelijke waarden. Als u een andere resourcegroepnaam hebt gebruikt, vervangt u myResourceGroup ook. Uw UPN heeft doorgaans de indeling van een e-mailadres (bijvoorbeeld username@domain.com).

Een nieuwe Go-module maken en pakketten installeren

Voer de volgende Go-opdrachten uit:

go mod init kvSecrets
go get -u github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity

Voorbeeldcode

Maak een bestand met de naam main.go en plak de volgende code erin:

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 main() {
    mySecretName := "secretName01"
    mySecretValue := "secretValue"
    vaultURI := fmt.Sprintf("https://%s.vault.azure.net/", os.Getenv("KEY_VAULT_NAME"))

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

    // Establish a connection to the Key Vault client
    client, err := azsecrets.NewClient(vaultURI, cred, nil)

    // Create a secret
    params := azsecrets.SetSecretParameters{Value: &mySecretValue}
    _, err = client.SetSecret(context.TODO(), mySecretName, params, nil)
    if err != nil {
        log.Fatalf("failed to create a secret: %v", err)
    }

    // Get a secret. An empty string version gets the latest version of the secret.
    version := ""
    resp, err := client.GetSecret(context.TODO(), mySecretName, version, nil)
    if err != nil {
        log.Fatalf("failed to get the secret: %v", err)
    }

    fmt.Printf("secretValue: %s\n", *resp.Value)

    // List secrets
    pager := client.NewListSecretsPager(nil)
    for pager.More() {
        page, err := pager.NextPage(context.TODO())
        if err != nil {
            log.Fatal(err)
        }
        for _, secret := range page.Value {
            fmt.Printf("Secret ID: %s\n", *secret.ID)
        }
    }

    // Delete a secret. DeleteSecret returns when Key Vault has begun deleting the secret.
    // That can take several seconds to complete, so it may be necessary to wait before
    // performing other operations on the deleted secret.
    delResp, err := client.DeleteSecret(context.TODO(), mySecretName, nil)
    if err != nil {
        log.Fatalf("failed to delete secret: %v", err)
    }

    fmt.Println(delResp.ID.Name() + " has been deleted")
}

De code uitvoeren

  1. Voordat u de code uitvoert, maakt u een omgevingsvariabele aan met de naam KEY_VAULT_NAME. Stel de waarde van de omgevingsvariabele in op de naam van de sleutelkluis die u eerder hebt gemaakt.

    export KEY_VAULT_NAME=quickstart-kv
    
  2. Voer de volgende opdracht uit om de Go-app te starten:

    go run main.go
    
    secretValue: createdWithGO
    Secret ID: https://quickstart-kv.vault.azure.net/secrets/quickstart-secret
    Secret ID: https://quickstart-kv.vault.azure.net/secrets/secretName
    quickstart-secret has been deleted
    

Codevoorbeelden

Zie de moduledocumentatie voor meer voorbeelden.

Resources opschonen

Verwijder de resourcegroep en alle resterende resources door de volgende opdracht uit te voeren:

az group delete --resource-group "myResourceGroup"

Volgende stappen

  • Overzicht van Azure Key Vault
  • Ontwikkelaarshandleiding voor Azure Key Vault
  • Overzicht van Key Vault-beveiliging
  • Specifieke beveiligingsrichtlijnen voor geheimen
  • Authenticeren met Key Vault
  • Overzicht van Key Vault-beveiliging
  • Authenticeren met Key Vault