概要描述
ABAC简介
ABAC全名是 Attribute Based Access Control,顾名思义是根据一些上下文标签来在运行时判断权限信息,用来控制对资源的访问。
Guardian ABAC功能介绍
Guardian提供了策略(Policy)页面来设置ABAC权限,每条策略定义了一个权限规则。
Guardian目前支持的标签有如下5种,日后会扩展,包括支持用户自定义标签:
- SourceIp:访问服务的用户的源地址ip
- UserName:访问服务的用户的用户名
- GroupName: 访问服务的用户所属的组
- RoleName: 访问服务的用户所属的角色
- CurrentTime: 访问服务的时间
Resource: 访问服务的资源名字,例如对于inceptor表,表示方法为default.alice_tbl;对于hdfs目录则为 /user/alice等
局限:目前支持ABAC的插件只有Incpetor/Argodb的插件,其他服务的插件正在开发中
详细说明
权限
拥有PERM ADMIN或者SUPER ADMIN系统角色的用户才可以操作策略,例如admin用户拥有SUPER-ADMIN系统角色,可以操作策略。可以到 首页->系统设置->系统权限 中设置用户的系统角色。
配置
policy相关的配置在组件(如Inceptor)的guardian-site.xml中:
guardian.abac.authorization.enabled
,用来控制是否开启ABAC功能,true表示开启,默认false表示不开启guardian.client.cache.update.period
,用来控制本地策略缓存更新的频率(单位为毫秒),默认是30秒(30000毫秒)更新一次。
注:为了加快权限判断速度,本地都会缓存策略数据库,更新频率默认是30s,也就是更新策略之后,最多需要等待30s,组件的策略才会更新。
以Guardian 3.2.6 版本为例举例说明:
1. 修改guardian参数guardian.abac.authorization.enabled
从false修改为true,然后配置服务,重启guardian

2. Quark服务刷新guardian插件

刷新完成之后,检查 /etc/quark1/conf/guardian-site.xml
文件是否更新了配置:
[root@kv1/etc/quark1/conf]# grep abac guardian-site.xml -C 1
guardian.abac.authorization.enabled
true
3. Guardian页面新增策略配置
说明:该policy是一个DENY类型的Policy,唯一的条件是 Sourceip 是 172.22.130.2,整个policy的含义是,如果请求是从172.22.130.2过来的,那么访问Quark1的 default.emp
表 的 SELECT
操作将会被拒绝。

4. 查询验证
我们通过lkw这个用户,在ip为 172.22.130.2 的windows 电脑上,通过waterdrop查询 SELECT * FROM default.emp;
查询失败,报错 SQL 错误 [20388] [42000]: COMPILE FAILED: Internal error HiveAccessControlException: [Error 20388] Permission denied: Principal [name=lkw, type=USER] does not have following privileges for operation QUERY [[SELECT] on Object [type=TABLE_OR_VIEW, name=default.emp]]

需要注意,如果用户是该表的owner或者该用户是ADMIN角色,则仍然可以访问表中的数据。因为owner或者admin是提前判断的。另外策略层目前是在原始的RBAC层之前的,如果ABAC没有返回ALLOW或者DENY即ABAC没有策略可以使用,权限判断将会退化到RBAC层判断。
FAQ 如何通过quark-server.log日志排查策略信息?
需要开启server的DEBUG级别日志才能够看到,在高版本quark上可以 SET inceptor.log.level=debug;
server级开启 (参考修改quark日志级别的几种方式)
查询关键字: tailf quark-server.log | grep -Ei '(SourceIp=172.22.130.2|The evaluation result for statement|PolicyEngine)'

本地策略的刷新日志,一般默认是30秒(30000毫秒)更新一次,每次测试建议等策略更新后再操作:
