次の方法で共有


クイック スタート: 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 Key Vault を使用します。 キー コンテナーは、Azure CLI のクイックスタートAzure PowerShell のクイックスタート、または Azure portal のクイックスタートの手順に従って作成できます。

別の方法として、これらの 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という名前の環境変数を作成します。 環境変数の値を、前に作成した 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

次のステップ