🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### **ABAC 基于属性的访问控制** > 规定哪些**属性的主体**可以对哪些**属性的资源**在哪些**属性的情况**下进行哪些**操作**, `ABAC`是`Attribute-based access control`的缩写, 称为基于属性的访问控制. 权限和资源当时的状态(属性)有关, 属性的值可以用于正向判断(符合某种条件则通过), 也可以用于反向判断(符合某种条件则拒绝): #### 典型应用 1. 论坛的评论权限, 当帖子是锁定状态时, 则不再允许继续评论; 2. Github 私有仓库不允许其他人访问; 3. 发帖者可以编辑/删除评论(如果是RBAC, 会为发帖者定义一个角色, 但是每个帖子都要新增一条用户/发帖角色的记录); 4. 微信聊天消息超过2分钟则不再允许撤回; 5. 12306 只有实名认证后的账号才能购票; 6. 已过期的付费账号将不再允许使用付费功能; 场景:防火墙 适用资源:端口访问 ABAC其中的属性就是与主体、资源、情况相关的所有信息。 * 主体的属性:指的是与主体相关的所有信息,包括主体的年龄、性别、职位等。 * 资源的属性:指的是与资源相关的所有信息,包括资源的创建时间、创建位置、密级等。 * 情况的属性:指的是客观情况的属性,比如当前的时间、当前的位置、当前的场景(普通状态、紧急状态)。 * 操作:含义还是一样,比如增删改查等。 设定一个权限,就是定义一条含有四类属性信息的策略(Policy)。 ~~~ 策略表 效果:允许 操作:流入 主体:来自上海IP的客户端 资源:所有以33开头的端口(如3306) 情况:在北京时间 9:00~18:00 效果:禁止 操作:流出 主体:任何 资源:任何 情况:任何 ~~~ 一个请求会逐条匹配策略,如果没有匹配到策略,则返回默认效果,默认效果可以根据场景定制,可以是默认拒绝或是默认允许。另外,匹配方式也可以根据场景定制,可以使用**逐条顺序匹配**,匹配到策略直接返回。也可以使用**完全匹配**,匹配所有的策略,如果有一个拒绝(允许),则拒绝(允许)。 阿里云的RAM访问控制运用的就是ABAC模型: ~~~ 阿里云RAM策略配置表 { "Version": "1", "Statement": [{ "Effect": "Allow", "Action": ["oss:List*", "oss:Get*"], "Resource": ["acs:oss:*:*:samplebucket", "acs:oss:*:*:samplebucket/*"], "Condition": { "IpAddress": { "acs:SourceIp": "42.160.1.0" } } }] } ~~~ 复制 ABAC可以发挥权限系统最大的灵活性,但在灵活的同时,如果不对策略加以管理,也有可维护性的问题。