本文来说下基于属性的权限控制模型ABAC

文章目录

  • RBAC 的缺憾
  • 什么是ABAC访问控制模型
  • ABAC相关术语
  • ABAC的使用场景
  • 为什么 ABAC 能解决复杂场景下的问题
    • Attribute 易于管理
    • 细粒度授权支持
    • 访问控制管理成本很低
    • 动态的总体控制
  • 本文小结

RBAC 的缺憾

RBAC 在很多时候是管用的,比如我们的系统是面向销售公司或者学校这种组织架构很严整的地方,但是在复杂场景下,RBAC 渐渐就不够用了,它会产生很多虚无的 role 而且在管理和控制上更难:在某个医疗机构中,我们想要控制一个科室内,护士只能访问自己所负责的病人资料时,我们就无法直接使用 nurse 这个 role,我们需要更细粒度的 role 去划分病人老张还是老王,这就会产生和现实不对应的 role,例如:老张的护士,老王的护士。在医院这种病人流动性很大的场景下,频繁的创建和销毁 role 是很容易出问题,我们的确要求很频繁,但是与现实不 match 的虚无的 role 很难管理。

另一种情况是,如果管理者考虑医疗数据的安全性与隐私性,不希望护士在离开医院后能够访问到病人资料,我们会更加难办,常见的策略要么是在底层网络层进行处理,直接禁止在院外的一切访问,但是很多企业的需求往往是,使用 VPN 我依旧可以访问内部的资源,但是我还是希望基于所在地进行精确的控制,比如看邮件是可以的,但是看财务数据是不行的。在 RBAC 下,我们也可以通过虚拟的 role 来控制,比如下班后给与其 Out of Office 的 role,然后给与这个 role 最小的权限,这自然又需要虚拟的 role 与大量的动态控制。

一般来说,在 RBAC 中滥用 role 所带来的问题被称为 “role explosion”,跟“曹操”与“曹操小时候”这个笑话很类似,但的确我们的访问控制系统中存在很多这样的 role。


什么是ABAC访问控制模型

所以,直觉上来说我们需要更多的“东西”来进行更精细的访问控制,用来匹配我们复杂的业务场景,同时,我们也希望这个新的模型易于理解和实现,也利于控制与运维,这就是 ABAC —— 基于属性的访问控制 (Attribute Based Access Control) —— 想要解决的问题。简单来说,对于 ABAC 我们判断一个用户是否能访问某项资源,是对其很多不同属性的计算而得到的。

传统的 RBAC 与 ACL 等访问控制机制中,可以认为是 ABAC 的子集,对于 RBAC,只是我们的访问机制的实现只是基于属性 role 而已,ACL 则是基于属性是 identity 的 AC

基于属性的访问控制(Attribute-Based Access Control,下文简称ABAC)是一种灵活的授权模型。是通过实体的属性、操作类型、相关的环境来控制是否有对操作对象的权限。

例如:P5(职级)的同学有OA系统的权限

上述是一个简单的ABAC的例子,就是通过实体的职级这一属性来控制是否有OA系统的权限

再比如:P5(职级)的研发(职位)同学有公司Gitlab的权限

上述例子是通过一组实体的属性(职级和职位)来控制对操作对象的权限

再比如:P5(职级)的研发(职位)同学在公司内网(环境)可以查看和下载(操作)代码

上述例子显然比之前两个更加复杂,除了判断实体的属性(职级和职位),还判断了当前的环境属性和操作属性

所以我们可以ABAC的访问控制模型用下面这张图表现出来


ABAC相关术语


ABAC的使用场景

ABAC授权模型理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。从使用场景来说比较适用于用户数量多并且授权比较复杂的场景。简单的场景也是可以使用ABAC的,但是使用基础的ACL或者RBAC也能满足需求。

场景一:

还是拿上面的例子来说:P5(职级)的研发(职位)同学在公司内网(环境)可以查看和下载(操作)代码。

在需要根据环境属性和操作属性来动态计算权限的时候,使用其他的授权模型可能不太能满足需求。这个时候就需要使用ABAC授权模型。

场景二:

ABAC也适用于 成员(角色)快速变化的场景,由于ABAC 是通过用户的属性来授权的。在新建用户/修改用户属性时会自动更改用户的权限,无需管理员手动更改账户角色。

在属性的组合比较多,需要更细粒度地划分角色的情况下。RBAC需要建立大量的角色。ABAC授权模型会更加灵活。


为什么 ABAC 能解决复杂场景下的问题

在学习 ABAC 的过程中我发现,ABAC 和很多创新一样,并不是因为科技的突破性进展,而只是在 RBAC 的思维上前进了一点,理解 ABAC 的术语时,你能很快的联想到已有的技术实践,比如 AWS IAM。而且,这些术语也如同我们做面向对象编程时,是很好的描述现实的。


Attribute 易于管理

我们可以很容易的为不同的用户设计 attribute,往往在很多企业的实现中存在一个 consumer profile 或者 user details 的服务,这些服务中很多字段比如职位、职级、办公室、项目等就是天然的 attribute,对于需要管理的 object,如果是一台虚拟机,那么 IP 地址、归属组织、cost code 等都可以是 attribute,而且因为 attribute 是 K-V 式的,往往一张一对多的表就可以控制好 subject、object 与 attribute 的对应。


细粒度授权支持

ABAC 能做到细粒度的授权管理,我们知道,在 policy 中,我们的准许访问的判断是可以写的很灵活的,我们甚至可以判断请求中的某个属性是否满足于一个正则表达式,或者字符串相等(这个很常见,特别是在使用 AWS IAM 做最小权限原则时),我们也可以使用逻辑与、逻辑或的关系自由组合很多不同的访问规则。你可以使用之前提到的 Specification Pattern 很轻松的实现灵活的 policy,解析 JSON 或者 XML 去动态的创建规则,而这些含有规则的 JSON 或 XML,则是可以被编程实现的(可编程的 policy 是动态的授权验权的前提)。你的 policy 甚至可以做到,只有姓张的工程师在某个项目时才能访问某个资源,在 RBAC 的时代,这是很难的。


访问控制管理成本很低

ABAC 对系统管理员是友好的,在 RBAC 的时代,如果我需要实现细粒度的资源管理或者经常 subject 与 object 的对应关系经常变动,那么管理员难以操作的,也很容易出现问题,其中常常被采用的解决方案就是创建那些本不应该存在的 role。但是在 ABAC 时代,管理员的管理对象会缩减到 policy,也就是只处理访问控制。我们再回到医疗机构的那个例子中,如果某个护士负责照顾老张,系统管理员只需要新建一个 policy 并写上允许访问即可,当老张出院后,只需要删除或者失效这个 policy 就可以了。在 RBAC 的环境中,你可能需要为某个虚拟的 role 动态的添加 permission,而 permission 如果到了针对单个病人的情况下,是绝对多如牛毛的,特别是有两个叫做老张的病人时。


动态的总体控制

Environment conditions 也能够提供统一的系统级别的控制,比如威胁等级或者按照区域划分安全级别,不同的区域使用 ABAC 时,可能环境上会有变化。例如我们常用红区来表示最高安全级别,那么我们默认就需要 deny 所有请求,并且会触发警报等等,但是在绿区这种办公区域,可能默认所有的请求都是被允许的等等。Environment conditions 可以提供“拉闸”这样的功能,而且它也是可以动态调整的


本文小结

本文介绍了基于属性的权限控制模型ABAC的一些基础知识与内容。微服务的流行与 ABAC 的配合值得写另一篇文章,特别是分布式身份验证之后,怎么做到分布式的授权与验权,怎么实现 PEP、PDP 等 ABAC 提倡的模块设计,这些东西可否做成应用程序透明的方式,可否与 security sidecar 集成等等,这些都是可以进一步完善的。

基于属性的权限控制模型ABAC相关推荐

  1. 基于角色的权限控制模型RBAC

    本文来说下基于角色的权限控制模型RBAC 文章目录 概述 RBAC权限模型简介 RBAC的演化进程 用户与权限直接关联 一个用户拥有一个角色 一个用户一个或多个角色 页面访问权限与操作权限 数据权限 ...

  2. 图文详解基于角色的权限控制模型RBAC

    我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问.操作.数据权限.形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control).强制 ...

  3. Java系列技术之SSH整合+用户权限控制模型项目-钟洪发-专题视频课程

    Java系列技术之SSH整合+用户权限控制模型项目-62人已学习 课程介绍         将前面讲过的Spring5.SpringMVC.Hibernate5和前端框架Easyui整合起来最终完成一 ...

  4. AspNetForums中基于角色的权限控制

    AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...

  5. 基于角色-功能-资源的权限控制模型的设计与实现-引子

    摘要 本文在RBAC基本思想的基础上,增加资源权限的概念,设计了在企业应用系统中用户权限控制的一种具体的简单实现方法. 关键字 用户权限控制 名词解释 资源权限:资源指的是纳入企业应用的一切需要管理的 ...

  6. 基于RBAC权限控制模型的管理系统的设计与实现

    文章目录 一.RBAC 权限设计 1.1 模型概述 1.2 模型分类 二.基于RBAC的后台管理系统 2.1 项目概述 2.2 技术选型 2.3 内部处理流程 2.4 功能模块展示 2.5 权限控制展 ...

  7. 尚筹网 —— 4、[知识] RBAC 权限控制模型 和 Ajax请求

    目录 1.简介 1.1.为什么要进行权限控制? 1.2.什么是权限控制 1.3.如何进行权限控制 1.3.1.定义资源 1.3.2.创建权限 1.3.3.创建角色 1.3.4.管理用户 1.3.5.建 ...

  8. Django 基于角色的权限控制

    有一种场景, 要求为用户赋予一个角色, 基于角色(比如后管理员,总编, 编辑), 用户拥有相应的权限(比如管理员拥有所有权限, 总编可以增删改查, 编辑只能增改, 有些页面的按钮也只有某些角色才能查看 ...

  9. PBAC基于策略的权限控制

    PBAC思想 要解决的问题? 在pb实现一般管理系统的时候,我们会遇到这样一种情况,作为一个系统,可以分为若干个子系统,有多个操作员对它进行操作,每个操作员对各个子系统的权限不同,甚至在同一子系统中, ...

最新文章

  1. 设计模式:观察者模式--Observer
  2. Mockplus设计大赛获奖选手专访 | High音:轻松生活,随心嗨音
  3. DFT,DTFT,DFS,FFT之间的关系以及序列补零和插值对频域的影响
  4. linux centos7不能ssh免密登录自己的问题解决
  5. [Alpha阶段]第六次Scrum Meeting
  6. (旧)走遍美国——(三、文化1)
  7. Nexus搭建Maven私有仓库
  8. 分数化小数(指定精度)
  9. bzoj2208 [Jsoi2010]连通数
  10. Python 三元表达式、列表推导式、生成器表达式
  11. vue升级之路(四)-- Vuex
  12. Halcon深度学习自定义网络模型-VGG16
  13. 普利策奖《哥德尔、埃舍尔、巴赫——集异璧之大成》
  14. cdr多页面排版_CDR排版技巧
  15. 2019年外卖市场分析:本地外卖创业要注意哪些趋势?
  16. 关于网页背景图怎样自动适应屏幕大小
  17. kubernetes使用secrets保存敏感信息
  18. Gibberish 本地化插件学习
  19. iOS自动构建以及打包命令(xcodebuild,xcrun)
  20. 我的博客开通啦,以后会记录一位IT女的学习生涯

热门文章

  1. vc驿站视频教程笔记1
  2. 人工智能在自动驾驶深度学习中的应用
  3. 推荐书目《wireshark网络分析就是这么简单》
  4. 基于Spyder(Python 3.8)网络爬虫东方财经股票数据
  5. 无源晶振用示波器如何测量
  6. 2022-2028全球便携式网络测试仪行业调研及趋势分析报告
  7. 计算机学院的加油口号,各学院校运会加油口号
  8. 老猿学5G扫盲贴:中国移动网络侧CHF主要功能及计费处理的主要过程
  9. 地下管线探测TFN T-6000地下管线探测仪 电缆定位 仪管线 埋地管道探测仪 电缆定位仪
  10. 【多载波系统】基于多载波系统分析等比合并EGC,最大比合并MRC,正交恢复合并ORC以及最小均方误差合并MMSE的matlab仿真