快速入門:使用 Azure Key Vault Go 用戶端程式庫管理秘密
在本快速入門中,您將了解如何使用 Azure SDK for Go,從 Azure Key Vault 建立、擷取、列出和刪除秘密。
您可以在 Azure Key Vault 中儲存多種物件類型。 您將秘密儲存在金鑰保存庫中時,可避免必須將它們儲存在程式碼中,這有助於改善應用程式的安全性。
開始使用 azsecrets 封裝,並了解如何使用 Go 來管理 Azure Key Vault 中的秘密。
必要條件
- Azure 訂用帳戶。 如果您還沒有訂用帳戶,您可以建立免費帳戶。
- 已安裝 Go 1.18 版或更新版本。
- 已安裝 Azure CLI。
設定
基於此快速入門的目的,您會使用 azidentity 封裝,透過 Azure CLI 向 Azure 進行驗證。 若要深入了解多種驗證方法,請參閱使用 Azure SDK for Go 進行 Azure 驗證 (機器翻譯)。
登入 Azure 入口網站
在 Azure CLI 中執行下列命令:
az login
如果 Azure CLI 可以開啟預設瀏覽器,它會在 Azure 登入頁面登入。
如果頁面未自動開啟,請移至 https://aka.ms/devicelogin,然後輸入終端中顯示的授權碼。
使用您的帳戶登入資訊登入 Azure 入口網站。
建立資源群組和金鑰保存庫
本快速入門會使用預先建立的 Azure 金鑰保存庫。 您可以遵循 Azure CLI 快速入門、Azure PowerShell 快速入門或 Azure 入口網站快速入門中的步驟來建立金鑰保存庫。
或者,您也可以直接執行這些 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
授與對金鑰保存庫的存取權
若要透過角色型存取控制 (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