访问控制、RBAC和ABAC模型

访问控制、RBAC和ABAC模型

访问控制

访问控制的目的是保护对象(数据、服务、可执行应用该程序、网络设备或其他类型的信息技术)不受未经授权的操作的影响。操作包括:发现、读取、创建、编辑、删除和执行等。

为实现访问控制, 计算机安全架构师定义了访问控制机制ACM(Access Control Mechanism)通过各种方法来前置执行应用于受保护对象的访问控制策略。ACM的定义如下: 用于接收来自主体的访问请求、决定和强制执行访问决策的组件。

ACM的实现主要涉及以下模型:

  1. DAC(Discretionary Access Control)自由/自主访问控制, 保护对象的所有者拥有对象和运行程序的全部控制权,所有者包括所有者及其运行的程序。

比如 用户可以删除自己的订单,将订单信息开放出去。

  1. MAC(Mandatory Access Control)强制访问控制,由管理员管理访问控制、指定访问策略,用户无法改变。

比如 安全访问等级中的密级概念,一般<秘密<机密<绝密。 对应的密级有事先确定、必须执行的安全策略,即使是数据的所有者也无法改变。

  1. IBAC/ACL(Identity Based Access Control/Access Control Lists): 随着网络的发展,受保护对象可以被更多的用户所访问,IBAC基于身份的访问控制使用访问控制列表来定义对象授予访问用户的权限。ACL中保存访问主体的凭证及对应的操作。

比如 Linux文件或目录的ACL形式如下:

user::rwx

group::---

other::---

//指定哪些用户、组、对该文件或目录具备的操作权限。

在IBAC模型中, 授权决策在任何特定的访问请求之前作出,并添加到ACL中。ACL中的策略是静态的,需要通过一个过程来重新评估ACL中的内容,对ACL重的对象进行移除等。否则会导致用户权限的累积。

  1. RBAC(Role Based Access Control):基于角色的访问控制,详细内容见下章。随着RBAC规范的流行,是的可以对访问控制进行集中管理,减少了对ACL的需求(ACL是作用在受保护对象)
  2. ABAC (Attribute Based Access Control):基于属性的访问控制。基于请求主体的属性,请求对象的属性,环境条件和一系列针对这些属性和条件配置策略来实现的访问控制方法。

RBAC

RBAC背景

基于角色的访问控制(RBAC)的概念始于20世纪70年代开创的多用户和多应用程序在线系统。RBAC的核心概念是权限与角色相关联,用户被分配给适当的角色。这大大简化了权限管理。角色是为组织中的各种工作职能创建的,用户根据其职责和资格分配角色。用户可以轻松地从一个角色重新分配到另一个角色。随着新的应用程序和系统的加入,可以向角色授予新的权限,并且可以根据需要撤销角色的权限。

  1. 1992年15th Natinal Computer Security Conference(NCSC), David Ferralolo(NIST),Richard Kuhn(NIST)提出Role-Baseed Accessed Controls

  1. 1996年 RS Sandhu、EJ Coyne、HL Feinstein、CE Youman (1996),基于角色的访问控制模型,IEEE Computer 29(2),提出RBAC模型-RBAC96

  1. 现行标准(2012)INCITS 359-2012,信息技术——基于角色的访问控制 (2012 年 5 月 29 日)

相关信息见

https://csrc.nist.gov/projects/role-based-access-control

https://csrc.nist.gov/CSRC/media/Projects/Role-Based-Access-Control/documents/sandhu96.pdf

RBAC96模型

RBAC96定义了一系列4个模型:RBAC0,RBAC1,RBAC2,RBAC3。 RBAC0为最底部的基本模型, RBAC1和RBAC2分别基于RBAC0添加了特性,而RBAC3则等于RBAC1+RBAC2。四者之间的关系:

图一 RBAC96模型关系

图二 RBAC模型图

RBAC0

RBAC0基础模型核心是一个<U(User),R(role),P(permission)>的三元组。通过S(Seesion)来体现User和Role关系的一个活跃状态。

User 用户的概念是人、应用、机器人、固定计算机,甚至计算机网络。可以先简单理解为人。

Role: 组织内的一种工作职能或职务名称

Permission: 权限是对访问系统中一个或多个对象的操作的批准,权限是一个非常灵活的概念,比如授权、访问权、特权等都是。权限的实现是具体系统相关的,可能是特定部门的文件的读取,可能是多个对象相关的,某个功能的操作许可等。权限的设计决定了系统控制的粒度、灵活性等。以数据为例,限定保护对象可以从全量数据、某条数据的粗粒度到字段的细粒度。

RBAC0中 UR和RP之间的关系都是多对多的关系,Session的概念就是当用户拥有多个角色时,体现当前激活角色的上下文含义, 不同的Session可能激活不同的某个或多个角色从而拥有角色对应的权限。

注 RBAC0中的Session概念类似于Web应用中的用户登录Session概念, 如果设计上将RBAC0-Session等同于Web 用户登录Session,则一个用户登录的Session代表着一个RBAC Session。也可以将RBAC-Session设计为用户Session下一级Session,比如一个用户登录Session中可以同时打开多个RBAC Session(不同窗口的形式),这样用户可以在一个会话登录中同时处理多个RBAC会话,而无需进行切换。

    一个RBAC Session中可以激活单个角色或多个角色。

RBAC1

RBAC1模型基于RBAC0引入角色层次结构。角色的继承代表权限的继承,权限的继承是可传递的,如角色A是B的上级角色, B是C的上级角色,则角色B集成角色C的权限,而角色A也同样集成角色C的权限。

用户会话的权限是直接分配给会话角色的权限以及分配给这些角色的下级角色的权限。

角色继承可以设计约束: 比如限制继承的范围,(类似权限加上修饰符protected,private),有些权限可以被继承,而有限不被继承。角色预先定义等级、排他性等约定,避免同级继承、互斥角色继承等。

RBAC2

RBAC2模型在RBAC0模型的基础上引入了约束的概念。约束本身就是安全管理的主要目的。如:某一个人不被允许担任两个相互分离的角色对应职责分离的原则,用户不能被他同事赋予互斥的角色, 比如审计人员和被审计人员。

约束作用于RBAC模型中的所有元素,如User、 Role、 Permission 、 UA(用户角色分配)、PA(权限角色分配)、Session。

常见的约束示例如下:

  1. 同一用户不可同时分配互斥角色
  2. 角色用户数量限制:比如主席只有一个, 副主席可以多个
  3. 一个用户允许拥有的最多角色数量
  4. 先决条件角色:角色对用户的成员资格的要求,比如主席只能从副主席中选出来
  5. 层次上的约束,如初级角色的权限也必须分配给所有高级角色,或者是用户属于高级角色则也必须属于初级角色等。
  6. 约束同样可以作用再回话上,比如用户能不能同时在两个角色中活动,限制用户可以激活的会话个数等。
RBAC3

RBAC1+RBAC2。

ARBAC

在RBAC模型上补充了RBAC的管理模式:

图三 ARBAC示意图

《The ARBAC97 Model for Role-Based Administration of Roles》定义以下管理模式:

  1. URA97:  User和Role的分配管理
  2. PRA97: Role和Permission的分配管理
  3. RRA97: Role和Role之间的管理。

URA97和PRA97定义了最基本的UR分配和RP分配, RRA97根据实际实施需要定义了三种类型的角色:

  1. Abilities: 功能角色, 该类型角色只能与权限或者是其他Abilities之间建立成员关系
  2. Groups: 用户组角色,该类型角色只能与用户或其他用户组之间建立成员关系
  3. UP-Roles: 没有限制的角色, 该角色可以和成员、权限、groups、 ablilities和其他UP-roles建立关系。

Abilities表现的是对权限的管理,如权限包的概念,某一些权限需要以集合为最小单元进行分配才能满足实际业务需求,如订单业务涉及商品查看、订单编辑、库存检查等很多相关的权限。而Groups相应表现为对用户的分类管理,比如某一类用户需要作为一个整体分配给某个角色。

Abilities和Groups本身是对权限和用户单独管理的需求,将其定义为角色的某一种类型,结合角色继承和约束统一纳入到RBAC模型中。为UP角色分配能力(abilities)等同于使UP-Roles中的角色成为Abilities中的角色的直接上级,这样UP-Roles角色中的用户就具备了Abilities角色的权限。而将一个团队分配给UP-Roles等同于将UP-Roles中的角色作为Groups中角色的直接下级,这样Groups中的用户就具备了UP-Roles的中关联的权限。

如有采购角色对应了采购人员和采购权限, 而当审计人员需要具备拥有采购权限进行信息查看是,一种直观的方式是直接将审计人员加入采购角色,另外则是定义专门的采购审计角色,只针对审计人员进行管理,不需要针对审计角色进行权限的分配,而是将采购审计角色继承为采购角色的上级集成。

ABAC

ABAC(Attribute Based Access Control)基于请求主体,请求对象的属性,环境条件和基于这些属性和条件配置的访问策略来实现的访问控制方法。

ABAC中的属性是主体、对象或则环境条件的特性,属性通常是键值对的形式存在。

主体:放出访问请求以对对象进行执行操作。

对象:可以是系统资源,如文件、记录、表、进程、网络等,可以由主体进行操作的对象,包括数据、应用程序、服务、设备和网络。

操作:根据主体请求对对象执行的函数。包括读、写、编辑、删除、复制、执行和修改等。

策略:规则或则关系的标识,基于主体、对象和环境条件的属性值决定是否允许请求的访问。

环境条件: 访问请求发生的操作或情境上下文。环境条件是可检测的环境特征,独立于主体或对象,比如时间、地点、当前威胁级别。

可以将RBAC或则ACLs认为是ABAC的特定场景:基于访问主体、目标对象的角色属性来进行访问控制。

图 企业级ABAC访问控制示意图

ABAC主要包括核心组件:

Subject Attribute Repository主体属性仓库。

Object Attribute Repository: 对象属性仓库。

Local Access Control Policy Repository: 访问控制策略仓库。

ABAC ACM策略执行引擎,基于主体、对象、环境条件相关的属性值,执行预先定义的访问控制策略以控制对目标对象的访问。

微服务中的访问控制和授权

微服务中,授权服务通常作为用户管理的一部分存在,提供关于用户、角色以及权限关系的管理功能。

授权(访问规则执行)通常和认证服务一起在网关节点中进行执行,在用户成功认证后以过滤器模式或AOP切面的方式实现,在请求处理之前进行访问控制校验,通过授权服务获取用户的角色信息以及角色先关的权限配置,针对当前请求进行校验或则将权限配置转换为对应的请求参数,如角色中只允许查看用户创建的表单转换为查询创建者为当前用户的表单查询参数。 具体转换依据实现如SQL、ES等。

    授权可以基于Spring Security框架的授权API和注解编程实现,但需要在请求处理方法上进行相应的配置,更常见自主实现访问控制检查,将请求及用户信息映射为权限信息与当前用户的角色权限进行比对,如将请求URL映射为某个功能来检查等。

    用户、角色、权限以及三者之间的关系可以使用本地缓存或redis缓存提升访问控制性能。使用缓存是需要仔细考虑和实现刷新机制,避免错误。

总结

ABAC 的思想基于属性的、可扩展的、可灵活定制的一种访问控制规则引擎、类似如groovy、drools、js等执行引擎可以作为规则引擎的一种实现方式。而基于关系型数据库的数据控制可以将访问策略转换为SQL的属性查询条件, 如对象A的创建者可读策略对应的检查条件可能为:where A.creatorId=Subject.id。

RBAC模型是项目实施中的访问控制主流模型,实施中通常是基于RBAC进行访问控制管理,基于用户所分配的角色,及给角色分配的权限进行访问控制,这其中可以将角色定义为关键属性输入,实际的访问控制还会在数据上定义用于数据权限校验的属性: 如数据的创建者、数据所属团队、数据所属公司等属性,并同时将这些属性规则绑定到角色上。可以将ABAC模型属性以及基于属性的控制等相关理念作为RBAC的补充,应用到特定业务数据的权限控制以满足实际业务需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/150586.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript系列从入门到精通系列第十六篇:JavaScript使用函数作为属性以及枚举对象中的属性

文章目录 前言 1&#xff1a;对象属性可以是函数 2&#xff1a;对象属性函数被称为方法 一&#xff1a;枚举对象中的属性 1&#xff1a;for...in 枚举对象中的属性 前言 1&#xff1a;对象属性可以是函数 对象的属性值可以是任何的数据类型&#xff0c;也可以是函数。 v…

linux系统中常见注册函数的使用方法

大家好&#xff0c;今天给大家分享一下&#xff0c;linux系统中常见的注册函数register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()的使用方法​。 一、函数包含的头文件&#xff1a; 分配设备编号&#xff0c;注册设备与注销设备的函数均在fs.h中申明&…

mac文件为什么不能拖进U盘?

对于Mac用户来说&#xff0c;可能会遭遇一些烦恼&#xff0c;比如在试图将文件从Mac电脑拖入U盘时&#xff0c;却发现文件无法成功传输。这无疑给用户带来了很大的不便。那么&#xff0c;mac文件为什么不能拖进U盘&#xff0c;看完这篇你就知道了。 一、U盘的读写权限问题 如果…

[Python入门教程]01 Python开发环境搭建

Python开发环境搭建 本文介绍python开发环境的安装&#xff0c;使用anaconda做环境管理&#xff0c;VS code写代码。搭建开发环境是学习的第一步&#xff0c;本文将详细介绍anaconda和vs code的安装过程&#xff0c;并测试安装结果。 视频教程链接&#xff1a;https://www.bil…

localhost和127.0.0.1都可以访问项目,但是本地的外网IP不能访问

使用localhost和127.0.0.1都可以访问接口&#xff0c;比如&#xff1a; http://localhost:8080/zhgl/login/login-fy-list或者 http://127.0.0.1:8080/zhgl/login/login-fy-list返回json {"_code":10000,"_msg":"Success","_data":…

毛玻璃用户卡交互

效果展示 页面结构组成 从效果展示可以看到&#xff0c;此效果都是比较常规的。主要的核心就是卡片的悬停效果。 CSS 知识点 backdrop-filter 回顾transitiontransform 页面基础布局实现 <section><div class"container"><div class"card&q…

基于虚拟阻抗的下垂控制——孤岛双机并联Simulink仿真

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

回顾C++

大一的时候学过C&#xff0c;当时学得也不深&#xff0c;考试也是糊弄过去的&#xff0c;最近刷力扣的时候&#xff0c;决定一边刷题&#xff0c;一边复习和学习C&#xff0c;在此记录一些C的知识点。反正遇到一点就记录一点&#xff0c;会一直更新。

jwt的基本介绍

说出我的悲惨故事给大家乐呵乐呵&#xff1a;公司刚来了一个实习生&#xff0c;老板让他写几个接口给我&#xff0c;我页面还没画完呢。他就把接口给我了&#xff0c;我敲开心&#xff0c;第一次见这么高效率的后端。但我很快就笑不出来了。他似乎不知道HTTP通信是无状态的。他…

深入解读redis的zset和跳表【源码分析】

1.基本指令 部分指令&#xff0c;涉及到第4章的api&#xff0c;没有具体看实现&#xff0c;但是逻辑应该差不多。 zadd <key><score1><value1><score2><value2>... 将一个或多个member元素及其score值加入到有序集key当中。根据zslInsert zran…

手把手教你开发律师法律咨询小程序

随着科技的快速发展&#xff0c;移动互联网已经成为人们获取信息和服务的主要途径之一。对于律师和法律机构来说&#xff0c;开发一个律师法律咨询小程序&#xff0c;可以更好地满足用户的需求&#xff0c;提供便捷的法律咨询服务。本文将引导您如何使用乔拓云网这个第三方制作…

Jmeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量&#xff0c;相比于并发模式&#xff0c;更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS&#xff0c;我们可以把他理解为我们的TPS&#xff0c;我们就不…

精确到区县级街道乡镇行政边界geojson格式矢量数据的获取拼接实现Echarts数据可视化大屏地理坐标信息地图的解决方案

在Echarts制作地理信息坐标地图时&#xff0c;最麻烦的就是街道乡镇级别的行政geojson的获取&#xff0c; 文件大小 788M 文件格式 .json格式&#xff0c;由于是大文件数据&#xff0c;无法直接使用记事本或者IDE编辑器打开&#xff0c;推荐Dadroit Viewer&#xff08;国外…

【小黑送书—第三期】>>《深入浅出SSD》

近年来国家大力支持半导体行业&#xff0c;鼓励自主创新&#xff0c;中国SSD技术和产业良性发展&#xff0c;产业链在不断完善&#xff0c;与国际厂商的差距逐渐缩小。但从行业发展趋势来看&#xff0c;SSD相关技术仍有大幅进步的空间&#xff0c;SSD相关技术也确实在不断前进。…

stack和queque

1.stack 1.1定义 T 是容器内的数据类型&#xff1b; Container是数据类型的容器适配器 vector和list和stack的区别 1.2 stack的功能 注意这里没有迭代器&#xff1b;原因stack是先进后出的规律&#xff1b;这就规定该容器不可以随机访问&#xff1b; 2. queue

算法笔记:0-1背包问题

n个商品组成集合O&#xff0c;每个商品有两个属性vi&#xff08;体积&#xff09;和pi&#xff08;价格&#xff09;&#xff0c;背包容量为C。 求解一个商品子集S&#xff0c;令 优化目标 1. 枚举所有商品组合 共2^n - 1种情况 2. 递归求解 KnapsackSR(h, i, c)&#xff…

VScode配置Jupyter

环境 安装步骤 1、插件安装 2、更改pip加速源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 参考&#xff1a;vscode python配置pip源 ​​​​​​​ 【Python学习】Day-00 Python安装、VScode安装、pip命令、镜像源配置、虚拟环境 3、建…

怎么通过docker/portainer部署vue项目

这篇文章分享一下如何通过docker将vue项目打包成镜像文件&#xff0c;并使用打包的镜像在docker/portainer上部署运行&#xff0c;写这篇文章参考了vue-cli和docker的官方文档。 首先&#xff0c;阅读vue-cli关于docker部署的说明&#xff0c;上面提供了关键的几个步骤。 从上面…

体会jdk17对于空指针的增强

jdk17 // 可以清楚的看出来a.b.c.num中由于c是空指针&#xff0c;所以导致异常 jdk11 // 只报第6行空指针了&#xff0c;但是因为哪个变量&#xff0c;不知道

Spring注册Bean系列--方法5:@Import+ImportBeanDefinitionRegistrar

原文网址&#xff1a;Spring注册Bean系列--方法5&#xff1a;ImportImportBeanDefinitionRegistrar_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;ImportImportBeanDefinitionRegistrar。 注册Bean的方法我写了一个系列&#xff0c;见&#xff…