Поделиться через


Краткое руководство. Управление секретами с помощью клиентской библиотеки Go в Azure Key Vault

В этом кратком руководстве вы узнаете, как использовать Azure SDK для Go для создания, получения, перечисления и удаления секретов из Azure Key Vault.

В хранилище ключей Azure можно размещать объекты различных типов. Если вы храните секреты в хранилище ключей, это позволяет не указывать их в коде, что помогает повысить безопасность приложений.

Начните работу с пакетом azsecrets и узнайте, как управлять секретами в хранилище ключей Azure с помощью Go.

Необходимые компоненты

Настройка

В этом кратком руководстве для проверки подлинности в Azure с помощью Azure CLI используется пакет azidentity. Дополнительные сведения о различных способах проверки подлинности см. в статье Проверка подлинности в Azure с помощью пакета Azure SDK для Go.

Войдите на портал Azure

  1. Выполните в Azure CLI следующую команду:

    az login
    

    Если в Azure CLI можно запустить браузер по умолчанию, откроется браузер со страницей входа на портал Azure.

    Если страница не открывается автоматически, перейдите по адресу https://aka.ms/devicelogin и введите код авторизации, отображаемый на терминале.

  2. Войдите на портал Azure с вашими учетными данными.

Создание группы ресурсов и хранилища ключей

В этом кратком руководстве используется предварительно созданное хранилище ключей Azure. Хранилище ключей можно создать, выполнив действия, описанные в кратких руководствах по Azure CLI, Azure PowerShell или порталу Azure.

Кроме того, можно выполнять эти команды Azure CLI или Azure PowerShell.

Внимание

Каждое хранилище ключей должно иметь уникальное имя. В следующих примерах замените <your-unique-keyvault-name> именем своего хранилища ключей.

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

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization

Предоставление доступа к хранилищу ключей

Чтобы получить разрешения для хранилища ключей с помощью контроль доступа на основе ролей (RBAC), назначьте роль имени участника-пользователя (UPN) с помощью команды Azure CLI az role assignment create.

az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

Замените upn>, subscription-id>, <<resource-group-name и <your-unique-keyvault-name>> фактическими значениями.< Имя участника-участника обычно будет иметь формат адреса электронной почты (например, username@domain.com).

Создание нового модуля Go и установка пакетов

Выполните следующие команды 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

Пример кода

Создайте файл с именем main.go и вставьте в него следующий код:

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

Выполнение кода

  1. Перед запуском кода создайте переменную среды с именем KEY_VAULT_NAME. В качестве значения переменной среды задайте имя созданного ранее хранилища ключей.

    export KEY_VAULT_NAME=quickstart-kv
    
  2. Выполните следующую команду, чтобы запустить приложение Go:

    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
    

Примеры кода

Дополнительные примеры см. в документации по модулю.

Очистка ресурсов

Удалите группу ресурсов и все оставшиеся ресурсы в этой группе, выполнив следующую команду:

az group delete --resource-group quickstart-rg

Следующие шаги