三大 IAM 权限管理模型怎么选?
想弄清小李遇到的难题,先要厘清权限管理的目的。权限管理,是为了让用户可以访问而且只能访问自己被授权的资源,不能多也不能少。这个目的需要借助各种权限管理模型来实现。
ACL(访问控制列表)是率先登场的权限管理模型。它的概念很简单,每一个需要被访问控制机制保护的资源对象(称为客体)都维持一个独立的关联映射表,其中记录了对该客体进行访问的实体(称为主体)被授予访问客体的权限,以及允许对客体执行哪些操作。当主体试图访问客体时,系统会检查映射表,确定是否允许访问。
![](https://static001.geekbang.org/infoq/ac/ac7e1c952cf0780feb6dd371b35d34c7.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
以图书馆为例,ACL 相当于在每本书上都附了一张借阅许可清单,列出了每一个有权限借书的人,以及他们可以借阅的时间。这种方式简单实用,却存在两大问题,一是每次访问时都必须检查客体的 ACL,会耗费一定资源;二来大用户量、多业务应用的环境下,ACL 的添加、删除和更改比较复杂,容易出现错误。
RBAC(基于角色的访问控制)是比 ACL 更新的权限管理模型。它采用了可分配给主体具有特定权限集的预定义角色,访问权限由为个体分配角色的人提前定义,最终由客体属主在确定角色权限时明确。在处理访问请求时,系统会评估主体的角色以及角色对应的权限,生成访问控制策略。
![](https://static001.geekbang.org/infoq/79/79f8f756bd2adc9e17a939e8f8b27e98.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
还是以图书馆为例,RBAC 相当于给每一个借书人分配了“学生”、“老师”、“某课题组成员”等不同的角色,“学生”可以借 10 本书,“老师”可以借 20 本书,“某课题组成员”可以借阅与课题有关的所有书籍。在企业内部,角色可以以级别、部门、项目等维度定义,一个员工可以有多个角色。相比 ACL,RBAC 能够借助中间件实现对多个系统和资源访问权限的集中管理,简化了权限管理流程,使得权限管理更规范、更便捷。
RBAC 相比 ACL 更适应多用户、多应用、多资源的大型组织,但它的授权粒度只到角色组,难以对具体的个体实施细粒度的访问控制。为了弥补这个缺陷,ABAC 模型(基于属性的访问控制)应运而生。与 RBAC 不同,其访问控制决策不再以单一的角色为依据,而是基于一组与请求者、环境和/或资源本身相关的特征或属性。在 ABAC 模型中,系统将权限直接分配给访问主体。当主体请求访问后,ABAC 引擎通过检查与访问请求相关的各种属性值,基于预设的访问控制策略,确定允许或拒绝访问。
![](https://static001.geekbang.org/infoq/b9/b94b76ff77d076ab4b16ef6804580e1d.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
如果应用了 ABAC,图书馆的借阅管理将更加精细、灵活,比如“老师”平时可以同时借 20 本书,寒暑假只能借 10 本,“学生”在假期不能借书,“某课题组成员”如果假期留校仍可无限量借书,离校则不能借书。在 ABAC 模型中,企业可以基于时间、地点、IP、设备、网络、操作系统、风险级别等属性制定不同的访问控制策略,实现细粒度的权限管理和动态访问控制,几乎能满足所有类型的需求,是真正的“高级货”。
版权声明: 本文为 InfoQ 作者【芯盾时代】的原创文章。
原文链接:【http://xie.infoq.cn/article/09c887a75b13275c1f04e3af4】。文章转载请联系作者。
评论