共用方式為


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

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

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

開始使用 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

下一步