Vault は保存前にデータを暗号化し、ストレージには暗号化済みブロブを書き込みます。かつては Consul をストレージに用いる構成がデファクトでした(本稿ではこれをクラシック構成と呼びます)。現在は統合ストレージ(Raft)も第一級ですが、既存の Consul 資産やマルチノード運用では、今も Consul 選択が合理的な場面があります。
この記事では、Consul ストレージの正しい使い方と、統合ストレージとの実運用差異を、資格試験(Ops)で問われやすいポイントに沿って解説します。
Vault の storage "consul" は、Consul の KV に暗号化済みデータを保存し、同時に Consul のセッション/ロックを用いて Vault のリーダー選出と HA を実現します。データ暗号化と復号は Vault のバリア層で行われ、Consul には平文は保存されません。
クラシック構成の特徴は、可用性と一貫性を Consul クラスタに委ねることです。運用者は Vault と Consul を独立にスケール/アップグレードでき、Consul ACL/TLS による厳格な境界防御も適用できます。
Vault サーバ設定例: Consul をストレージに利用
storage "consul" {
address = "127.0.0.1:8500" # 通常はローカルの Consul エージェントを指定
path = "vault/" # Consul KV 上のプレフィックス
token = "${CONSUL_ACL_TOKEN}" # ACL 有効時は必須(環境変数で注入推奨)
scheme = "https" # mTLS を推奨
tls_ca_file = "/etc/ssl/consul/ca.pem"
tls_cert_file = "/etc/ssl/consul/vault-consul.pem"
tls_key_file = "/etc/ssl/consul/vault-consul-key.pem"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 0
tls_cert_file = "/etc/vault/tls/server.crt"
tls_key_file = "/etc/vault/tls/server.key"
}
disoriented_behavior = "forbid" # バージョン差異に依存する設定は公式ドキュメントで確認クラシック構成(Vault + Consul)は、外部の Consul クラスタに依存し、Vault は Consul の KV とセッションで HA を成立させます。対して統合ストレージ(Raft)は、Vault 自身が Raft を内蔵し、外部依存を減らしつつ HA を実現します。
どちらも Vault の暗号化境界は不変ですが、運用対象・バックアップ手順・障害ドメイン・チューニング箇所が異なります。下表と図で全体像を掴んでから、要件に照らして選択します。
| 観点 | Consul ストレージ(クラシック) | 統合ストレージ(Raft) |
|---|---|---|
| 運用対象 | Vault と Consul を別々に運用(アップグレード/監視/バックアップも別) | Vault のみを運用(外部依存なし) |
| HA/選出 | Consul セッションとロックで選出 | Vault 内蔵 Raft で選出 |
| バックアップ | consul snapshot save/restore(Consul 側の手順) | vault operator raft snapshot save/restore(Vault 側の手順) |
| ネットワーク | Vault→Consul の低レイテンシが必須。通常はローカル agent 経由 | Vault ノード間の Raft 通信。ノード間レイテンシが支配的 |
| セキュリティ | Consul ACL と mTLS を必須化。Vault は at-rest 暗号化済み | Vault の mTLS を必須化。Raft も Vault TLS 配下 |
| 可用性ドメイン | Consul と Vault をそれぞれ奇数台で複数 AZ に分散 | Vault ノードを奇数台で複数 AZ に分散 |
クラシック(左)と統合ストレージ(右)の全体像
設定スニペット比較(コメント付き)
# Consul をストレージにする(クラシック)
storage "consul" {
address = "127.0.0.1:8500"
path = "vault/"
token = "${CONSUL_ACL_TOKEN}"
scheme = "https"
}
# 統合ストレージ(Raft)
# storage "raft" {
# path = "/opt/vault/data"
# node_id = "vault-1"
# retry_join = [{ leader_api_addr = "https://vault-1:8200" }]
# }Consul ACL が有効な環境では、Vault 用に最小権限のトークンを発行します。Vault が利用するのは特定プレフィックス配下(例: vault/)の KV と、セッション/ロック関連 API です。Consul 通信は mTLS を必須化し、Vault はローカルの Consul エージェント(127.0.0.1:8500)に接続させるのが定石です。
Consul Enterprise の Namespaces を使用している場合は、Vault 用に専用 Namespace と Prefix を分け、誤操作や他ワークロードとの衝突を避けます。トークンはシークレット管理(例: Vault 自身の AppRole/Agent)で安全にローテーション可能にしておきます。
Consul ACL ポリシー例と Vault 側の指定
# Consul ACL ポリシー例(vault-policy.hcl)
# Vault が使うプレフィックスのみ許可
key_prefix "vault/" {
policy = "write"
}
# セッション/ロックのための適切な許可
# (バージョンにより細部が変わるため公式ドキュメントで確認)
node_prefix "" {
policy = "read"
}
# トークン作成(例)
# consul acl policy create -name vault -rules @vault-policy.hcl
# consul acl token create -description "vault" -policy-name vault
# Vault 側設定(環境変数で注入)
# export CONSUL_HTTP_ADDR=https://127.0.0.1:8500
# export CONSUL_HTTP_TOKEN=<token>
# vault.hcl の storage "consul" 内で token を参照Vault が Consul をストレージに使う場合、性能のボトルネックは Vault→Consul の往復レイテンシです。基本方針は、各 Vault ノードのローカルに Consul エージェントを配置し、エージェントからサーバへは LAN 内で冗長接続すること。WAN 越えは避けます。
リーダー選出は Consul のセッションとロックに依存します。セッションの TTL/lock-delay は Consul 側の挙動に左右されるため、デフォルトで問題ないかを負荷試験で確認します。過度に短くするとフラッピング、長すぎるとフェイルオーバ遅延が増えます。また、Consul サーバ台数は奇数(3 または 5)で、書き込みクォーラムを満たす構成が必須です。
Consul エージェント設定(Vault 同居ノードの例)
datacenter = "dc1"
server = false
retry_join = ["provider=aws tag_key=consul tag_value=server"]
ca_file = "/etc/consul.d/ca.pem"
cert_file = "/etc/consul.d/agent.pem"
key_file = "/etc/consul.d/agent-key.pem"
encrypt = "<gossip_key>" # gossip 暗号化
verify_incoming = true
verify_outgoing = true
verify_server_hostname = true
# ローカルバインド
bind_addr = "0.0.0.0"
client_addr = "127.0.0.1"
ports { http = 8500, https = 8501, grpc = 8502 }
acl { enabled = true default_policy = "deny" enable_token_persistence = true }Consul ストレージのバックアップは Consul 側で行います。計画停止なく取得できるスナップショット(consul snapshot save)を定期実行し、別ストレージに保管します。リストアは同等バージョン/トポロジの Consul に対して実施し、その後 Vault を起動してバリア復号を行います。バックアップ/リストア手順は必ず演習し、復旧時間目標(RTO)と復旧時点目標(RPO)を検証してください。
統合ストレージ(Raft)へ移行する場合は、利用中の Vault/Consul のバージョンにより推奨手順が異なることがあります。オフライン移行(メンテナンス時間を確保し新クラスタを初期化→データ移送→切替)と、バージョンが対応していればツールを用いた移行のいずれかを選びます。いずれにせよ、テスト環境での事前リハーサルとロールバック計画を用意するのが実務の正解です。
バックアップ/リストア例(Consul 側)
# バックアップ(Consul サーバに対して実行)
consul snapshot save /backups/consul-$(date +%F-%H%M).snap
# リストア(メンテナンス中に実施)
consul snapshot restore /backups/consul-YYYYMMDDHHMM.snap
# 参考: 統合ストレージ(Raft)のスナップショットは Vault 側で実行(比較用)
# vault operator raft snapshot save raft-$(date +%F-%H%M).snap
# vault operator raft snapshot restore raft-*.snap資格試験(Ops)では、ストレージ選定の根拠、障害時の挙動、バックアップ/復旧、セキュアな接続設定が頻出です。Consul ストレージの特性を、統合ストレージとの対比で言語化できるようにしておきましょう。
運用確認コマンド(ヘルスと依存の可視化)
# Vault の状態
vault status
# Consul メンバーとリーダー
consul members
consul operator raft list-peers
# Vault から Consul への疎通(ローカルエージェント)
curl -sS --cacert /etc/ssl/consul/ca.pem https://127.0.0.1:8500/v1/status/leaderOps
問題 1
既存の本番環境では、3AZ に分散した堅牢な Consul クラスタ(ACL/mTLS 有効)がすでに運用されています。Vault を新規導入するにあたり、外部依存は許容できるが、短期的に導入を加速したい。Vault ノードは各 AZ に 1 台ずつ配置し、低レイテンシで Consul に到達できます。最も適切なアーキテクチャ選択はどれか。
正解: A
要件は既存の堅牢な Consul の活用と導入加速であり、低レイテンシ到達性もある。最小権限トークンと mTLS を備えた Consul ストレージが適切。B は Vault がサポートしない二重書き込み前提で不適切。C は HA を提供できない。D はバックアップ手順が誤り(Raft のバックアップは Vault 側で行う)。
Consul がダウンすると Vault はどうなる?
Vault はストレージへの読み書きができず、リーダー選出もできなくなります。既存リースの検証や更新、多くの操作が失敗します。監視で Consul ヘルスを合わせて監視し、冗長な Consul サーバ(奇数台)と素早い復旧手順を用意してください。
Consul 側でもデータ暗号化は必要?
Vault は保存前に暗号化するため、Consul の at-rest 暗号化は必須ではありません。ただし、通信の mTLS と ACL によるアクセス制御は必須です。監査要件次第では Consul 側のディスク暗号化も併用します。
レイテンシに敏感と聞いた。実務での対策は?
各 Vault ノードにローカル Consul エージェントを置き、エージェント→サーバを低遅延にします。WAN 越えは避け、Consul サーバは 3〜5 台の奇数、適切な CPU/I/O を割り当てます。セッション/ロックの設定はデフォルトから安易に変更せず、負荷試験で確認してから調整します。
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...