Szybki start: zarządzanie sekretami przy użyciu biblioteki klienta Go do Azure Key Vault

Podczas tego szybkiego startu dowiesz się, jak używać Azure SDK dla języka Go do tworzenia, pobierania, wyświetlania listy i usuwania sekretów z magazynu kluczy Azure.

W magazynie kluczy platformy Azure można przechowywać różne typy obiektów . Podczas przechowywania wpisów tajnych w magazynie kluczy należy unikać konieczności przechowywania ich w kodzie, co pomaga zwiększyć bezpieczeństwo aplikacji.

Rozpocznij pracę z pakietem azsecrets i dowiedz się, jak zarządzać swoimi sekretami w Azure Key Vault przy użyciu języka Go.

Prerequisites

Setup

Na potrzeby tego szybkiego startu użyjesz pakietu azidentity do uwierzytelniania na platformie Azure za pomocą Azure CLI. Aby dowiedzieć się więcej o różnych metodach uwierzytelniania, zobacz Uwierzytelnianie w Azure za pomocą Azure SDK dla Go.

Zaloguj się do witryny Azure Portal.

  1. W interfejsie wiersza polecenia platformy Azure uruchom następujące polecenie:

    az login
    

    Jeśli interfejs wiersza polecenia platformy Azure może otworzyć domyślną przeglądarkę, robi to na stronie logowania w witrynie Azure Portal.

    Jeśli strona nie zostanie otwarta automatycznie, przejdź do https://aka.ms/deviceloginstrony , a następnie wprowadź kod autoryzacji wyświetlany w terminalu.

  2. Zaloguj się do witryny Azure Portal przy użyciu poświadczeń konta.

Utwórz grupę zasobów i magazyn kluczy

Ten szybki start wykorzystuje wstępnie utworzony magazyn kluczy Azure. Można utworzyć magazyn kluczy, wykonując kroki opisane w tych szybkich przewodnikach startowych:

Alternatywnie możesz uruchomić te polecenia Azure CLI.

Important

Każdy magazyn kluczy musi mieć unikatową nazwę. Zastąp <vault-name> nazwą magazynu kluczy w poniższych przykładach.

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

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

Udzielanie dostępu do magazynu kluczy

Aby uzyskać uprawnienia do magazynu kluczy za pomocą kontroli dostępu opartej na rolach (RBAC), przypisz rolę do głównej nazwy użytkownika (UPN) przy użyciu polecenia interfejsu wiersza polecenia platformy Azure 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>"

Zastąp <upn>, <subscription-id> i <vault-name> rzeczywistymi wartościami. Jeśli użyto innej nazwy grupy zasobów, zastąp "myResourceGroup" również. Nazwa UPN będzie zwykle mieć format adresu e-mail (np. username@domain.com).

Tworzenie nowego modułu języka Go i instalowanie pakietów

Uruchom następujące polecenia języka Go:

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

Przykładowy kod

Utwórz plik o nazwie main.go, a następnie wklej do niego następujący kod:

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

Uruchamianie kodu

  1. Przed uruchomieniem kodu utwórz zmienną środowiskową o nazwie KEY_VAULT_NAME. Ustaw wartość zmiennej środowiskowej na nazwę utworzonego wcześniej magazynu kluczy.

    export KEY_VAULT_NAME=quickstart-kv
    
  2. Aby uruchomić aplikację Go, uruchom następujące polecenie:

    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
    

Przykłady kodu

Więcej przykładów można znaleźć w dokumentacji modułu.

Czyszczenie zasobów

Usuń grupę zasobów i wszystkie pozostałe zasoby, uruchamiając następujące polecenie:

az group delete --resource-group "myResourceGroup"

Dalsze kroki