クイック スタート: Go クライアント ライブラリで Azure Key Vault を管理する
このクイック スタートでは、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 portal にサインインする
Azure CLI で、次のコマンドを実行します。
az login
Azure CLI で既定のブラウザーを開くことができる場合、Azure portal サインイン ページで行えます。
自動的にページが開かない場合は、https://aka.ms/devicelogin に進み、ターミナルに表示されている認証コードを入力してください。
アカウントの資格情報で Azure portal にサインインします。
リソース グループとキー コンテナー インスタンスを作成する
以下の Azure CLI コマンドを実行します。
az group create --name quickstart-rg --location eastus
az keyvault create --name quickstart-kv --resource-group quickstart-rg
Key Vault 名はグローバルに一意であるため、その名前は既に取得されている可能性があります。 Key Vault 名に、他の一意の値を選択する必要がある場合があります。
新しい 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
という名前の環境変数を作成します。 環境変数の値を、前に作成した Azure Key Vault の名前に設定します。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