精华内容
下载资源
问答
  • [policy_effect] e = some(where (p.eft == allow))
  • PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型(RBAC ABAC ACL)的权限管理。 ABAC 是 基于属性的访问控制,可以使用主体、客体或动作的属性,而不是字符串本身来控制访问。 ABAC ...

    PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型(RBAC ABAC ACL)的权限管理。
    ABAC 是 基于属性的访问控制,可以使用主体、客体或动作的属性,而不是字符串本身来控制访问。
    在这里插入图片描述
    ABAC 的官方实例如下:

    [request_definition]
    
    r = sub, obj, act
    
    [policy_definition]
    
    p = sub, obj, act
    
    [policy_effect]
    
    e = some(where (p.eft == allow))
    
    [matchers]
    
    m = r.sub == r.obj.owner
    

    这是 r.obj 类的定义:

    $data1 = new \stdClass();
    
    $data1->name = 'data1';
    
    $data1->owner = 'alice';
    
    $data2 = new \stdClass();
    
    $data2->name = 'data2';
    
    $data2->owner = 'bob';
    

    然后使用决策器进行决策:

    $e->enforce('alice', $data1, 'read');  // true
    
    $e->enforce('alice', $data2, 'read');  // false
    
    $e->enforce('bob', $data1, 'read');  // false
    
    $e->enforce('bob', $data2, 'read');  // true
    

    本文参考文章地址:https://www.php.cn/php-weizijiaocheng-430252.html

    展开全文
  • 本文来说下基于属性的权限控制模型ABAC 文章目录概述 概述

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


    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权限模型的设计

    千次阅读 2020-11-03 10:45:42
    ABAC(Attribute Base Access Control) 基于属性的权限控制 ​ 不同于常见的将用户通过某些方式关联到权限的方式,ABAC则是通过动态计算一个或一组属性来 ​ 判断是否满足某种条件来进行授权判断(可以编写简单的...

    ABAC(Attribute Base Access Control) 基于属性的权限控制

    ​ 不同于常见的将用户通过某些方式关联到权限的方式,ABAC则是通过动态计算一个或一组属性来

    ​ 判断是否满足某种条件来进行授权判断(可以编写简单的逻辑)。

    属性通常来说分为四类:

    ​ 用户属性(如用户年龄 用户地址)

    ​ 环境属性(比如当前时间)

    ​ 操作属性(增、删、改、查)

    ​ 对象属性(比如一篇文章,又称资源属性)

    例如:

    ​ 规则:“允许所有班主任在上课时间可以自由出入校门”这条规则,其中,“班主任”是用户的角色属性

    ​ “上课时间”是环境属性,’‘进出’‘是操作属性,而"校门"就是对象属性。 为了实现便捷的规则设置判断

    ​ 执行,ABAC通常有配置文件(XML、YAML等)或者DSL配合规则解析引擎使用。

    XACML(eXtensible Access Control Markup Language)ABAC的一个实现,但是该设置过于复杂

    ABAC的特点

    1.集中化管理

    2.可以按需求实现不同颗粒度的权限控制

    3.不需要预定义判断逻辑,减轻了权限系统的维护成本,特别是在需求经常变的系统中

    4.定义权限时,不能直观看出用户和对象间的关系

    5.规则如果稍微复杂一点,或者设计混乱,会给管理者维护和追查带来麻烦

    6.权限判断需要实时执行,规则过多会导致性能出现问题

    ABAC有时也被称为PBAC(Policy-Based Access Control)或CBAC(Claims-Based Access Control)

    展开全文
  • 权限控制DAC,MAC,RBAC,ABAC

    千次阅读 2019-04-07 17:45:01
    一:自主访问控制(DAC: Discretionary Access Control) 1、主体对它所属的对象和运行的程序拥有全部的控制权。 例如,Alice拥有一个叫mywork.doc的文件。她许可Bob和Sales group的成员来读这个文件,除此之外别的...

    一:自主访问控制(DAC: Discretionary Access Control)
    1、主体对它所属的对象和运行的程序拥有全部的控制权。
    例如,Alice拥有一个叫mywork.doc的文件。她许可Bob和Sales group的成员来读这个文件,除此之外别的人都不可以。改进的DAC实现提供了一个基于“need-to-know”的访问授权的方法,默认拒绝任何人的访问。访问许可必须被显式地赋予访问者。
    2、被某个用户执行的程序拥有与该用户相同的权限。
    这意味着系统安全依靠运行的程序,因此,当一个程序中发生安全裂缝,会影响到该用户能访问的所有对象。这使得DAC在特洛伊木马前特别脆弱。例如,假设Alice对文件file1.doc拥有读写权限。Charlie,一个恶意攻击者,写了一个程序,这个程序在执行时生成文件file2.doc.这个程序授予Alice写权限和Charlike读权限。Charlie把这个程序伪装成合法的程序发给Alice。当Alice运行这个程序是,它就具有了和Alice相同的权限。它可以拷贝file1.doc到file2.doc,这样charlie就窃取了file1.doc的内容。如果一个管理员执行这个程序,攻击者会获取最大的特权,危害整个系统的安全。
    3、拥有对象权限的用户,又可以将该对象的权限分配给其他用户,所以称之为“自主(Discretionary)”控制。

    这种设计最常见的应用就是文件系统的权限设计,如微软的NTFS。

    二:强制访问控制(MAC: Mandatory Access Control)
    MAC是为了弥补DAC权限控制过于分散的问题而诞生的。
    1、在MAC这种模型里,管理员管理访问控制。管理员制定策略,用户不能改变它。策略定义了哪个主体能访问哪个对象。
    这种访问控制模型可以增加安全级别,因为它基于策略,任何没有被显式授权的操作都不能执行。MAC被开发和实现在最重视保密的系统中,如军事系统。主体获得清楚的标记,对象得到分类标记,或称安全级别。
    2、工作机制是“need to know basis”,即最少的特权,用户只能访问他工作需要的对象。同时,主体不能向下写,即他们不能写或创建低于自己级别的标记的对象。
    这防止了主体把秘密和低于它的级别的主体共享,从而保证信息保密。

    三:基于角色的访问控制(RBAC: Role-Based Access Control)
    因为DAC和MAC的诸多限制,于是诞生了RBAC,并且成为了迄今为止最为普及的权限设计模型。
    用户-角色-权限

    四:基于属性的权限验证(ABAC: Attribute-Based Access Control)
    不同于常见的将用户通过某种方式关联到权限的方式,ABAC则是通过动态计算一个或一组属性来是否满足某种条件来进行授权判断(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),

    展开全文
  • 自主访问控制,有权限的人可以给这个权限授权 MAC(Mandatory Access Control) 强制访问控制,只能管理员授权 前两个都是user-permission的模式 RBAC(role-based)基于角色的 user-role-permission ...
  • 20. 权限控制模式:ACL、RBAC、ABAC

    千次阅读 2019-01-24 18:54:54
    文章目录权限控制模式ACLRBACABACGo casbin 权限库的使用 权限控制模式 ACL 概述: 权限访问列表 实现原理: 给每个用户指定相应的权限。典型的用例为,微软的文件系统权限 缺点: 对权限的管理比较分散,无法集中...
  • 近几年,权限访问控制模型被反复提及,目前常用的是RBAC(Role-Based Access Control),RBAC是迄今为止最为普及的权限设计模型,其优点是简单,实现起来非常容易。 但是随着授权需求复杂度的提升和对控制逻辑灵活...
  • 没有资源的ACL :通过使用诸如write-article , read-log类的权限,某些方案可能针对一种资源而不是单个资源。 它不控制对特定文章或日志的访问。 具有资源角色的RBAC :用户和资源都可以同时具有角色(或组)。 ...
  • jcasbin 采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制 RBAC、基于属性的访问控制 ABAC 等。 jcasbin 的主要特性包括: 支持自定义请求的格式,默认的请求格式为{subject, object, ...
  • 权限系统的设计模式 ACL RBAC ABAC

    万次阅读 2018-11-02 11:17:22
    ACL(Access Control List):访问权限列表 如:   user1-->AC1 ...对权限控制比较分散,不便于管理,比如无法简单地将一组文件设置统一的权限开放给指定的一群用户 RBAC(Role Base A...
  • go web 权限管理 简单例子 (面向对象权限 ABAC / Casbin) 说明 ABAC调用 github.com/casbin/casbin abac_model.conf [request_definition] r = sub, obj, act [policy_definition] p = sub, obj,act [policy_...
  • 针对传统访问控制模型难以解决的动态、细粒度访问控制问题,研究人员提出了基于属性的访问控制模型(attribute-based access control,简称ABAC).ABAC ...并且能够将其他访问控制模型中权限、安全标签、角色等概念用属性来
  • ABAC基于属性的访问控制

    万次阅读 2018-08-20 10:51:03
    常用的基于角色的访问控制,最近研究关于基于属性的访问控制,感觉这个东西确实是个好东西,把自己的研究内容拿出来跟大家分享下。先简单了解下    用户在携带自身的属性值包括主题属性,资源属性,环境属性,...
  • 权限控制表 (ACL: Access Control List) 用来描述权限规则或用户和权限之间关系的数据表。 权限 (Permission) 用来指代对某种对象的某一种操作,例如“添加文章的操作”。 权限标识 权限的代号,例如用“ARTICLE_ADD...
  • jCasbin采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制RBAC、基于属性的访问控制ABAC等。 jCasbin的主要特性包括: 支持自定义请求的格式,默认的请求格式为{subject, objec...
  • 权限控制和初学JavaWeb处理访问权限控制 什么是权限控制: 忽略特别细的概念,比如权限能细分很多种,功能权限,数据权限,管理权限等 理解两个概念:用户和资源,让指定的用户,只能操作指定的资源(CRUD) 初学...
  • 此篇文章主要尝试将世面上现有的一些权限系统设计做一下简单的总结分析,个人水平有限,如有错误请不吝指出。...权限控制表 (ACL: Access Control List) 用来描述权限规则或用户和权限之间关系的数据表...
  • 本文来说下数据权限设计之从RBAC到ABAC的演变 文章目录概述 概述 名词解释 ACL:Access Control List RBAC:Role-Based Access Control ABAC:Attribute-Based Access Control 权限设计从ACL和RBAC发展而来,...
  • 在用户登陆时,系统识别用户,根据被操作对象(Subject)的权限控制列表(ACL: Access Control List)或者权限控制矩阵(ACL: AccessControl Matrix)信息设置用户能对哪些操作对象进行何种操作,例读取操作...
  • 访问权限控制

    2021-08-19 09:28:13
    缺陷是权限控制分散,不便于管理 2.MAC强制访问控制 集中式的访问控制 由系统层面决定主体具有什么样的权限访问哪些对象 通常是给文档加密级,给访问者标权限级 赋权比较粗略,难以细粒度控制 3.RBAC基于角色的访问...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 964
精华内容 385
热门标签
关键字:

abac权限控制