快速入门:使用 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 cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.
如果 Azure CLI 可以打开默认浏览器,它将在默认浏览器中打开 Azure 门户登录页。
如果此页面没有自动打开,请转到 https://aka.ms/deviceloginchina,然后输入在你的终端中显示的授权代码。
使用你的帐户凭据登录到 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")
}
运行代码
在运行代码前,请创建名为
KEY_VAULT_NAME
的环境变量。 将环境变量值设置为之前创建的密钥保管库的名称。export KEY_VAULT_NAME=quickstart-kv
若要启动 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