Vaultのアクセス制御を「誰が・どこに・いつ・どんな条件で」まで踏み込んで制御するなら、EnterpriseのSentinel Policiesが要です。
本稿はOps視点で、EGP/RGP、評価順序、実用ポリシー例、テスト/ロールアウト戦略を整理。試験対策にも役立つ要点をまとめます。
Vault EnterpriseのSentinel Policiesは、標準ACLの上に「実行時評価」を重ねる仕組みです。まずACLで基本能力(read/write/listなど)を判定し、通過したリクエストに対してSentinelが追加条件(時間帯、トークンメタデータ、Identityグループ、パラメータ内容など)で最終判断を下します。
適用単位として広く使われるのが、エンドポイント単位にかけるEGP(Endpoint Governing Policy)と、ロール操作に焦点を当てるRGP(Role Governing Policy)です。いずれも enforcement level(advisory / soft-mandatory / hard-mandatory)を持ち、特にhard-mandatoryは失敗時に必ず拒否されます。
| 機能 | 適用範囲 | 評価タイミング | 主な用途 |
|---|---|---|---|
| ACL(標準) | パスと能力(capabilities) | リクエスト受付直後 | 基礎的な許可/拒否の枠組み |
| Sentinel EGP | エンドポイント(パス/操作) | ACL通過直後(実行前) | 時間帯/メタデータ/Identity等の条件付与 |
| Sentinel RGP | ロールに紐づく操作 | 対象ロール操作の実行前 | 入力パラメータやTTL等の制約(ガードレール) |
Vault リクエスト評価の流れ
EGP/RGPの作成・更新(例)
## EGPの例: sys/* 直下操作を厳格化
evn VAULT_ADDR=https://vault.example.com
vault login $TOKEN
vault write sys/policies/egp/egp-sys-guard \
[email protected] \
enforcement_level=hard-mandatory \
paths="sys/*"
## RGPの例: PKI発行ロールのTTL制限
evn VAULT_ADDR=https://vault.example.com
vault write sys/policies/rgp/pki-ttl-guard \
[email protected] \
enforcement_level=soft-mandatory \
paths="pki/issue/*"Sentinelは、対応するエンドポイント/ロールに一致したリクエストがACLを通過した時点で評価されます。評価では、要求パスや操作種別、ボディデータだけでなく、トークンに付与されたメタデータ、紐づくIdentityエンティティ/グループなどが参照可能です。これにより「特定グループのみ特定パラメータ値での発行を許す」「業務時間外は変更系を抑止」など、運用の実態に即したルールを実装できます。
実務では、以下の情報がよく使われます。名前や厳密な属性はバージョンにより増減しますが、リクエスト(path/operation/data)、トークン(policies/meta)、Identity(entity/groups)といった大枠は安定しています。
EGPに適用するパスのスコープ指定(例)
# 変更系(create/update/delete)でのみ評価したい場合は、
# ポリシー本体でoperationを条件化するのが確実。
# パスは広めに、操作はSentinel内で絞る構成が保守しやすい。
vault write sys/policies/egp/kv-change-guard \
[email protected] \
enforcement_level=hard-mandatory \
paths="kv/*"以下は、prod配下のKV(例: kv/data/prod/...)に対する変更系操作を、営業時間内かつトークンメタデータにchange_window=daytimeが付与されている場合にのみ許可する例です。読み取りは常に許可します。
運用では、CAB(変更承認)通過時に一時的にこのメタデータを付与したトークンを払い出すなどのプロセスと組み合わせます。
Sentinel(EGP)サンプル: prod KVの変更を時間帯+メタデータで制約
import "strings"
import "time"
# 営業時間帯(9:00-18:00)
allowed_write_window = rule {
time.hour(time.now()) >= 9 and time.hour(time.now()) < 18
}
# prod配下KVへの変更系操作か
is_prod_kv_write = rule {
strings.has_prefix(request.path, "kv/data/prod/") and
(request.operation == "create" or request.operation == "update" or request.operation == "delete")
}
main = rule {
if is_prod_kv_write {
allowed_write_window and token.meta["change_window"] == "daytime"
} else {
true
}
}最小権限のACLで土台を作り、Control Groupsで重要操作に多者承認をかけ、Sentinelで条件付きのガードを重ねるのが安全かつ現実的です。特にハイリスク操作(rootトークン発行、PKIの長寿命証明書、transitの鍵操作など)はhard-mandatoryでガードします。
ロールアウトは、まずadvisoryで影響を観測し、soft-mandatoryを経てhard-mandatoryへ段階的に引き上げるのが定石です。Namespaceを使う場合、下位環境で十分に検証してから上位へ昇格させます。
Enforcement levelの段階引き上げ(例)
# まずはadvisoryで導入
vault write sys/policies/egp/kv-change-guard \
[email protected] \
enforcement_level=advisory \
paths="kv/*"
# 振る舞いに問題がなければsoft→hardへ
vault write sys/policies/egp/kv-change-guard \
[email protected] \
enforcement_level=soft-mandatory \
paths="kv/*"
vault write sys/policies/egp/kv-change-guard \
[email protected] \
enforcement_level=hard-mandatory \
paths="kv/*"SentinelはスタンドアロンのCLIでユニットテスト可能です。Vault特有のコンテキスト(request/token/identity)を模したモック入力を用意し、sentinel apply/testで期待どおりに評価されるか確認します。Vault側ではadvisoryで先行適用し、監査ログでヒット状況を追うのが安全です。
評価失敗のトレースは、Sentinelの-traceオプションで分岐やルールの真偽を逐次確認できます。
モック入力でのローカル検証例
# policy.sentinel(前述の例)をローカルに保存
# mock.json: Vaultの評価コンテキストを簡易に模す
{
"request": {
"path": "kv/data/prod/app1",
"operation": "update",
"data": {"key":"value"}
},
"token": {
"meta": {"change_window":"daytime"}
},
"identity": {
"entity": {"name":"alice"},
"groups": ["devops"]
}
}
# テスト実行(パスは適宜修正)
sentinel apply -trace policy.sentinel -json mock.json試験では、ACLとSentinelの役割分担、EGP/RGPの適用対象、enforcement levelの違いと運用上の使い分けが頻出ポイントです。特に「ACLを通ってもSentinelで拒否され得る」「hard-mandatoryは原則上書き不能」という基本を押さえます。
また、実運用フロー(advisoryで影響観測→段階昇格)、トークンメタデータやIdentity条件の活用、監査ログでの検証といった現場目線の設問にも備えましょう。
ポリシーの確認・削除(試験で問われやすい操作)
# 作成済みポリシーの確認
vault read sys/policies/egp/kv-change-guard
vault read sys/policies/rgp/pki-ttl-guard
# 削除
vault delete sys/policies/egp/kv-change-guard
vault delete sys/policies/rgp/pki-ttl-guardOps
問題 1
Vault EnterpriseでSentinelを用いて、PKIの証明書発行に対して『CNが特定ドメインに限定され、かつTTLが24h以下』であることを強制したい。最も適切なアプローチはどれか。
正解: C
ロールに紐づく発行操作の入力パラメータ(CN, TTL)を精査するにはRGPが適している。EGPは広いパス制御に有効だが、ロール固有のパラメータ検証はRGPが明快。ACLはパラメータ条件を表現できない。
OSS版のVaultでもSentinelは使えますか?
いいえ。Sentinel PoliciesはVault Enterpriseの機能です。OSS版ではACLとControl Groups(これもEnterprise機能)に相当する高度制御は利用できません。
soft-mandatoryとhard-mandatoryの違いは?
いずれも評価失敗時は拒否しますが、運用上はsoft-mandatoryを段階導入や限定的な上書き可能なガードとして使い、最終的にhard-mandatoryで絶対的な強制に引き上げます。上書き可否や例外の扱いは組織ポリシーに合わせて設計してください。
ACLだけで十分では?Sentinelを入れる判断基準は?
ACLは『誰がどこに何ができるか』までで、実行時の文脈(時間帯、トークンメタ、Identity属性、入力パラメータの中身)には踏み込めません。変更管理やコンプライアンス要件(例: 業務時間外の変更禁止、TTL上限、CNドメイン制限等)がある場合はSentinelで補完するのが確実です。
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...