クイック スタート: Go クライアント ライブラリで Azure Key Vault を管理する

このクイック スタートでは、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 portal にサインインする

  1. Azure CLI で、次のコマンドを実行します。

    az login
    

    Azure CLI で既定のブラウザーを開くことができる場合、Azure portal サインイン ページで行えます。

    自動的にページが開かない場合は、https://aka.ms/devicelogin に進み、ターミナルに表示されている認証コードを入力してください。

  2. アカウントの資格情報で Azure portal にサインインします。

リソース グループとキー コンテナー インスタンスを作成する

以下の Azure CLI コマンドを実行します。

az group create --name quickstart-rg --location eastus
az keyvault create --name quickstart-kv --resource-group quickstart-rg

新しい 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 := os.Getenv("AZURE_KEY_VAULT_URI")

    // 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という名前の環境変数を作成します。 環境変数の値を、前に作成した Azure Key Vault の名前に設定します。

    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

次のステップ