クイック スタート: 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 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")
}
コードの実行
コードを実行する前に、
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