---
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 です。
