閱讀英文

共用方式為

快速入门:使用 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 密钥保管库。 可以按照 Azure CLI 快速入门Azure PowerShell 快速入门Azure 门户快速入门中的步骤创建密钥保管库。

或者,也可运行这些 Azure CLI 或 Azure PowerShell 命令。

重要

每个密钥保管库必须具有唯一的名称。 在以下示例中,将 <your-unique-keyvault-name> 替换为密钥保管库的名称。

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

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

授予对密钥库的访问权限

若要通过基于角色的访问控制 (RBAC) 授予对密钥保管库的权限,请使用 Azure CLI 命令 az role assignment create 将角色分配给你的“用户主体名称”(UPN)。

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> 替换为你的实际值。 你的 UPN 通常采用电子邮件地址格式(例如 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.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

后续步骤