共用方式為


快速入門:使用 Azure Key Vault Go 用戶端程式庫管理秘密

在本快速入門中,您將瞭解如何使用 Azure SDK for Go 從 Azure 密鑰保存庫建立、擷取、列出和刪除秘密。

您可以將各種 物件類型 儲存在 Azure 金鑰儲存庫中。 您將秘密儲存在金鑰保存庫中時,可避免必須將它們儲存在程式碼中,這有助於改善應用程式的安全性。

開始使用 azsecrets 封裝,並了解如何使用 Go 來管理 Azure Key Vault 中的秘密。

必要條件

設定

基於此快速入門的目的,您會使用 azidentity 封裝,透過 Azure CLI 向 Azure 進行驗證。 若要深入了解多種驗證方法,請參閱使用 Azure SDK for Go 進行 Azure 驗證 (機器翻譯)

登入 Azure 入口網站

  1. 在 Azure CLI 中執行下列命令:

    az login
    

    如果 Azure CLI 可以開啟您的預設瀏覽器,則會在 Azure 入口網站登入頁面上這麼做。

    如果頁面未自動開啟,請移至 https://aka.ms/devicelogin,然後輸入終端機中顯示的授權碼。

  2. 使用您的帳戶登入資訊登入 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")
}

執行程式碼

  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.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

下一步