本稿は、Vault 運用(Ops)で実際によく遭遇する障害の切り分けと対処を、最短で原因に到達する型とともにまとめたものです。公式ドキュメントの基本動作に沿い、環境差やバージョン差でブレにくい概念とコマンド中心に解説します。
HashiCorp 認定(Security Automation / Vault 系)でも頻出のテーマであるヘルスチェックの戻りコード、HA 配下でのリダイレクト、トークン/リースの制約、Raft のクォーラムとスナップショットなどを、試験で問われやすい表現に合わせて押さえます。
Vault 障害は、クライアント層(CLI/SDK)、ネットワーク/TLS、Vault サーバ(初期化/Seal/状態)、ストレージ/HA(Raft/Consul)、認証/ポリシー/シークレットの5層に分けると速いです。まず「どの層で失敗しているか」を一発で仮置きしてから深掘りします。
最低限の現状把握として、サーバの状態(initialized/sealed/standby/active)と、API の疎通、LB のヘルス、ログの重大エラー(panic, permission denied, context deadline exceeded)を時系列で確認します。環境変数(VAULT_ADDR, VAULT_TOKEN, VAULT_CACERT など)の取り違えは頻出です。
最初の確認コマンド(疎通・状態・環境)
export VAULT_ADDR="https://vault.example.com:8200"
export VAULT_CACERT="/etc/ssl/certs/vault-ca.pem"
# サーバ状態(CLI)
vault status
# ヘルスエンドポイント(LB経由とノード直打ちを比較)
curl -sS --cacert "$VAULT_CACERT" "$VAULT_ADDR/v1/sys/health"
# 環境確認
env | grep -E "^VAULT_|^HTTPS?_" | sort
# サーバログ(systemd)
sudo journalctl -u vault -n 200 --no-pager
# ポート疎通(FW/LB確認)
nc -vz vault.example.com 8200 || true初期化済みか未初期化かを誤認すると遠回りになります。/v1/sys/init で initialized の真偽を確認し、初期化済みに再 init をかけないこと。Shamir の Unseal は同一クラスタの key shares を threshold 個集める必要があります。別クラスタのキー混入は定番事故です。
Auto-unseal(KMS 等)失敗は、KMS の権限不足、ネットワーク到達性、Vault 設定の seal ブロックのタイプ/パラメータ誤りが主要因です。監査ログやサーバログに KMS のエラーがそのまま出るので、まずそこを確認します。起動ループは、監査デバイスの出力先が書き込み不可でも発生します。
初期化状態・Unseal の確認と実施
# 初期化状態の確認(真に未初期化かを確認)
curl -sS --cacert "$VAULT_CACERT" "$VAULT_ADDR/v1/sys/init" | jq .
# 初期化(未初期化時のみ。shares/threshold は運用基準で設計)
# 出力される Unseal Keys と Initial Root Token は安全に分割保管
vault operator init \
-key-shares=5 \
-key-threshold=3 \
-format=json > /secure/offline/vault-init.json
# Shamir での Unseal(threshold 回実行)
vault operator unseal
# Auto-unseal 利用時はログで KMS 側の失敗を確認(例)
sudo journalctl -u vault -n 200 --no-pager | grep -i -E "kms|seal|unseal|permission|denied"
Raft は過半数のクォーラムが前提です。ノード故障やネットワーク分断でリーダー選出ができないと全体が停滞します。まず list-peers と autopilot を見て、投票権の有無、リーダー、ラグを把握します。
ディスク逼迫は最も多い障害です。スナップショットを計画的に取得・保管し、必要時にリストアできる運用を整えます。TLS/ホスト名不整合、api_addr/cluster_addr の誤設定も、転送失敗やリダイレクト失敗の大きな原因です。
Raft 周りの調査とスナップショット運用
# ピア状況とオートパイロット
vault operator raft list-peers -format=json | jq .
vault operator raft autopilot get -format=json | jq .
# スナップショットの取得(定期バックアップに組み込む)
vault operator raft snapshot save /backup/vault-$(date +%F).snap
# リストア(検証環境で手順を必ず確認)
# vault operator raft snapshot restore /backup/vault-YYYY-MM-DD.snap
# ディスク確認
df -h /var/lib/vault
inode=$(df -i /var/lib/vault | awk 'NR==2{print $4}') && echo "free inodes: $inode"
HA クラスタで LB を前段に置く場合は、api_addr がクライアントから解決・到達でき、スタンバイがアクティブへ適切にフォワード/リダイレクトできることが重要です。cluster_addr はノード間通信に使用されます。
ヘルスエンドポイントは状態により戻りコードが変わります。デフォルトでは、アクティブは 200、スタンバイは 429、シールドは 503、未初期化は 501。LB のヘルスチェックでスタンバイも通したい場合は、standbyok=true を使い、必要に応じてパラメータで戻りコードを調整します。
Vault リクエスト経路(HA + LB)
ヘルスエンドポイントの実用例
# アクティブ/スタンバイをともに正常とみなす(LB 側で 200 を期待)
curl -sS --cacert "$VAULT_CACERT" \
"$VAULT_ADDR/v1/sys/health?standbyok=true&perfstandbyok=true" | jq .
# 状態別コードを明示指定(必要に応じて)
# 例: アクティブ200、スタンバイ200、シールド503、未初期化501
curl -sS --cacert "$VAULT_CACERT" \
"$VAULT_ADDR/v1/sys/health?standbyok=true&activecode=200&standbycode=200&sealedcode=503&uninitcode=501" -o /dev/null -w "%{http_code}\n"
トークンの TTL は、発行時 TTL がマウントの max_ttl を超えない、かつトークン自体が renewable である必要があります。periodic トークンは max_ttl の制約を受けず、明示的に renew が必要です。更新が失敗する場合、対象のリース/トークンが renew 不可か、上限 TTL を越えようとしている可能性が高いです。
OIDC/JWT 認証の失敗は、audience、iss、bound_claims の不一致や時刻ずれが定番です。ポリシー不足による permission denied は、token capabilities で対象パスの権限を見るのが最短です。ダイナミックシークレット(DB など)のリース更新/破棄は、ネットワークやバックエンド権限で失敗しやすいので、エンジン側ログとの突合を行います。
トークン/リース調査の実例
# トークンの属性確認
vault token lookup $VAULT_TOKEN
# 対象パスの実効権限を確認(permission denied の切り分け)
vault token capabilities $VAULT_TOKEN secret/data/app/config
# リースの一覧と更新(更新不可ならエラーに)
vault list sys/leases/lookup/database/creds/app-role || true
vault lease renew <lease_id>
# マウントやロールの TTL 設定確認
vault read sys/mounts | jq '.data'
# 例: KV の場合はバージョンとパスに注意(kv-v2 は data/ パス)
現場で頻出するログ/メッセージを、原因と確認ポイント、即使えるコマンドに紐付けました。まずは再現環境を固定し、LB 経由/直打ち、TLS 有無を比べるのが鉄則です。
| 症状/ログ抜粋 | 主な原因 | どこを確認 | 代表的コマンド |
|---|---|---|---|
| Vault is sealed | 未 Unseal/Auto-unseal 失敗 | /v1/sys/health, サーバログ, seal 設定 | vault status; journalctl -u vault |
| permission denied | ポリシー不足/パス誤り | token capabilities, ポリシー | vault token capabilities <token> <path> |
| context deadline exceeded | ネットワーク断/リダイレクト先不可 | LB 経由/直打ち比較, api_addr 到達性 | curl /v1/sys/health; ping/trace |
| request forwarding failed | api_addr 不達/証明書SAN不一致 | 各ノードの api_addr・証明書 | vault status(ノード直打ち) |
| cluster leader not found | Raft 選出未完/クォーラム未達 | raft list-peers, autopilot, ノード死活 | vault operator raft list-peers |
| x509: certificate signed by unknown authority | CA 未設定/不信頼 | VAULT_CACERT/システムCA, ルート証明書 | curl --cacert <ca.pem> ... |
ログから特徴語を拾う(例)
sudo journalctl -u vault -S "-5min" | grep -i -E \
"sealed|unseal|forward|leader|raft|denied|deadline|certificate|x509" -n
Ops
問題 1
Vault を HA クラスタで運用し、前段にロードバランサを置いています。スタンバイノードもヘルスチェックを通過させたい場合、最も適切な設定はどれか。
正解: A
ヘルスエンドポイントはデフォルトでスタンバイ時に 429 を返すため、LB のヘルスでスタンバイも成功とするには standbyok=true(および必要に応じて perfstandbyok=true)を付与します。api_addr は各ノード固有で到達可能な値が推奨で、全ノード同一の VIP を設定するのは誤りです。スタンバイを常に昇格させる設定は不要かつ不適切です。/v1/sys/leader は用途が異なり、単独で LB ヘルスとしては不十分です。
sys/health の 429 は障害ですか?スタンバイでも 200 にできますか?
429 はデフォルト動作で、スタンバイ状態を示します。障害ではありません。LB でスタンバイも正常扱いにしたい場合は /v1/sys/health?standbyok=true(perfスタンバイなら perfstandbyok=true も)を使い、必要なら戻りコードをパラメータで明示指定します。
Integrated Storage(Raft) のスナップショットはどのくらいの頻度で取得すべきですか?
変更量と RPO/RTO によりますが、少なくとも日次(重要環境では数時間おき)で取得し、世代管理と異リージョン保管を推奨します。取得手順とリストア手順は検証環境で定期的に演習し、ディスク逼迫時の運用手順(古いスナップショットの整理)も整備します。
Shamir から Auto-unseal へ安全に移行するポイントは?
メンテナンスウィンドウで実施し、seal ブロックの設定・KMS 権限・疎通を事前検証します。移行前に Raft スナップショット取得、監査ログ有効化、ロールバック手順(旧設定への復帰)を用意します。移行後は vault status と再起動テストで自動 Unseal を確認します。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token
HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...
Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる
HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...
Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く
HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...
Vault Tokens の基礎: 認証の起点となる概念
HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...
Vault のトークン種類を正しく使い分ける: service / batch 実践
HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...