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