You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Ranger如何阻止所有用户?是否支持UI用*或API实现?

Apache Ranger 阻止所有用户相关问题解答

问题1:Apache Ranger API 是否支持实现阻止所有用户?

完全支持,且有两种更高效的实现方式,无需强制遍历所有用户:

  • 直接在策略的denyUsers字段中设置["*"],Ranger会将*解析为匹配所有用户,只要这个拒绝策略的优先级足够高(高于所有允许类策略),就能实现阻止所有用户的效果。
  • 若你有特殊需求(比如要排除个别用户,仅阻止其余所有用户),可以采用你提到的思路:先调用用户列表API获取所有用户,再将处理后的用户列表传入策略创建API。

直接用*的API请求示例

curl -u <Username>:<Password> -X POST http://<ranger-host>:<port>/service/public/v2/api/policy \
-H "Content-Type: application/json" \
-d '{
  "service": "<你的服务名,例如hadoop_hdfs>",
  "name": "Deny_All_Users",
  "description": "拒绝所有用户访问目标资源",
  "resources": {
    "<资源类型,例如path>": {
      "values": ["/"],
      "isRecursive": true
    }
  },
  "denyUsers": ["*"],
  "priority": 10, // 设置为比其他允许策略更高的数值,数值越大优先级越高
  "isEnabled": true
}'

基于用户列表的API实现步骤

  1. 获取所有用户列表并转为数组格式:
users=$(curl -u <Username>:<Password> -X GET http://<ranger-host>:<port>/service/xusers/users | jq '[.vXUsers[].name]')
  1. 将用户列表传入策略创建API:
curl -u <Username>:<Password> -X POST http://<ranger-host>:<port>/service/public/v2/api/policy \
-H "Content-Type: application/json" \
-d '{
  "service": "<你的服务名>",
  "name": "Deny_All_Existing_Users",
  "description": "拒绝当前所有已存在用户访问",
  "resources": {
    "<资源类型>": {
      "values": ["/"],
      "isRecursive": true
    }
  },
  "denyUsers": '$users',
  "priority": 10,
  "isEnabled": true
}'

问题2:UI的「选择用户」标签页能否直接用*实现?

可以实现,但需注意两个关键细节:

  • 在「选择用户」弹窗中,手动输入*后按回车确认,将其添加到拒绝用户列表中(部分Ranger版本需手动触发确认操作)。
  • 必须确保该拒绝策略的优先级高于所有允许类策略:在策略编辑页的「优先级」字段设置较高数值,Ranger会优先执行高优先级策略,只有高优先级策略无匹配时才会评估低优先级策略。

若此前存在允许所有用户的策略,需将其优先级调至低于该拒绝策略,或直接禁用/删除,否则拒绝策略无法生效。

关于你提出的备选思路的补充

你的思路是可行的,但属于冗余实现——Ranger原生支持用*匹配所有用户,直接使用*不仅更高效,还能自动覆盖后续新增的用户(而拉取现有用户列表的方式仅能阻止策略创建时已存在的用户,新增用户不会被自动包含)。若需排除个别用户,推荐采用「拒绝所有用户(*)+ 允许特定用户」的组合策略,比遍历用户列表更灵活。

内容的提问来源于stack exchange,提问作者SHOAIB AHMED

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:15:13