Vault のアクセス制御は、ポリシー内で付与する Capabilities によって決まります。単なるCRUDに見えて実は評価順序やsudo保護などの独自ルールがあり、試験でも実務でも頻出です。
ここでは公式ドキュメントの挙動に基づき、create/read/update/delete/list/sudo/deny を中心に、最小権限での設計、ワイルドカードの使い分け、検証コマンドまでを一気に整理します。
Vault のポリシーは path ごとに Capabilities を付与して権限を定義します。代表的なものは create、read、update、delete、list、sudo、deny です。評価は複数ポリシーの合算で行われ、deny が1つでも含まれると無条件に拒否されます。
sudo は一部の管理系エンドポイント(sys/ 配下など)に必要な特権で、通常の read/write だけでは到達できません。list はリスト取得専用の能力で、read とは別物です。
| Capability | 主な用途 | 代表的なCLI/API例 | 注意点 |
|---|---|---|---|
| create | 新規作成系の書き込み | vault kv put secret/app k=v(新規) | バックエンドにより update も併せて必要なことがある |
| read | 値の取得 | vault kv get secret/app | list 権限の代替にはならない |
| update | 更新系の書き込み | vault write auth/userpass/users/alice password=... | 多くのエンドポイントで実質的な書き込み権限として用いられる |
| delete | 削除 | vault kv delete secret/app | 一部エンジンでは論理削除/物理削除で別エンドポイント |
| list | キー一覧 | vault kv list secret/ | LIST 専用。read だけでは一覧できない |
| sudo | 管理操作 | vault auth enable userpass、vault secrets enable kv | sys/ など sudo 保護に必須。併せて create/update 等が必要 |
Capabilities の評価フロー(簡略)
最小権限ポリシー例(HCL)
path "secret/data/app/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# 特定サブパスは明示拒否(deny は最優先)
path "secret/data/app/prod/*" {
capabilities = ["deny"]
}
# 管理操作用(sudo が必要な sys/ 配下)
path "sys/auth/*" {
capabilities = ["sudo", "create", "read", "update", "delete", "list"]
}一覧取得は list、読み取りは read と分かれている点が最大のつまずきどころです。read を持っていても list が無ければパス一覧は取れません。逆に list だけでは値は読めません。
書き込み系は実装により create と update の要求が分かれる場合があります。設計段階で対象バックエンドの要件を確認し、迷う場合は create と update をセットで付与します。削除は delete が必要です。
CLI での典型操作と必要権限
# 新規/更新(create/update)
vault kv put secret/app api_key=abc123
# 読み取り(read)
vault kv get secret/app
# 削除(delete)
vault kv delete secret/app
# 一覧(list): 末尾のスラッシュに注意
vault kv list secret/
# 自分のトークンが特定パスで持つ権限を確認
vault token capabilities secret/data/appVault のポリシーはパス単位で評価され、複数の path ブロックがマッチした場合は能力を合算します。最長一致が優先されますが、deny は常に最優先で拒否します。
広いワイルドカードと、狭い例外指定(deny など)を組み合わせて、チーム単位の委譲と機密サブパスの遮断を両立させます。
ワイルドカードと例外指定の組み合わせ
# チームAは team-a/ 配下にフル権限
path "secret/data/team-a/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# ただし本番サブパスは明示拒否
path "secret/data/team-a/prod/*" {
capabilities = ["deny"]
}
# 一覧だけ許可したい汎用閲覧者
path "secret/data/*" {
capabilities = ["list"]
}シークレットエンジンや認証メソッドの有効化・無効化など、管理操作は sys/ 配下のエンドポイントで実行され、sudo が必要です。sudo だけでは不十分で、目的の操作に応じて create/update/read/delete も併せて付与します。
運用者用ポリシーは運用範囲を限定した sys/ パスにのみ sudo を与え、必要最低限の期間・トークンで使用するのが安全です。
運用者向けポリシーと実行例
# 認証メソッド管理
path "sys/auth/*" {
capabilities = ["sudo", "create", "read", "update", "delete", "list"]
}
# シークレットエンジン管理
path "sys/mounts/*" {
capabilities = ["sudo", "create", "read", "update", "delete", "list"]
}
# 認証メソッドの有効化(例)
vault auth enable userpass
# KV エンジンの有効化(例)
vault secrets enable -path=secret kv思った通りに権限が効かない場合は、まず自トークンの Capabilities を確認します。CLI の vault token capabilities、または API の sys/capabilities-self を使うと評価結果を即時に確認できます。
Vault は情報漏えい防止のため、権限不足時に 404 を返すことがあります。存在しないのか権限が無いのか判別しづらいため、capabilities の確認が有効です。
検証コマンド例
# 現在ログイン中のトークンでのパス評価
vault token capabilities secret/data/app
# 明示トークンで評価(別トークンを指定)
vault token capabilities s.XXXXXXXX secret/data/app
# API で自己トークンの capabilities を確認
curl \
--header "X-Vault-Token: $VAULT_TOKEN" \
--request POST \
--data '{"paths":["secret/data/app"]}' \
$VAULT_ADDR/v1/sys/capabilities-selflist と read は別物。一覧には list が必須です。deny は常に最優先で、どこか1カ所でもあれば拒否されます。sudo は sys/ など管理系で必要となり、sudo 単独ではなく create/update 等を併せて付与します。
ワイルドカードと最長一致、複数ポリシーの合算、capabilities-self による検証は頻出テーマです。最小権限の原則でパスを狭く切り、例外は deny や個別パスで上書きします。
確認用ミニポリシー(チェックリストに沿った最小例)
# 閲覧+一覧のみ
path "secret/data/app/*" {
capabilities = ["read", "list"]
}
# 管理操作は別ポリシーで限定的に付与
path "sys/auth/userpass" {
capabilities = ["sudo", "create", "read", "update"]
}Associate
問題 1
ユーザーに対し、あるシークレットパス配下のキー名一覧を取得し、かつ個々の値を読み取れるようにしたい。ただし書き込みや削除は不可とする。ポリシーで付与すべき Capabilities の組み合わせはどれか。
正解: A
一覧取得には list、値の取得には read が必要。read だけでは一覧できず、create/update は書き込み、delete は削除に関わるため要件外。
create と update はどう使い分ければよいですか?
エンドポイント実装により要求が異なるため、書き込み操作が想定される場合は create と update をセットで与えるのが安全です。新規作成のみを厳密に許可したい場合は対象バックエンドの要件を確認し、可能な限り絞り込みます。
list が無いと何が困りますか? read があれば十分では?
list は一覧専用の能力で、read では代用できません。list が無いと、配下にどんなキーがあるかを列挙できません。閲覧運用では read と list を併用します。
deny のベストプラクティスは?
広い許可に対して機密サブパスをピンポイントで塞ぐなど、例外制御に使います。deny は最優先なので、設計やデバッグ時は意図せぬ拒否を招いていないか最長一致と合わせて確認してください。
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...