環境変数設定
以下の変数に、後続のコマンドで使用するリソース名やリージョンを設定します。
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 のリソースグループを作成します。
az group create --name $RESOURCE_GROUP --location $LOCATION
Key Vault 作成
作成したリソースグループ内に、標準 SKU の Key Vault をデプロイします。
az keyvault create \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--sku standard
自分自身にキー操作権限を付与
Key Vault のキーを操作できるように、現在サインインしているユーザーに Key Vault Crypto Officer ロールを付与します。
# サインイン中のユーザーのオブジェクト 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 のアンシールに使用するキーです。
az keyvault key create \
--vault-name $KEYVAULT_NAME \
--name $KEY_NAME \
--kty RSA \
--size 2048
Service Principal の作成
Vault が Azure Key Vault にアクセスできるように、専用の Service Principal (SP) を作成し、必要なロールを付与します。
# 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 に必要な設定値を出力
# 環境変数を利用して 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 への移行が必要です。
vault operator unseal -migrate
を 3 回実行して、それぞれの既存の unseal key を入力すれば OK です。