一般指根据系统设置的安全规则或安全策略,对用户权限进行分配,确定其能访问哪些资源。
权限管理是在用户进行认证之后进行的,认证指的是识别请求者身份的过程(比如使用密码,微信,手机号验证码等手段),在成功识别了用户身份后,接下来要做的就是管理,分配权限。
权限模型种类较多,目前被广泛采用的有两种权限模型:
- 基于角色的访问控制(RBAC)
- 基于属性的访问控制(ABAC)
二者的区别:
- RBAC模型构建起来更简单,缺点无法做到对资源细粒度地授权(都是授权某一类资源而不是授权某一个具体的资源);
- ABAC模型构建相对复杂,但优点是细粒度可以根据上下文动态执行(可以细化到某一个具体的资源);
RBAC
RBAC:Role-based access control,基于角色的访问控制。
通过创建角色(Role),为角色授予权限,然后对用户绑定所需权限对应的角色。这种方式相比直接授予用户权限,更加的的灵活,简单,高效,具有可扩展性。
当使用RBAC时,通过分析用户的实际情况,授予他们不同的角色。一个用户具有一个或多个角色,每个角色具有一个或多个权限。这种 用户-角色、角色-权限 的形式,可以让我们不用再单独管理单个用户,用户可以从授予的角色里面继承所需的权限。
举例说明:
以一个简单的场景(Gitlab 的权限系统)为例,用户系统中有 Admin、Maintainer、Operator 三种角色,这三种角色分别具备不同的权限,比如只有 Admin 具备创建代码仓库、删除代码仓库的权限,其他的角色都不具备。
我们授予某个用户「Admin」这个角色,他就具备了「创建代码仓库」和「删除代码仓库」这两个权限。
ABAC
ABAC:Attribute-Based Access Control,基于属性的访问控制。
ABAC是一种非常灵活的授权模型,它通过各种属性来动态判断一个操作是否可以被允许。
组成部分
在ABAC中,一个操作是否被允许是基于对象、资源、操作、和环境共同动态计算决定的。
- 对象:请求资源的用户。用户的属性有:ID、个人资源、角色、部门、组织成员等;
- 资源:用户要访问的资产或对象(如:文件、数据、服务器、甚至API)。资源的属性有:文档、图片、数据等;
- 操作:用户试图对资源进行的操作。操作具有的属性有:读取、写入、编辑、复制、删除等;
- 环境:环境是每个访问请求的上下文。环境的属性有:访问的时间、位置、对象的设备、通信协议、加密强度等;
决策过程
在ABAC的决策语句执行过程中,决策引擎会根据定义好的决策语句,结合对象、资源、操作、环境等因素动态计算出决策结果。
每当发生访问请求时,ABAC决策系统就会分析属性值是否与已建立的策略匹配。如果有匹配的策略,访问请求就会被通过。
举例说明:
策略:[当一个文档的所属部门跟用户的部门相同时,用户可以访问这个文档。],会被以下属性匹配:
- 对象(用户)属性:部门 = 资源(文档)的所属部门;
- 资源属性 = "稳当";
- 操作属性 = "访问";
策略:[早上九点前禁止 A 部门的人访问B系统。],会被以下属性匹配:
- 对象属性 ="A部门" ;
- 资源属性 = "B系统";
- 操作属性 = "访问";
- 环境属性 = "时间早上9点";
应用场景
在 ABAC 权限模型下,你可以轻松地实现以下权限控制逻辑:
- 授权 A 具体某部门的编辑权限;
- 当一个文档的所属部门跟用户的部门相同时,用户可以访问这个文档;
- 当用户是一个文档的拥有者并且文档的状态是草稿,用户可以编辑这个文档;
- 早上九点前禁止 A 部门的人访问 B 系统;
- 在除了上海以外的地方禁止以管理员身份访问 A 系统;
上述的逻辑中有几个共同点:
- 具体到某一个而不是某一类资源;
- 具体到某一个操作;
- 能通过请求的上下文(如时间、地理位置、资源 Tag)动态执行策略;
如果浓缩到一句话,你可以 细粒度地授权在何种情况下对某个资源具备某个特定的权限。
本文参考:
标签:ABAC,角色,管理,模型,用户,文档,权限,属性 From: https://www.cnblogs.com/joudys/p/17393956.html