你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:使用 Azure Key Vault Go 客户端库管理机密
本快速入门介绍如何使用 Azure SDK for Go 在 Azure 密钥保管库中创建、检索、列出和删除机密。
Azure 密钥保管库中可以存储各种对象类型。 将机密存储在密钥保管库中时,无需将它们存储在代码中,从而提高应用程序的安全性。
开始使用 azsecrets 包,并了解如何使用 Go 管理 Azure 密钥保管库中的机密。
先决条件
- Azure 订阅。 如果还没有订阅,则可以免费创建一个。
- 已安装 Go 版本 1.18 或更高版本。
- 已安装 Azure CLI。
设置
对于本快速入门,请使用 Azure CLI 通过 azidentity 包向 Azure 进行身份验证。 若要了解各种身份验证方法,请参阅使用 Azure SDK for Go 进行 Azure 身份验证。
登录到 Azure 门户
在 Azure CLI 中运行以下命令:
az login
如果 Azure CLI 可以打开默认浏览器,它将在默认浏览器中打开 Azure 门户登录页。
如果此页面没有自动打开,请转到 https://aka.ms/devicelogin,然后输入在你的终端中显示的授权代码。
使用你的帐户凭据登录到 Azure 门户。
创建资源组和 Key Vault
本快速入门使用预先创建的 Azure 密钥保管库。 可以遵循 Azure CLI 快速入门、Azure PowerShell 快速入门或 Azure 门户快速入门中的步骤创建 Key Vault。
或者,也可运行这些 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
授予对 Key Vault 的访问权限
若要通过基于角色的访问控制 (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.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")
}
运行代码
在运行代码前,请创建名为
KEY_VAULT_NAME
的环境变量。 将环境变量值设置为之前创建的密钥保管库的名称。export KEY_VAULT_NAME=quickstart-kv
若要启动 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