近几年,权限访问控制模型被反复提及,目前常用的是RBAC(Role-Based Access Control),RBAC是迄今为止最为普及的权限设计模型,其优点是简单,实现起来非常容易。
但是随着授权需求复杂度的提升和对控制逻辑灵活性的高度要求,ABAC(attribute-based access control)访问控制模型将会越来越普及。近期火爆的零信任架构里,ABAC模型就比RBAC更加合适。
ABAC既然是针对属性(attributes)的,那我们先来看看它一般是针对哪些属性进行授权控制的。属性可以是任意的对象,一般会涉及的属性主要是以下四类:
1、访问主体属性:访问者自带的属性,比如年龄,性别,部门,角色等;
2、动作属性:比如读取,删除,查看等;
3、对象属性:被访问对象的属性,比如一条记录的修改时间,创建者等;
4、环境属性:比如时间信息,地理位置信息,访问平台信息等。
基于属性,ABAC可以设置很多灵活的策略来进行访问的控制,比如:
1、当一个文档的所属部门跟用户的部门相同时,用户可以访问这个文档;
2、当用户是一个文档的额拥有者并且文档的状态是草稿,用户可以编辑这个文档;
3、早上九点前禁止A部门的人访问B系统;
4、在除了上海以外的地方禁止以管理员身份访问A系统。
看起来是不是挺强大的。
因为模型是基于策略,而策略又是基于各种灵活的属性动态控制的,所以ABAC模型里通常有配置文件(XML、YAML等)或DSL配合规则解析引擎使用。规则引擎负责控制逻辑的处理,配置文件负责策略的定义和描述。
XACML(eXtensible Access Control Markup Language)就是基于ABAC访问模型的一个实现(可能也是最复杂的一种实现)。
在XACML的架构中,有5种控制节点:
典型的访问请求是这样流转的:
用户访问资源,发送原始请求,请求会被PEP拦截;
PEP把请求转换成一个XACML的访问申请请求;
PEP把访问申请请求转发给PDP;
PDP根据策略配置对认证请求进行评估。策略保存在PRP,并由PAP维护。如果需要采集属性信息,还会从PIP收集属性;
PDP收到访问申请请求的结果(允许,禁止)并发送给PEP;
PEP根据收到的信息,允许或者禁止用户访问资源。
不想看字那就看图:
我们再来看一下ABAC访问控制模型和零信任架构的结合点,从Gartner提供的报告中,我们可以看到典型的零信任架构图如下:
SDP Gateway是用于做访问拦截和访问代理,这个跟XACML里的PEP功能类似。
SDP Controller是做访问控制的策略定义和执行,这个则是包含了XACML里除了PEP以外的节点的功能。
ABAC可以说是缩小版的零信任模型。
零信任架构是想解决最小化授权、策略集中化管理、动态授权控制、自适应授权控制等问题。这些功能的实现跟ABAC权限控制模型不谋而合(也有厂商的零信任架构是基于ABAC和RBAC两种授权控制模型结合实现的)。
然后就是策略文件的构成,策略文件是非常重要的文件,所有的决策都是根据策略文件来判断的