Control Groups(Control Group Authorization)は、Vault Enterpriseの機能で、指定パスへのアクセスに対し、事前に定義した承認者グループからの承認をしきい値(N名など)で満たした場合にのみレスポンス(シークレット)を開示します。承認者はシークレットそのものを閲覧できず、承認行為のみを行う点が重要です。
本稿では、公式ドキュメントに基づく安定した概念を中心に、フロー、ACLポリシーでの定義、CLI/APIによる運用、設計パターン、トラブルシュート、Ops系資格対策の要点をまとめます。細かなAPIフィールド名やUIの表記はバージョンで差異があり得るため、実装前に現行の公式ドキュメントで確認してください。
Control Groupsは、Vaultがアクセスを即時に許可せず、所定の承認手続きを満たすまでブロックする"承認ゲート"です。承認はVaultのIdentityグループと連携し、パス単位のACLポリシーで構成します。複数の"ファクター"を定義し、各ファクターに対して必要承認数を設定できます(例: セキュリティ1名 + チームリード2名)。
承認リクエストは単回性のラッパートークン(包み)として表現され、承認者はこのトークンに対して承認操作を実行します。必要承認数に達すると、依頼者は元のレスポンスをアンラップ(unwrap)して初めてシークレットを取得できます。承認やアンラップのイベントは監査ログに記録されます。
依頼者がControl Groupsの対象パスを読み出すと、Vaultは即時にシークレットを返さず、承認が必要である旨と承認対象となるラッパートークン(単回性でTTL付き)を返します。依頼者はこのトークンを承認者に安全な経路で共有します。
承認者は自分のVaultトークン(所属グループに基づく権限)を用いて、ラッパートークンに対する承認操作を実行します。所定のファクターしきい値をすべて満たすと、依頼者はラッパートークンをアンラップでき、元のレスポンス(シークレット)を受け取れます。期限切れ・取り消しの場合はアンラップに失敗し、やり直しになります。
Control Groupsの承認フロー(概念図)
依頼者(Client) 承認者(Approver) Vault
| | |
1) |--- 読み取りリクエスト ------->| |
| |----> 評価 -------------->|
|<-- 承認必要 + ラップトークン --| |
| [token=T, TTL=t] | |
2) |--(安全な経路でTを共有)------->| |
3) | |--- 承認(id=T) ---------->|
| |<-- 承認受理(1/N) --------|
| |--- 承認(id=T) ---------->|
| |<-- 承認受理(N/N) --------|
4) |--- アンラップ(T) --------------------------------------->|
|<-- シークレット本文 -------------------------------------|
| | |
(期限切れ/取消時はアンラップ失敗。リクエストを再発行する)Control GroupsはACLポリシー内でパスごとに"control_group"ブロックとして定義します。複数の"factor"を宣言でき、それぞれに"identity"条件(グループ名やID)と必要承認数"approvals"を設定します。全ファクターの条件が満たされたときにのみレスポンスが開示されます。
承認者側のポリシーは、対象パスへの読み取り権限は不要で、承認APIを叩ける権限と、Identityグループ所属が正しく解決できることが重要です。グループマッピング(OIDC/LDAP)やエンティティ結合の不備は、典型的な承認不能の原因になります。
| 機能 | 主目的 | 試験でのキーポイント |
|---|---|---|
| Control Groups | 事前承認ゲート(N名承認後に開示) | Enterprise機能。ACLのcontrol_groupで定義。承認者は本文非閲覧。 |
| Response Wrapping | レスポンス運搬の安全化(単回トークン) | 承認ではない。unwrapで展開。監査ログに残る。 |
| Sentinel/ガバナンスポリシー | ポリシー-as-コードでのガードレール | 承認フローではない。条件付き許否やTTL制限で補完する。 |
ACLポリシー例(2ファクター: チームリード2名 + セキュリティ1名)
# policy.hcl
path "secret/data/payroll" {
capabilities = ["read"]
control_group = {
factor "team-leads" {
identity {
group_names = ["team-leads"]
approvals = 2
}
}
factor "secops" {
identity {
group_names = ["secops"]
approvals = 1
}
}
}
}
# ポリシーの登録(Enterprise)
vault write sys/policies/acl payroll-cg [email protected]
# 依頼者・承認者それぞれに必要なポリシー/グループを割り当てる
# (Identityグループの事前作成と外部IdPマッピングを確認)依頼者: 対象パスを通常どおり読み出します。Control Groupsに該当すると、Vaultは即時本文を返さず、承認が必要な旨と"承認対象トークン"(ラップトークン)を示します。依頼者はこのトークンを承認者に安全な経路(社内承認ツール、セキュアチャット等)で共有します。
承認者: 自身のVaultトークンで承認APIを実行します。必要承認数に達すると、依頼者は同じラップトークンをアンラップでき、初めて本文が得られます。承認やアンラップは監査ログで追跡できます。APIのリクエストボディやレスポンスの詳細はバージョン差異があるため、現行の公式ドキュメントに従ってください。
CLI/APIの最小例(概念)
# 1) 依頼者: 読み出し(CGに該当すると承認が必要な旨が返る)
vault read secret/data/payroll
# 出力の案内に従い、承認対象となるラップトークン(例: s.wrap_xxx)を控える
# 2) 承認者: ラップトークンに対して承認(自身のVaultトークンで実行)
# エンドポイント例(実環境のバージョンによりボディキー名は要確認)
vault write sys/control-group/authorize id=<ラップトークン>
# 3) 依頼者: 必要承認数の充足後、ラップトークンをアンラップ
vault unwrap <ラップトークン>
# → 元のレスポンス(シークレット本文)が表示される承認ファクター設計: ビジネスリスクに応じた最小承認数を定義します。セグメントを越える承認(例: 開発部門+セキュリティ)を分けてファクター化し、相互牽制を担保します。高頻度アクセスには過剰承認を避け、対象パスを細分化して高リスク領域のみControl Groupsを適用します。
TTLと失効戦略: 承認TTLは短すぎると実務に乗りにくく、長すぎるとリスクが高まります。業務の承認SLAに基づき適切に設定し、期限切れ時の再申請手順を明文化します。ブレークグラス手順(緊急時の一時的バイパス)も別途定義し、監査と事後レビューを必須にします。
監査・可観測性: 監査デバイスを有効化し、承認API・アンラップのイベントをSIEMに連携します。誰が・どのトークンに・いつ承認したか、失効や失敗の理由が追跡可能であることを確認します。
頻出ポイント: Control GroupsはEnterprise機能、承認者は本文を見ない、ACLのcontrol_groupで定義、全ファクター必須、承認は単回ラップトークンに対して行われる、アンラップ後に初めて本文が開示、イベントは監査に残る。
混同しやすい概念: Response Wrappingは"運搬の安全化"であり"承認"ではない。Sentinel等のガバナンスポリシーはガードレールであってワークフロー承認そのものではない。MFA/二段階認証とも別概念。
落とし穴: パス表記の誤り(例: KV v2での/data/や/metadata/)、Identityグループ未解決、承認TTLが短すぎて失効、承認者にauthorize権限が付いていない、レプリカ経由で承認が届かない。
Ops
問題 1
Vault Enterpriseで、secret/data/payrollの読み取りに対して「チームリード2名」と「セキュリティ1名」の承認がそろった場合のみシークレットを開示したい。最も適切なアプローチはどれか。
正解: A
Control GroupsはACLのcontrol_groupブロックでファクターごとの承認数を定義し、承認者はauthorize APIで承認、依頼者は承認充足後にunwrapして本文を取得します。Response Wrappingは承認ではなく運搬の安全化、Sentinelは承認ワークフローの代替ではありません。承認者が本文を読む運用は要件不適合です。
Control Groupsはダイナミックシークレットにも使えますか?
使えます。承認が満たされるまでレスポンス(動的資格情報の発行結果)が開示されません。アンラップ時点からリースやTTLが本格的に意味を持つ点に注意してください。
承認が期限内にそろわない場合はどうなりますか?
ラップトークンが失効し、アンラップできなくなります。依頼者は読み取りリクエストを再発行し、新しいラップトークンで承認フローをやり直します。失効・承認・失敗の各イベントは監査ログで追跡可能です。
レプリケーション構成で承認が反映されません。考えられる原因は?
承認/アンラップのAPIがアクティブに正しくフォワードされていない、LB設定でUI/APIがセカンダリに固定されている、あるいは承認者のポリシーにauthorize権限が不足していることが典型です。パフォーマンスレプリカとリクエストフォワーディングの設定、監査ログでの到達性を確認してください。
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...