给定Vault中的指定路径,如何查询有权访问的主体及对应权限
Vault 给定路径反向查询权限关联主体操作指南
CLI 实现方案
步骤1:筛选所有包含目标路径的Policy
Vault 原生没有直接反向查询路径对应Policy的内置命令,可通过遍历所有Policy规则匹配目标路径实现:
- 首先拉取全量Policy列表:
policies=$(vault policy list) - 执行遍历匹配,替换下方
TARGET_PATH为你需要查询的实际路径即可:
# 替换为目标查询路径,支持通配匹配 TARGET_PATH="secret/data/app/prod/" for policy in $policies; do # 匹配路径同时输出对应Policy的权限规则 policy_content=$(vault policy read $policy) if echo "$policy_content" | grep -q "$TARGET_PATH"; then echo -e "\n匹配到Policy:$policy" echo "对应路径权限规则:" echo "$policy_content" | grep -A5 -B2 "$TARGET_PATH" fi done
执行后会直接输出所有包含目标路径的Policy名称,以及对应路径的权限配置(比如允许的操作能力)。
步骤2:查询绑定目标Policy的主体
Vault的Policy绑定和认证方法、身份实体/组关联,不同场景查询方式如下:
- 查询直接绑定Policy的Token:
先拉取全量Token访问器:accessors=$(vault list -format=json auth/token/accessors | jq -r '.[]')
遍历查询绑定的Policy:TARGET_POLICY="你的目标Policy名称" for acc in $accessors; do vault token lookup -accessor $acc | grep -q $TARGET_POLICY && echo "匹配Token访问器:$acc" done - 查询Userpass认证绑定目标Policy的用户:
TARGET_POLICY="你的目标Policy名称" users=$(vault list -format=json auth/userpass/users | jq -r '.[]') for user in $users; do vault read auth/userpass/users/$user | grep -q $TARGET_POLICY && echo "匹配用户:$user" done - 查询身份实体绑定的目标Policy:
TARGET_POLICY="你的目标Policy名称" entities=$(vault list -format=json identity/entity/id | jq -r '.[]') for et in $entities; do vault read identity/entity/id/$et | grep -q $TARGET_POLICY && echo "匹配实体ID:$et" done - 查询身份组绑定的目标Policy:
TARGET_POLICY="你的目标Policy名称" groups=$(vault list -format=json identity/group/id | jq -r '.[]') for gp in $groups; do vault read identity/group/id/$gp | grep -q $TARGET_POLICY && echo "匹配组ID:$gp" done
注意:其他认证方法(比如LDAP、Kubernetes、OIDC等)的查询逻辑和上方一致,只需要替换对应认证方法的路径前缀即可。
UI 实现方案
- 登录Vault UI后,点击顶部导航栏的Policies标签,查看当前所有ACL Policy列表。
- 逐个点击Policy名称查看详情,匹配你要查询的目标路径,记录所有匹配成功的Policy名称,同时可以直接看到该Policy对目标路径开放的操作权限。
- 回到顶部导航栏点击Access标签,查询绑定目标Policy的主体:
- 若要查询普通认证用户:在「Auth Methods」区域选择你使用的认证方式(比如Userpass、LDAP等),逐个查看用户的配置详情,匹配绑定的Policy列表即可。
- 若要查询身份实体/组:点击左侧菜单栏的「Identities」,分别切换「Entities」和「Groups」标签,逐个查看条目绑定的Policy列表完成匹配。
注意事项
- 匹配路径时需要遵循Vault的ACL匹配规则,比如Policy中配置的
secret/*会匹配所有secret/开头的路径,即使你查询的是子路径,这类规则也需要计入结果。 - 如果Policy中使用了ACL模板变量(比如
{{identity.entity.id}}、{{identity.groups.names}}等),匹配时需要对变量部分做通配处理,避免漏匹配。
内容的提问来源于stack exchange,提问作者dzieciou
相关产品推荐
相关产品推荐

