Vaultはプロセス起動直後は必ず“Sealed”状態から始まり、Barrierを開くUnsealが完了して初めて秘密情報を扱えます。
本稿では、起動〜Unseal〜HAアクティブ化までの流れと、Shamir方式(手動)とKMS/HSM方式(Auto Unseal)の違いを、運用と試験対策の両視点で押さえます。
Vaultは設定ファイルを読み込み、ストレージ(Raft統合ストレージやConsul等)、リスナー、そして“seal”スタンザ(デフォルトはShamir)を初期化します。プロセスは必ずSealedで立ち上がり、Barrier(暗号化のバリア)を開くUnsealが必要です。
Unsealが完了すると、HA構成ではリーダー選出が行われ、1台がActive、他はStandbyとして動作します。Auto Unseal構成では各ノードがKMS/HSMに問い合わせて自動的にBarrierを開き、手動操作は不要になります。
Vault 起動〜Unseal〜HA化の流れ(概念図)
[Client]
|
[Vault Process] --read--> [Config: storage/listener/seal]
|
v
[Sealed Barrier]
/ \
/ \
manual auto
(SHAMIR) (KMS/HSM)
| |
v v
[Unseal Shares t/n] [KMS decrypt barrier key]
\ /
v v
[Barrier Opened]
|
v
[HA Election]
/ \
v v
[Active] [Standby]
| |
serve writes proxy/reads* (*構成による)Vaultはストレージ上のデータを“Barrier”で暗号化し、Barrierを開くための鍵素材を保護します。初期化(operator init)時に生成されるマスターキーは、Shamirの秘密分散で分割され(手動Unsealの場合)、所定のしきい値に達すると復元されてBarrierが開きます。
Auto Unsealでは、マスターキーの保護と復号をKMS/HSM等の外部キーマネージャが担い、起動時に自動でBarrierが開きます。この場合は“復旧キー(Recovery Keys)”が発行され、災害復旧やrootトークン生成等の特定オペレーションに用います。
手動Unsealは、初期化で作成したUnsealキーのうち“しきい値”の数だけを入力してBarrierを開きます。HAクラスタでは各ノードでUnsealが必要です(Active/Standbyともに)。
キー管理は運用上の要。共有数としきい値は組織の人員/BCPに合わせて設計し、キーの保管・配布・ローテーション(rekey)を計画します。
典型的な手動Unseal手順(例)
# 初期化(共有数5、しきい値3)※クラスタで一度のみ
vault operator init -key-shares=5 -key-threshold=3
# => Unseal Key 1..5 と 初期rootトークンが出力される(安全に保管)
# Unseal(1台につき3回、異なるキーを入力)
vault operator unseal
vault operator unseal
vault operator unseal
# 状態確認
vault status
# Sealed: false になっていればUnseal完了
# しきい値の変更や共有の再生成(ローテーション)
vault operator rekey -key-shares=5 -key-threshold=3
# 手動で再Sealする場合(緊急時の遮断など)
vault operator sealAuto Unsealは、Vaultのマスターキーを外部KMS/HSMで保護し、起動時に各ノードが自動でBarrierを開きます。人的オペレーションを減らし、再起動やスケールアウト時の負担を抑えられます。
本方式ではUnsealキーの代わりにRecovery Keysが発行されます。generate-rootやrekey(recovery用)など特定の保守操作に必要となるため、分散保管ポリシーを整えておきます。
Auto Unseal(AWS KMS例)設定スニペット
# /etc/vault.d/config.hcl(抜粋)
storage "raft" {
path = "/opt/vault/data"
node_id = "vault-1"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 0
tls_cert_file = "/etc/vault.d/certs/server.crt"
tls_key_file = "/etc/vault.d/certs/server.key"
}
seal "awskms" {
region = "ap-northeast-1"
kms_key_id = "arn:aws:kms:ap-northeast-1:123456789012:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
api_addr = "https://vault-1.example.com:8200"
cluster_addr = "https://vault-1.example.com:8201"HA構成(Raft/Consul)では、全ノードがUnsealedであることが前提です。Activeノードがリーダーとして書き込みを担当し、Standbyはリクエストのプロキシや読み取り(設定と機能に依存)を行います。未Unsealのノードはクラスタに参加できず、フェイルオーバーの健全性を損ないます。
Auto Unsealでは各ノードが独立してKMS/HSMに問い合わせてUnsealします。手動Unsealでは各ノードでしきい値回数のキー入力が必要です。ローリング再起動時は、Unsealの自動化(Auto Unseal)または運用手順書の整備が効果的です。
HA状態確認の例
# HA/Barrierの状態確認
vault status
# 出力例
# Sealed: false
# HA Enabled: true
# HA Cluster: https://vault-1.example.com:8201
# HA Mode: active (他ノードは standby)Associate/Ops向けでは、手動UnsealとAuto Unsealの違い、しきい値t/n、HA各ノードのUnseal要件、KMS障害時の挙動が頻出です。コマンドでは operator init / unseal / rekey / seal / status の基本を押さえ、Auto Unseal時の“Recovery Keys”の用途(generate-rootやrecovery用rekey)を区別できるようにしておきましょう。
実務では、BCPに基づいたしきい値設計、鍵の保管先と手順化、KMS到達性の監視(VPCエンドポイントやファイアウォール)を明確にします。
| 項目 | 手動Unseal(Shamir) | Auto Unseal(KMS/HSM) | 備考 |
|---|---|---|---|
| 起動時操作 | キー保有者がt個の共有を入力 | 各ノードがKMS/HSMにより自動復号 | 運用効率はAuto Unsealが高い |
| 配布物 | Unsealキー(n個・tしきい値) | Recovery Keys(分散保管) | 用途が異なる点に注意 |
| 外部依存 | なし(人手のみ) | KMS/HSMとネットワーク/IAM | 可用性設計が重要 |
| HAクラスタ | 各ノードでt回の入力が必要 | 各ノードが自動でUnseal | ローリング再起動の容易さに差 |
| 障害時のリスク | キー紛失でUnseal不能 | KMS到達不可で新規起動がUnseal不能 | 既にUnsealedなノードは動作継続 |
| ローテーション | vault operator rekey | vault operator rekey -recovery 等 | 手順と保管更新を必ず同期 |
Associate / Ops
問題 1
組織は3ノードのVaultクラスタ(Raft)を運用しています。Auto Unseal(AWS KMS)を有効化済みです。全ノードをローリング再起動したところ、2台はUnsealできたものの、最後の1台はKMSへの到達性がなくSealedのままです。この状況に関する正しい説明はどれですか?
正解: A
Auto Unsealでは各ノードが独立してKMSによりBarrierを開きます。KMS到達性があるノードはUnsealされ、HAでActive/Standbyを形成可能です。到達性が復旧すれば残りのノードも自動Unsealします。Recovery Keysは保守操作(generate-rootやrecovery rekey等)に用いられ、KMSを代替して通常のUnsealを行うものではありません。
初期化(vault operator init)はどのノードで何回行いますか?
クラスタにつき1回のみ、最初のノードで実行します。以降のノードはクラスタに参加(join)させ、各ノードでUnsealを行います。二重初期化はBarrierやデータの破壊につながるため厳禁です。
手動UnsealからAuto Unsealに移行できますか?
可能です。新しいsealスタンザ(例:awskms)を設定し、適切な手順でrekey(鍵の再ラップ)を行います。移行はUnsealedな状態で実施し、運用手順とバックアップ、ロールバック計画を用意してください。
vault statusで何を確認すべきですか?
Sealed(true/false)、Initialized、HA Enabled、HA Mode(active/standby)を確認します。起動直後はSealed: trueが正常で、Unseal完了後にfalseへ遷移します。HA構成ではActive/Standbyの役割も併せて監視に組み込みます。
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...