Vault

Vault Request Forwarding 実装ノート: クラスタ内ルーティングを正しく設計・運用する

2026-04-19
NicheeLab編集部

Vault の HA クラスタでは、スタンバイノードがクライアントからのリクエストをアクティブノードへ内部転送する Request Forwarding が既定で機能します。これにより、クライアントやロードバランサがリーダーを意識せずに運用できます。

本稿では、安定機能と公式ドキュメントに基づく実装要点を、試験対策(Ops)に通用する観点でまとめます。バージョン依存の挙動は避け、HA 前提の基本を押さえます。

Request Forwarding の基本と前提条件

Request Forwarding は、スタンバイノードが受けた API リクエストをクラスタ内のアクティブノードへ内部転送する仕組みです。従来の 307 リダイレクトと異なり、クライアントはリーダーの場所を意識せず、任意ノードに送るだけで処理されます。

前提はシンプルです。HA 対応ストレージ(Raft 統合ストレージまたは Consul)を使用し、各ノードで api_addr と cluster_addr を正しく設定し、TLS を有効にします。これらが満たされると、スタンバイは自動的に転送を行います。

  • HA ストレージが必須(Raft または Consul)
  • api_addr はクライアント向け、cluster_addr はノード間通信用
  • TLS を有効化し、証明書 SAN に api_addr と cluster_addr のホスト名/IP を含める
  • リーダー不在時は転送できないため、LB のヘルスチェックでスタンバイ許可を使い分ける

最小構成例(server.hcl 抜粋: Raft+TLS)

listener "tcp" {
  address       = "0.0.0.0:8200"
  tls_cert_file = "/opt/vault/tls/server.crt"
  tls_key_file  = "/opt/vault/tls/server.key"
}

# クライアントが到達する FQDN/ポート
api_addr    = "https://vault-1.example.com:8200"
# ノード間通信用アドレス(通常 8201)
cluster_addr = "https://vault-1.example.com:8201"

storage "raft" {
  path = "/opt/vault/data"
  retry_join {
    leader_api_addr = "https://vault-1.example.com:8200"
  }
}

tls_disable = 0

通信フローを理解する(クラスタ内ルーティング)

クライアントは LB または直接任意のノードに接続します。スタンバイが受けたリクエストは cluster_addr を用いたノード間 TLS でアクティブに転送され、レスポンスはスタンバイ経由でクライアントへ返ります。追加ホップは生じますが、クライアント実装は単純化されます。

フォワーディングは API の種類を意識せず動作します(書き込み系も転送対象)。ただし、アクティブ不在やノード間通信断では転送失敗となるため、健全性監視とネットワーク疎通の確保が重要です。

  • クライアントは任意ノードへ送信可。スタンバイは受信→アクティブに転送→応答を返却
  • ノード間は cluster_addr で到達性・TLS が必須
  • フォワーディング不可時はエラー(LB の再試行/複数ノード振り分けで軽減)

Request Forwarding の全体フロー

cluster_addr TLSRequest ForwardingClientsL4 LBStandby(RF on)Standby(RF on)ActiveLeader

フロー確認(どのノードに当たってもリーダーが応答)

# 任意ノード経由でリーダー情報を取得
$ curl -sS https://vault.any.example.com:8200/v1/sys/leader -k
{"ha_enabled":true,"is_self":false,"leader_address":"https://vault-1.example.com:8200"}

# スタンバイに当たっても転送され、アクティブが処理する

ロードバランサ設計(L4 推奨、ヘルスチェック、タイムアウト)

実務では L4(TCP)LB を推奨します。HTTP レイヤでの書き換えやヘッダ付与は避け、長時間のリクエスト(ワッチ系)に備えてアイドルタイムアウトを十分に確保します。スティッキーは不要です。

ヘルスチェックは /v1/sys/health を使用します。待機系も可とするかは運用方針次第ですが、Request Forwarding を活かすなら standbyok=true を使い、全ノードを配下に入れる設計が扱いやすくなります。

  • LB は L4/TCP 型、TLS は基本的にノード終端(終端する場合は再暗号化)
  • スティッキー/セッション保持は不要(リーダー固定は不要)
  • ヘルスチェック例: /v1/sys/health?standbyok=true
  • アイドル/バックエンドのタイムアウトはやや長めに(例: ≥ 65s)
モードクライアント要件遅延・スループット傾向運用の要点
リダイレクト(307)リダイレクト追従が必要低〜中(リーダーへ直接到達)クライアントがリーダーを理解。LB 設計は容易
Request Forwarding特別要件なし(任意ノードへ送信)中(スタンバイ経由で 1 ホップ増)api_addr/cluster_addr と TLS を厳密設定
Performance Standby特別要件なし読み取りは低遅延(スタンバイ処理可)対象パスのキャッシュ性に依存。書き込みは転送

HAProxy の最小例(L4/TCP、ヘルスチェック付き)

frontend vault_in
  bind *:8200
  default_backend vault_nodes

backend vault_nodes
  option tcp-check
  # 健全性: スタンバイも可(要件に応じて変更)
  tcp-check connect
  tcp-check send GET\ /v1/sys/health?standbyok=true\ HTTP/1.1\r\nHost:\ vault\r\n\r\n
  tcp-check expect rstring "(200|429)"
  server vault1 10.0.0.11:8200 check
  server vault2 10.0.0.12:8200 check
  server vault3 10.0.0.13:8200 check

設定検証とトラブルシューティング手順

まずはノード間疎通(cluster_addr)とリーダー選出を確認します。次に任意ノード経由でシークレット読み書きが成功するかを確認し、ログに転送エラーが出ていないか点検します。

失敗しやすいのは証明書 SAN 不備、cluster_addr の名前解決不一致、LB のアイドルタイムアウト過小、ノード間 TCP ブロック(セキュリティグループやファイアウォール)です。

  • cluster_addr の解決・TLS ハンドシェイクをまず確認
  • sys/leader と sys/health を使って状態取得
  • ログに転送失敗(forwarding, cluster)関連の行がないか確認

よく使う確認コマンド

# リーダー確認(任意ノードで可)
$ curl -sS https://vault-2.example.com:8200/v1/sys/leader -k | jq .

# スタンバイ許容の健全性(LB 用)
$ curl -sS "https://vault-2.example.com:8200/v1/sys/health?standbyok=true" -k

# Raft ピア確認(統合ストレージ時)
$ vault operator raft list-peers

# ノード間ポート疎通(cluster_addr 側)
$ nc -vz vault-1.example.com 8201

可用性と障害時の挙動(フェイルオーバと分断)

アクティブがダウンすると、ストレージのリーダー選出により新しいアクティブが昇格します。Request Forwarding は新アクティブに追随します。昇格完了前は転送できないため、クライアントは再試行戦略を持たせるのが安全です。

ネットワーク分断では、スタンバイ→アクティブのノード間 TLS が成立しない側では転送エラーになります。LB を複数 AZ/ゾーンで構成し、任意ノードへの接続と再試行で影響を抑えます。

  • フェイルオーバ中は一時的な 5xx/接続失敗があり得るためクライアントでリトライ
  • LB の接続先に複数ノードを登録し、短い接続失敗時のバックオフを設定
  • 証明書 SAN と DNS がゾーン間で一貫していることを確認

障害シナリオの簡易検証

# 例: 旧アクティブを停止して挙動を見る(検証環境でのみ)
# active ノード
$ sudo systemctl stop vault

# 別ノードから連続でヘルスチェック
$ watch -n 1 'curl -sS https://vault.any.example.com:8200/v1/sys/health -k | jq .'
# 数秒〜十数秒で新アクティブが反映され、転送が再開することを確認

セキュリティと監査の観点

Request Forwarding では、スタンバイからアクティブへの転送経路も TLS で保護されます。ノード間通信用の証明書は api_addr/cluster_addr 双方の SAN を満たすように管理し、証明書更新時は順次ローリングで入れ替えます。

監査ログは最終的にリクエストを処理したノードで確実に記録されます。よって、アクティブ側での監査デバイス設定が中核です。スタンバイ側での監査は転送メタ情報に留まる場合があるため、監査要件はアクティブ側で満たす設計が安全です。

  • ノード間 TLS を必須化(tls_disable=0)
  • ファイアウォールで 8200/TCP(API)と 8201/TCP(cluster_addr)を許可
  • 監査はアクティブ側で必ず有効化し、ローテーション・保全を徹底

最低限の監査・通信制御例

# 監査デバイスの有効化(アクティブで実施、永続化先は運用方針に合わせる)
$ vault audit enable file file_path=/var/log/vault_audit.log

# 例: セキュリティグループ/ファイアウォールの許可(概念)
# API:    8200/TCP クライアント -> すべての Vault ノード
# Cluster:8201/TCP 各 Vault ノード間(双方向)

問題で確認

Ops

問題 1

Vault を 3 ノードの HA クラスタ(Raft)で運用し、前段に TCP ロードバランサを置きました。Request Forwarding を有効に活かすために最低限必要な設定の組み合わせはどれですか?

  1. A. 各ノードで api_addr と cluster_addr を正しく設定し TLS 有効。LB のヘルスチェックに /v1/sys/health?standbyok=true を使い、スティッキーは無効
  2. B. LB で HTTP 301 を強制し、クライアントにリーダーの FQDN を配布する
  3. C. server.hcl で Request Forwarding を無効化し、常に 307 リダイレクトを返させる
  4. D. 1 台のアクティブのみを LB に登録し、スタンバイは登録しない

正解: A

Request Forwarding は api_addr/cluster_addr と TLS が正しく設定された HA 構成で自動動作します。LB は任意ノードに振り分けられればよく、スタンバイ許容のヘルスチェックで全ノードを配下に入れ、スティッキーは不要です。B と C は要件に反し、D は可用性を損ねます。

よくある質問

Performance Standby と Request Forwarding の関係は?

Performance Standby は一部の読み取りをスタンバイ側で処理して遅延を下げる機能で、処理できないリクエストは Request Forwarding によりアクティブへ転送されます。両者は併用され、読み取り中心のワークロードで効果があります。

Request Forwarding を使うと監査ログはどこに出力されますか?

最終的にリクエストを処理したノード(通常はアクティブ)で確実に記録されます。監査要件はアクティブ側の監査デバイス設定で満たす設計にしてください。

無効化したい場合はどうすればよいですか?

クラスタ内ルーティングの前提(特に cluster_addr)を満たさずに構成した場合、スタンバイは 307 リダイレクトを返す挙動になります。ネットワークやポリシー上の理由で転送を避けたい場合は、リダイレクト前提の設計とクライアント実装を採用してください。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Vault

Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token

HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...

Vault

Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる

HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...

Vault

Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く

HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...

Vault

Vault Tokens の基礎: 認証の起点となる概念

HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...

Vault

Vault のトークン種類を正しく使い分ける: service / batch 実践

HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...

Vaultの記事一覧 (100件)
© 2026 NicheeLab All rights reserved.