本快速入门介绍如何使用 Azure SDK for Go 创建、检索、更新、列出和删除 Azure 密钥保管库 密钥。
Azure 密钥保管库 是一项云服务,用作安全的机密存储。 可以安全地存储密钥、密码、证书和其他机密。 有关 密钥保管库 的详细信息,请参阅概述。
按照本指南了解如何使用 azkeys 包通过 Go 管理 Azure 密钥保管库 密钥。
先决条件
登录到 Azure 门户
在 Azure CLI 中运行以下命令:
az login如果 Azure CLI 可以打开默认浏览器,则会将浏览器打开到 Azure 门户登录页。
如果页面未自动打开,请转到 https://aka.ms/deviceloginchina,然后输入终端中显示的授权代码。
使用你的帐户凭据登录到 Azure 门户。
创建资源组和密钥保管库
本快速入门使用预先创建的 Azure 密钥保管库。 可以按照以下快速入门中的步骤创建密钥保管库:
或者,可以运行这些 Azure CLI 命令。
重要
每个密钥保管库必须具有唯一的名称。 在以下示例中,将 <vault-name> 替换为您的密钥保管库的名称。
az group create --name "myResourceGroup" -l "ChinaEast2"
az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true
授予对密钥库的访问权限
若要通过基于角色的访问控制 (RBAC) 授予对密钥保管库的权限,请使用 Azure CLI 命令 az role assignment create 将角色分配给你的“用户主体名称”(UPN)。
az role assignment create --role "Key Vault Crypto 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 quickstart-keys
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
go get -u github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys
创建示例代码
创建名为 main.go 的文件并将以下代码复制到该文件中:
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys"
)
func main() {
keyVaultName := os.Getenv("KEY_VAULT_NAME")
keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.cn/", keyVaultName)
// create credential
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
// create azkeys client
client, err := azkeys.NewClient(keyVaultUrl, cred, nil)
if err != nil {
log.Fatal(err)
}
// create RSA Key
rsaKeyParams := azkeys.CreateKeyParameters{
Kty: to.Ptr(azkeys.JSONWebKeyTypeRSA),
KeySize: to.Ptr(int32(2048)),
}
rsaResp, err := client.CreateKey(context.TODO(), "new-rsa-key", rsaKeyParams, nil)
if err != nil {
log.Fatalf("failed to create rsa key: %v", err)
}
fmt.Printf("New RSA key ID: %s\n", *rsaResp.Key.KID)
// create EC Key
ecKeyParams := azkeys.CreateKeyParameters{
Kty: to.Ptr(azkeys.JSONWebKeyTypeEC),
Curve: to.Ptr(azkeys.JSONWebKeyCurveNameP256),
}
ecResp, err := client.CreateKey(context.TODO(), "new-ec-key", ecKeyParams, nil)
if err != nil {
log.Fatalf("failed to create ec key: %v", err)
}
fmt.Printf("New EC key ID: %s\n", *ecResp.Key.KID)
// list all vault keys
fmt.Println("List all vault keys:")
pager := client.NewListKeysPager(nil)
for pager.More() {
page, err := pager.NextPage(context.TODO())
if err != nil {
log.Fatal(err)
}
for _, key := range page.Value {
fmt.Println(*key.KID)
}
}
// update key properties to disable key
updateParams := azkeys.UpdateKeyParameters{
KeyAttributes: &azkeys.KeyAttributes{
Enabled: to.Ptr(false),
},
}
// an empty string version updates the latest version of the key
version := ""
updateResp, err := client.UpdateKey(context.TODO(), "new-rsa-key", version, updateParams, nil)
if err != nil {
panic(err)
}
fmt.Printf("Key %s Enabled attribute set to: %t\n", *updateResp.Key.KID, *updateResp.Attributes.Enabled)
// delete the created keys
for _, keyName := range []string{"new-rsa-key", "new-ec-key"} {
// DeleteKey returns when Key Vault has begun deleting the key. That can take several
// seconds to complete, so it may be necessary to wait before performing other operations
// on the deleted key.
delResp, err := client.DeleteKey(context.TODO(), keyName, nil)
if err != nil {
panic(err)
}
fmt.Printf("Successfully deleted key %s", *delResp.Key.KID)
}
}
运行代码
在运行代码之前,请创建名为 的 KEY_VAULT_NAME环境变量。 将环境变量值设置为之前创建的 Azure 密钥保管库的名称。
export KEY_VAULT_NAME=quickstart-kv
接下来,运行以下 go run 命令来运行应用:
go run main.go
Key ID: https://quickstart-kv.vault.azure.cn/keys/new-rsa-key4/f78fe1f34b064934bac86cc8c66a75c3: Key Type: RSA
Key ID: https://quickstart-kv.vault.azure.cn/keys/new-ec-key2/10e2cec51d1749c0a26aab784808cfaf: Key Type: EC
List all vault keys:
https://quickstart-kv.vault.azure.cn/keys/new-ec-key
https://quickstart-kv.vault.azure.cn/keys/new-ec-key1
https://quickstart-kv.vault.azure.cn/keys/new-ec-key2
https://quickstart-kv.vault.azure.cn/keys/new-rsa-key4
Enabled set to: false
Successfully deleted key https://quickstart-kv.vault.azure.cn/keys/new-rsa-key4/f78fe1f34b064934bac86cc8c66a75c3
注意
输出仅用于提供信息。 返回值可能因 Azure 订阅和 Azure 密钥保管库 而异。
代码示例
有关更多示例,请参阅 模块文档。
清理资源
运行以下命令来删除资源组及其所有剩余资源:
az group delete --resource-group "myResourceGroup"