--- title: HashiCorp VaultのAuto UnsealをAzure Key Vaultで行うメモ summary: この記事では、Azure Key Vault を利用した Vault の Auto Unseal 設定手順を、リソース作成から SP 設定、vault.hcl 生成まで解説します。 tags: ["Vault", "Auto Unseal", "Azure Key Vault", "Azure"] categories: ["Dev", "SecretManagement", "Vault"] date: 2026-02-24T04:02:11.651Z updated: 2026-02-24T04:02:11.651Z --- ### 環境変数設定 以下の変数に、後続のコマンドで使用するリソース名やリージョンを設定します。 ```bash export RESOURCE_GROUP="rg-vault" export LOCATION="japaneast" export KEYVAULT_NAME="kv-vault-unseal" export KEY_NAME="vault-unseal-key" export SP_NAME="sp-vault-unseal" ``` ### リソースグループ作成 指定した名前とリージョンで Azure のリソースグループを作成します。 ```bash az group create --name $RESOURCE_GROUP --location $LOCATION ``` ### Key Vault 作成 作成したリソースグループ内に、標準 SKU の Key Vault をデプロイします。 ```bash az keyvault create \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --sku standard ``` ### 自分自身にキー操作権限を付与 Key Vault のキーを操作できるように、現在サインインしているユーザーに **Key Vault Crypto Officer** ロールを付与します。 ```bash # サインイン中のユーザーのオブジェクト ID を取得 export MY_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv) # 作成した Key Vault のリソース ID を取得 export KEYVAULT_ID=$(az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query id --output tsv) # ロール割り当てを作成 az role assignment create \ --role "Key Vault Crypto Officer" \ --assignee $MY_OBJECT_ID \ --scope $KEYVAULT_ID ``` ### キー作成 Key Vault 内に RSA 2048 ビットのキーを作成します。Vault のアンシールに使用するキーです。 ```bash az keyvault key create \ --vault-name $KEYVAULT_NAME \ --name $KEY_NAME \ --kty RSA \ --size 2048 ``` ### Service Principal の作成 Vault が Azure Key Vault にアクセスできるように、専用の Service Principal (SP) を作成し、必要なロールを付与します。 ```bash # SP を作成し、必要な情報を取得 export SP_OUTPUT=$(az ad sp create-for-rbac \ --name $SP_NAME \ --years 99 \ --output json) export AZURE_CLIENT_ID=$(echo $SP_OUTPUT | jq -r '.appId') export AZURE_CLIENT_SECRET=$(echo $SP_OUTPUT | jq -r '.password') export AZURE_TENANT_ID=$(echo $SP_OUTPUT | jq -r '.tenant') export SP_APP_ID=$AZURE_CLIENT_ID # SP に「Key Vault Crypto Service Encryption User」ロールを付与 az role assignment create \ --role "Key Vault Crypto Service Encryption User" \ --assignee $SP_APP_ID \ --scope $KEYVAULT_ID ``` ### vault.hcl に必要な設定値を出力 ```bash # 環境変数を利用して seal 設定ブロックを生成 cat << EOF seal "azurekeyvault" { tenant_id = "$AZURE_TENANT_ID" client_id = "$AZURE_CLIENT_ID" client_secret = "$AZURE_CLIENT_SECRET" vault_name = "$KEYVAULT_NAME" key_name = "$KEY_NAME" } EOF ``` この出力結果を `vault.hcl` の適切な位置に貼り付けることで、Vault が Azure Key Vault をシールバックエンドとして使用できるようになります。 ### Auto Unseal への移行 すでに Vault が Shamir(手動 unseal)で初期化されている場合は、Auto Unseal への移行が必要です。 ```bash vault operator unseal -migrate ``` を 3 回実行して、それぞれの既存の unseal key を入力すれば OK です。