Vaultのアクセス制御は「どのパスに」「どのCapabilityを付与するか」で決まります。設計を外すと想定外の権限が広がるか、逆に動かないかのどちらかです。
本稿は、安定仕様に基づくパス設計とCapabilityの割り当て、ワイルドカードやKV v2特有の注意点を、実務とAssociate試験の両面から整理します。
VaultのポリシーはHCLで記述し、pathブロックごとにcapabilitiesを定義します。リクエスト時は、トークンにアタッチされた全ポリシーのうち、該当パスにマッチするものを集約して評価します。明示的にdenyが含まれる場合は常に拒否され、どのポリシーにもマッチしなければデフォルト拒否です。
Associate試験では、capabilitiesの意味、denyの優先、sys/系操作にsudoが必要になる場面、KV v2のパス差異が頻出です。具体的なエンジンやAPIのパスを念頭に置いてポリシーを書くことが重要です。
ポリシー評価の流れ(概念)
capabilitiesは操作の種類を表します。書き込み系は現場ではcreateとupdateをまとめて付与するのが一般的です。listはエンジン側がLIST操作を提供しているパスでのみ機能します。
HTTPメソッドとの対応は実装依存の部分もありますが、Associateレベルでは下表を押さえておけば実務・試験ともに困りません。
| Capability | 代表的なHTTP動作 | 代表API例 | 試験・実務での要点 |
|---|---|---|---|
| read | GET相当 | kv v2: secret/data/app | データ取得に必要。metadataの読み取りは別パス |
| list | LIST相当 | kv v2: secret/metadata/app | 一覧はdataではなくmetadata側に対して付与 |
| create | POST相当 | kv v2: secret/data/app | 新規書き込み。updateと併用が無難 |
| update | POST/PUT相当 | kv v2: secret/data/app | 更新書き込み。createと併用 |
| delete | DELETE相当 | kv v2: secret/data/app | バージョンの論理削除に必要 |
| sudo | 特権操作 | sys/mounts, sys/policies/acl など | 通常は不要。sys/配下の管理操作で必要 |
pathブロックは完全一致に加え、一般的なワイルドカードで前方一致などを記述できます。広すぎるワイルドカードは権限過多の原因になるため、可能な限りプレフィックスを限定してください。
sys/配下はシステム管理用エンドポイントです。マウントやポリシー管理、ヘルスチェックなどはここにあります。多くの操作は管理トークンかsudoが必要で、業務アプリ用トークンに付与すべきではありません。
トークンに複数のポリシーがアタッチされる場合、同一リクエストに対して複数のpathブロックがマッチします。このときcapabilitiesは集合として評価され、1つでもdenyが含まれていれば拒否されます。マッチするものが1つもなければ拒否です。
ポリシー間の『より具体的なパスが優先』といった自動的な優先度はなく、結果的に必要なcapabilityが集合に含まれているかどうかで決まります。精緻な制御が必要なら、明示的なdenyの併用やパスの粒度調整で設計してください。
KVシークレットエンジンはv1とv2でAPIパスが異なります。v2ではバージョン管理のため、データは data/ 配下、一覧は metadata/ 配下に分かれています。試験・実務ともに、listを許可する際にdata/へlistを付けてしまう誤りが多発します。
以下は、アプリケーションがsecretというマウントパスのKV v2で、app/ プレフィックス配下の読み書きと一覧、削除を行える最小構成の例です。
KV v2向けHCLポリシー例(パスとCapabilityの最小構成)
# app-kv2.hcl
# マウントパス: secret(KV v2)
# 読み取り・書き込み・削除:data配下
path "secret/data/app/*" {
capabilities = ["create", "update", "read", "delete"]
}
# 一覧:metadata配下(dataではなくこちらにlistを付与)
path "secret/metadata/app/*" {
capabilities = ["list"]
}
# 運用ヒント:
# - アプリ用ポリシーにsys/配下は含めない
# - ワイルドカードの範囲は最小化する
# 適用コマンド例
# vault policy write app app-kv2.hcl
# トークンにポリシーをアタッチして発行
# vault token create -policy=app
# 動作確認(カレントトークンでcapabilitiesを見る)
# vault token capabilities secret/data/app/foo
# vault token capabilities secret/metadata/app/ポリシーは書いて終わりではありません。トークンに付与後、vault token capabilities で対象パスの権限を必ず確認します。CLIのkvサブコマンドはKV v2のパス差異を吸収してくれますが、ポリシーはRESTの実パスに対して評価される点を忘れないでください。
試験では、パスの取り違え(特にv2のmetadata/list)、writeというcapabilityは存在しない、denyが優先、sudoはsys/系でのみ使う、といった基本が問われます。選択肢に『secret/data/ にlist』が紛れていたら疑ってかかるのが鉄則です。
Associate
問題 1
KV v2でマウントパスがsecretの環境。アプリがapp/配下のシークレットの読み書きと一覧取得を行う。最小権限で正しいポリシー設定はどれか。
正解: A
KV v2はデータアクセスが secret/data/、一覧が secret/metadata/ に分かれる。書き込みはwriteというcapabilityではなくcreateとupdateを用いる。したがってAが最小権限の正解。
listを付けたのに一覧できません。なぜですか?
エンジン側がLISTを提供するパスに対してlistを付与する必要があります。KV v2では secret/metadata/... にlistが必要で、secret/data/... に付けても一覧はできません。マウント名の取り違えにも注意してください。
書き込みはcreateだけ、またはupdateだけで足りますか?
実装によって新規作成と更新の扱いが分かれるため、実務ではcreateとupdateを併用するのが安全です。Associate試験でも、書き込み系はcreateとupdateの組み合わせとして覚えておくと良いです。
sudoはいつ必要になりますか?
主にsys/配下の管理系エンドポイント(例: sys/mounts, sys/policies/acl など)で必要になります。通常のアプリケーション用シークレット操作には不要で、安易に付与しないでください。
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...