Vault を Integrated Storage(Raft)で運用する場合の第一選択は、公式が提供する Raft Snapshot 機能です。オンラインで一貫性のあるポイントインタイムを取得でき、復旧時も手順が明確です。
本稿は実務で迷いやすいポイント(権限、停止条件、復旧順序、互換性)を押さえつつ、Ops系資格対策で問われやすい要点を短時間で確認できるように構成しています。挙動は HashiCorp 公式ドキュメントの安定的な仕様に基づいています。
Integrated Storage(Raft)は Vault 本体に内蔵されたストレージで、クラスタ内のノード間で Raft 合意を行います。Raft Snapshot は、このストレージ内容を一貫性のある形でダンプする公式手段です。取得はオンラインで可能(リーダーからの整合取得)で、復旧は計画停止下で実施します。
スナップショットはストレージ層のデータを含みますが、Unseal キー自体は含みません。よってスナップショットは鍵管理(Shamir のキーシェアや Auto-Unseal の KMS 設定)を代替しません。復旧には従来どおりの Unseal 手段が必要です。
比較の基準として、Raft Snapshot と他の一般的な手段(Consul バックエンド時の Consul Snapshot、VM/FS レベルのバックアップ)を並べると運用判断がしやすくなります。
| 手段 | 対象/範囲 | 一貫性 | リストア時の停止・前提 |
|---|---|---|---|
| Vault Raft Snapshot | Integrated Storage(Raft)データ | リーダー基準で一貫 | クラスタ停止、対象ノードはシール状態かつ Raft データディレクトリ空が前提 |
| Consul Snapshot(参考) | Consul KV 全体(Vault が Consul バックエンド時) | Consul 側の一貫性 | Consul 停止・設計次第。Vault 側は別途復旧手順が必要 |
| VM/FSレベルバックアップ | ファイルシステム全体 | タイミング次第で不整合リスク | 停止推奨(停止せず実施は非推奨)・復旧整合性の保証が難しい |
スナップショット取得はオンラインで行えます。CLI から任意ノードに対して実行すると、内部的にリーダーが一貫性のあるスナップショットを生成します。取得用トークンには sudo 権限(operator 機能の実行が可能)が必要です。
保存先は扱いやすい単一ファイルです。ローテーション、オフサイト転送、整合性検証(ハッシュ算出)を運用に組み込みましょう。サイズはデータ量に比例し、圧縮で小さくできます。
取得・検証・ローテーションの例
# 1) 取得(任意ノードで実行、API はリーダーへプロキシ)
export VAULT_ADDR="https://vault.example.com:8200"
export VAULT_TOKEN="s.xxxxxx" # sudo 権限付き
# 日付付きで保存
vault operator raft snapshot save /var/backups/vault/vault-$(date +%Y%m%d-%H%M%S).snap
# 2) 整合性チェック用ハッシュ
sha256sum /var/backups/vault/vault-*.snap >> /var/backups/vault/SHA256SUMS
# 3) 圧縮とオフサイト転送(例: gzip + s3 cp)
ls -1 /var/backups/vault/vault-*.snap | tail -n 1 | xargs -I {} gzip {}
aws s3 cp /var/backups/vault/ s3://vault-bak/ --recursive --exclude "*" --include "*.gz"
# 4) ローテーション(14日超の削除)
find /var/backups/vault -type f -name "*.snap.gz" -mtime +14 -delete
# (任意)cron 設定例:毎時00分
# 0 * * * * /usr/local/bin/vault-snapshot.sh >> /var/log/vault-snapshot.log 2>&1スナップショットは Raft リーダー視点の一貫性を持つため、途中書き込みによる中途半端な状態は含まれません。生成はオンラインで行われ、通常のトラフィックに対して短時間の CPU/IO 負荷上昇が見られる程度です。高負荷時間帯を避ける運用が無難です。
ファイル自体は Vault のストレージ暗号化後のデータを含むため、単独では平文化できません。復旧には既存の Unseal 手段(Shamir のキーシェアまたは Auto-Unseal の KMS 権限)が必須です。よってスナップショットと鍵情報は分離保管し、KMS 権限やキーシェアの所在・有効性を定期確認してください。
復旧は計画停止のうえで、まず 1 台のノードにスナップショットを適用して新しいリーダーを形成し、その後に他ノードを join させます。対象ノードの Raft データディレクトリは空であること、Vault はシール状態(Unseal しない)で API 応答が可能な状態であることが前提です。他ノードは停止しておきます。
互換性は同一バージョン(少なくとも同一メジャー/マイナー、同一または新しめのパッチ)を推奨します。バージョン間の内部フォーマット差分がある場合、下位互換が保証されない可能性があるため、公式のリリースノートとストレージの互換性記載を事前に確認してください。
Raft Snapshot リストアの流れ
典型的なリストア手順(例)
# 0) 全ノード停止(例)
systemctl stop vault # すべてのノードで実行
# 1) 復旧対象ノードを選定し、Raft データディレクトリを空に
rm -rf /opt/vault/data/raft/*
# 2) 対象ノードのみ Vault を起動(Sealed のまま)
systemctl start vault
export VAULT_ADDR="https://vault-node-a.example.com:8200"
export VAULT_TOKEN="s.restore-token-with-sudo"
# 3) スナップショットを適用(-force 必須)
vault operator raft snapshot restore -force /safe/path/backup.snap
# 4) Unseal(Shamir または Auto-Unseal)
vault operator unseal # 必要回数のキー入力
# 5) 他ノードを順次起動し、Leader に join(各ノードで実行)
export VAULT_ADDR="https://vault-node-b.example.com:8200"
vault operator raft join https://vault-node-a.example.com:8200
export VAULT_ADDR="https://vault-node-c.example.com:8200"
vault operator raft join https://vault-node-a.example.com:8200
# 6) ヘルス確認
export VAULT_ADDR="https://vault-node-a.example.com:8200"
vault status
vault operator raft list-peersスナップショットは災害復旧(DR)におけるオフライン・ポイントインタイム復旧の要です。一方で、RPO/RTO をさらに厳しくしたい場合は、Vault Enterprise の DR レプリケーションなどオンライン複製機能を検討します。オフラインのスナップショットはレプリケーションの補完としても有効です(論理削除・誤操作からの時点復旧)。
ネットワーク分離された保管(オフサイト/WORM)、復旧演習の定期実施、キー管理(Shamir/Auto-Unseal)の独立保全が実現のキーポイントです。
Raft Snapshot はオンライン取得・オフライン適用という設計を押さえ、復旧前提(シール状態・空ディレクトリ・単一ノードからの再形成)を誤らないことが重要です。Unseal キーはスナップショットに含まれない点、sudo 権限トークンが必要な点も頻出です。
Ops
問題 1
Vault の Integrated Storage(Raft)を使用している。計画停止のうえでスナップショットから復旧する適切な前提条件として最も正しいものはどれか。
正解: A
Raft Snapshot の restore は、対象ノードをシール状態かつ Raft ディレクトリが空であること、他ノードは停止していることが前提です。-force の指定と sudo 権限トークンが必要です。オンラインでの適用や Unseal 済みリーダーへの適用は推奨されません。
スナップショットに Unseal キー(Shamir のキーシェア/KMS 情報)は含まれますか?
含まれません。スナップショットはストレージ層の暗号化済みデータであり、復旧後の Unseal には従来どおりのキーシェア、または Auto-Unseal の KMS 権限が必要です。鍵情報はスナップショットとは別経路・別場所で保全してください。
別のクラスタサイズや異なる IP 構成にリストアできますか?
可能です。まず 1 台でスナップショットを復元しリーダーを形成、以降は新構成のノードを raft join で参加させます。既存データの残るクラスタへ上書きするのは避け、対象ノードの Raft データディレクトリは空にしてください。
Vault のバージョン互換はどう扱えばよいですか?
原則として同一メジャー/マイナーバージョンでの復旧を推奨します。少なくとも元より古いバージョンへの復旧は避け、同等または新しめのパッチへ復旧してください。詳細は該当バージョンの公式ドキュメントとリリースノートを確認し、事前に検証環境でリハーサルを行うのが安全です。
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...