快速入门:使用 Azure Key Vault Go 客户端库管理机密

本快速入门介绍如何使用 Azure SDK for Go 在 Azure 密钥保管库中创建、检索、列出和删除机密。

Azure 密钥保管库中可以存储各种对象类型。 将机密存储在密钥保管库中时,无需将它们存储在代码中,从而提高应用程序的安全性。

开始使用 azsecrets 包,并了解如何使用 Go 管理 Azure 密钥保管库中的机密。

先决条件

设置

对于本快速入门,请使用 Azure CLI 通过 azidentity 包向 Azure 进行身份验证。 若要了解各种身份验证方法,请参阅使用 Azure SDK for Go 进行 Azure 身份验证

登录到 Azure 门户

  1. 在 Azure CLI 中运行以下命令:

    az cloud set -n AzureChinaCloud
    az login
    # az cloud set -n AzureCloud   //means return to Public Azure.
    

    如果 Azure CLI 可以打开默认浏览器,它将在默认浏览器中打开 Azure 门户登录页。

    如果此页面没有自动打开,请转到 https://aka.ms/deviceloginchina,然后输入在你的终端中显示的授权代码。

  2. 使用你的帐户凭据登录到 Azure 门户。

创建资源组和密钥保管库实例

运行以下 Azure CLI 命令:

az group create --name quickstart-rg --location chinaeast
az keyvault create --name quickstart-kv --resource-group quickstart-rg

Key Vault 名称全局唯一,因此可能已获取该名称。 可能需要为 Key Vault 名称选择唯一值。

创建新的 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"

    "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.cn/", 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.cn/secrets/quickstart-secret
    Secret ID: https://quickstart-kv.vault.azure.cn/secrets/secretName
    quickstart-secret has been deleted
    

代码示例

有关更多示例,请参阅模块文档

清理资源

运行以下命令来删除资源组及其所有剩余资源:

az group delete --resource-group quickstart-rg

后续步骤