APP下载

一种基于角色等级树的SaaS多租户多域访问控制模型

2018-07-05熊光辉白尚旺党伟超潘理虎太原科技大学计算机科学与技术学院山西太原030024

计算机应用与软件 2018年6期
关键词:多域租户访问控制

熊光辉 白尚旺 党伟超 潘理虎 张 睿(太原科技大学计算机科学与技术学院 山西 太原 030024)

0 引 言

SaaS多租户系统软件允许客户根据自己的实际需求订购相应的服务和服务时间,运营商提供全权管理和软件维护。客户在享受服务的时候不需要组织相应的部门维护系统的运行,正是这种先进的理念使得SaaS多租户系统软件得到了广泛的使用。随着SaaS多租户应用的广泛使用,未来系统服务商需要满足租户之间提供高效便捷的协同办公的服务需求。传统针对SaaS多租户访问控制模型只是解决了每个租户内的数据访问安全,并不适合直接应用于多租户间互访问的安全需求。

在SaaS多租户系统中数据存储模型主要有以下三种[1]:独立数据库、共享数据库单独模式和共享数据库共享模式。在设计SaaS多租户软件系统时,为了降低硬件和使用成本而更加高效地存储多租户数据,运营商通常会使用共享数据库共享模式:所有租户使用一个数据库同一套数据表。由于租户们使用的是同一套数据表,在设计软件时就需要一个安全的系统访问控制模型来保证数据的安全性。

正是SaaS多租户安全访问控制方式多采用基于RBAC模型及其改进模型,在不完全改变原有系统访问控制模型的情况下,充分利用RBAC模型角色继承的特点,本文在共享数据库共享模式下,基于RBAC模型中角色树而提出一种针对SaaS多租户系统模型租户间互操作安全访问控制模型。这个模型能够充分利用多租户数据存储模式优点,在确保租户们数据安全的情况下使得他们可以实现安全互操作。

1 相关工作和存在的问题

SaaS多租户系统需要运营商为租户提供足够的安全保障,例如Li等[2]提出将传统访问控制分为系统层访问控制和租户层访问控制来解决异构租户访问控制、多层管理等问题。朱养鹏等[3]通过分析用户访问SaaS平台流程对RBAC模型加以改进,从而使得模型更加适合SaaS平台系统。这些针对SaaS平台的研究主要基于RBAC模型加以改进,这些访问控制模型实现了SaaS多租户系统中每个租户域内安全操作。

为了实现多域之间安全互操作,主要访问控制模型分为以下三类:基于角色访问控制模型、基于信任度访问控制模型、基于属性访问控制模型。

基于角色访问控制模型:在RBAC模型基础上发展而来的IRBAC2000模型[4]通过建立多域之间角色映射关系,使得一个域中角色可以对应到另外域中的角色,从而获得访问该域相关权限。王福等[5]通过用去掉多域映射角色继承采用矩阵记录多域之间角色映射关系,从而解决了由继承不完善所导致冲突问题。这种解决方法在多域映射关系简单时比较适用,当多域中角色间建立映射关系时授权过程就会变得繁琐。彭友等[6]基于系统工程的思想,从组织的整体角度出发,加入了“岗位”层从而得到用户—岗位—角色—权限四层结构。这种方法通过“岗位”这一层不具备权限的继承和传递关系,从而能够解决多域环境下多域访问过程中权限循环继承冲突、异构冲突等安全问题。曹进等[7]在RBAC模型基础上引入安全标签强制访问的特性实现了多域互操作时对数据库中数据行级列级的访问控制,但是给所有数据加安全标签使得此过程繁琐复杂。Ma 等[8]提出用人工神经网络方法获取所需权限而不是传统直接搜索角色权限,这种方法在复杂云平台上有一定优势,但是在角色权限不是复杂的系统中寻找权限的效率较低。基于信任度访问控制模型:Xiong 等[9-13]提出基于信任度动态实时角色映射模型,通过计算系统对外域访问者的信任度然后建立映射关系,这种模型信任度的计算比较复杂。基于属性访问控制模型:云计算平台访问控制模型还有基于属性的访问控制模型[14-18],这种模型易于适应动态性、可扩展的网络环境。

在SaaS多租户模式中,系统由于通常采用同一套数据表,租户们使用同一应用实例。两个租户之间实现相互数据访问时,此时租户多域访问不需要通过中间系统实现系统之间会话的切换,在SaaS多租户模式中只要一个用户分配有目标租户访问数据的权限时则可以直接访问该数据。在多域访问中,虽然基于属性访问控制模型和基于信任度访问控制模型相对于基于角色控制模型在云计算领域中更加灵活、异构环境中适应性更强,但是SaaS多租户环境中租户域安全访问方式通常为同构,采用基于角色控制模型更为简单高效。现有在SaaS多租户模式中加入强制访问控制方式的基于标签方式存在数据标签授予过程复杂的问题。

本文针对SaaS多租户模型提出基于角色访问控制模型,在利用角色等级树和角色映射冲突检测与消除策略对IRBAC2000模型进行改进。改进后模型能够保证SaaS多租户系统中租户之间安全访问,同时也方便于将传统基于RBAC模型多租户系统单域访问模式升级到多域访问模式。

2 基于角色映射模型的安全问题

在SaaS多租户系统中传统角色的访问控制策略主要基于ARBAC97模型。该模型将RBAC模型的管理员划分为租户管理员和系统管理员从而实现了租户管理员根据自身实际情况设置相应的角色来获取系统管理权限。

在角色映射过程中由于角色关系传递性及多个域间角色互相映射所产生的域穿越可能会造成下列问题:

1) 角色继承冲突 在图1中,左右两边分别是两个安全域中角色树。其中带标号的多域连线表示多域角色映射关系,箭头指角色为映射目标角色。标号1的关联是从D1域中角色R3到D2域中r2的映射关联,标号2表示从D2域中角色r4到D1域中角色R3的映射。根据角色的继承性可以看出角色r4通过标号2和标号1获得了D2域中角色r2所拥有的权限,这样就使得角色r4的权限得到提升从而发生角色继承冲突。

图1 多域角色映射

2) 角色非关联冲突 在图1中,标号1中D1域中角色R3映射到D2域中角色r2,标号3中D2域中角色r2映射到D1域中角色R2。此时就有D1域中角色R3通过标记1和标记3映射到D1域中角色R2。由于角色R2和R3职责权限并不相同,这种情况称为角色非关联冲突。

3) 角色关联冲突 在图1中,标记4由角色R2映射到角色r4,通过标记5由角色R5映射到r5。根据角色的继承性可以知道角色R4通过由于拥有角色R5的权限,而角色R5映射到角色r5,所以角色R4拥有角色r5的权限。如果此时增加标记6角色映射关系即:D1域中角色R4映射到D2域中角色r4。在这种情况下,原本D1域中角色R4在D2域中只能拥有角色r5的权限,通过标记6使得角色R4在D2域中拥有了角色r4的权限。这种冲突称为角色关联冲突。

4) 角色职责分离冲突 在图1中,标记1和标记7这两个角色映射关系。如果在D2域中,一个用户能够拥有角色r2和角色r3,但是由于这两个角色由于职责分工要求而不能同时被同一个用户所激活,即角色r2和角色r3互斥。此时D1域中角色R3由于映射关系就发生职责分离冲突。

3 基于角色等级树的映射

3.1 模型策略

本文给出的基于角色等级树改进的访问控制模型主要有两个部分:角色树映射和角色映射冲突检测与消除。

1) 角色树映射 基于RBAC访问控制模型中角色具有层次性和继承性,在一个SaaS多租户系统中可以把全部角色集合看成一个角色森林,其结构如图2所示。当一个域中角色想要与其他域中角色生成映射关系时,首先查找出请求域角色所有的父角色以及所有子角色,将这些角色按照自顶至下的顺序保存到请求者角色树集合中,目标者角色也执行相同的操作。然后再到数据库中查找出从请求租户域到目标租户域中所有已经建立的角色映射关系,通过这种成对映射关系把原来请求者角色树集合和目标者角色树集合分成若干成对的“块集合”。最后检测原来请求映射关系的角色对是否在“块集合”中,若在则请求映射关系成立并保存起来,反之则不成立。

图2 SaaS多租户角色森林

2) 角色映射冲突检测与消除 由于本文所给出的角色映射的映射关系具有传递性,即当角色A映射到角色B,角色B映射到角色C,则角色A也传递性的映射到角色C。所以就存在一个域中角色通过映射到其他域中的某个角色后又经历传递映射最终映射回到本域中的其他角色,这种传递性的映射回请求角色所在域的路径称为角色映射回路。除了角色映射回路需要检测外,还需要检测一个角色映射多个角色时是否产生职责分离冲突。通过检测角色映射回路,采用合适的方法消除这些冲突从而保证系统安全。

3.2 模型具体算法流程

3.2.1 角色树映射流程

在一个SaaS多租户系统中,假设存在租户域D1和租户域D2,在租户D1域中角色集合记作D1Roles,租户D2域中角色集记为D2Roles。每个域中角色集均为一棵角色树,租户管理员为该域中最高权限角色。对于一次角色映射D1Rm→D2Rn,其角色树映射流程如下:

1) 得到映射请求角色和目标角色树集合 系统查找出D1Rm角色及其子角色直到租户管理员角色D1R0,然后从租户管理员角色D1R0到D1Rm排序加入到有序角色树集合中:D1TreeRm={D1R0,D1R1,…,D1Rm},接着查找出角色所有的父角色,按照广度优先算法分别将这些父角色加入到角色树集合中,最终得到角色D1Rm完整角色树集合D1TreeRm={D1R0,D1R1,…,D1Rm,D1R(m+1),…}。同理可以得到角色D2Rn的角色树集合D2TreeRn={D2R0,D2R1,…,D2Rn,D2R(n+1),…},其中D2R0为D2域租户管理员角色。

2) 将角色树集合分块 从数据库中查找已经保存的租户域D1到租户域D2全部角色映射。遍历这些映射,对于每一个映射D1Rx→D2Ry,如果角色D1Rx在集合D1TreeRm中且角色D2Ry在集合D2TreeRn中,则标记出这个映射关系,最终得到一个标记集合Mark={D1Rx→D2Ry|D1Rx∈D1TreeRm∧D2Ry∈D2TreeRn}。集合Mark中元素均是角色映射对D1Rx→D2Ry,这些元素按照角色D1Rx在D1TreeRm中先后顺序而排序。取出集合Mark中第一个元素D1Rx→D2Ry,集合D1TreeRm以元素Rx为界限将原集合拆分为集合D1TreeRm1={D1R0,D1R1,…,D1R(x-1)}以及集合D1TreeRm2={D1R(x+1),…}。以元素Ry为界限将集合D2TreeRn原集合拆分为D2TreeRn1={D2R0,D2R1,…,D2R(y-1)}和D2TreeRn2={D2R(y+1),…}。用集合MapSet保存划分后集合之间映射关系,此时MapSet={D1TreeRm1→D2TreeRn1,…}。

在遍历集合过程中可能以某个请求角色(目标角色)对集合进行拆分后得到一个空集和另一个集合,此时目标角色(请求角色)拆分成两个集合,与请求角色(目标角色)空集和相对应的目标角色(请求角色)拆分的那个集合所构成的D1{φ}→D2TreeRmj关系不加入到集合MapSet中。

3) 判断映射请求是否在分块中 顺序遍历集合Mark剩余元素,对拆分后的没有加入到集合的集合继续拆分直到遍历完集合Mark中全部元素,最终得到MapSet={D1TreeRm1→D2TreeRn1,…,D1TreeRmk→D2TreeRnk}。

最后判断D1Rm→D2Rn是否属于集合MapSet中的对应关系元素的一个元素,如果是,则映射成立并保存,反之映射不成立。

3.2.2 角色映射冲突检测消除

由前面提到的角色树映射算法能够很好地解决由于角色继承关系中多域角色层次所产生的冲突,例如角色关联冲突等。角色映射冲突检测消除过程核心是分两个部分:映射回路检测消除策略和动态职责分离检测消除策略。通过角色映射冲突检测可以有效避免由角色通过映射的传递性而最终映射到本域中其他角色所造成冲突。动态职责分离检测消除策略可以检测角色映射到目标域中是否与该域中职责分离的多个角色有映射关系,若检测存在冲突,则让用户选择发生冲突的角色进行激活使用。

1) 映射回路检测消除策略 例如在D1域中有用户D1User,该用户拥有角色D1R1。则此时D1User拥有的角色集为Set(D1User)={D1R1}。检查该角色是否映射其他域中,如果映射到角色D2R1,则将该角色加入到角色集Set(D1User)中即有Set(D1User)={D1R1,D2R1}。在映射过程中,如果有指向初始映射角色所在域的其他角色D1Rx,则角色D1Rx不加入到集合Set(D1User)中。继续检查D1Rx有没有映射关系,重复上面过程直到最终没有映射的角色为止。

2) 动态职责分离检测消除策略 假设在租户D2域中有职责分离冲突集合SepSet={(D2R1,D2R2),(D2R3,D2R4),…},依次取出其中元素(D2R1,D2R2)∈SepSet。对于D2R1查出其所有子角色直到租户管理员角色得到集合TreeD2R1,同理得到集合TreeD2R2。如果一个角色多域映射到该域所对应的角色集同时拥有集合TreeD2R1和集合TreeD2R2中元素,则此时发生职责分离冲突,提示用户只能激活其中一个角色使用。

3.3 角色等级树映射完整性与正确性控制

在SaaS多租户环境下每个租户域中角色均可以看作一个树状角色集合。角色继承冲突、角色关联冲突和角色非关联冲突产生的根本原因:出现本域和外域的角色层次相关冲突以及存在映射回路。角色职责分离冲突产生的原因是角色映射到其他域中的角色在冲突集中。角色树能够描述角色层次关系,利用这种特性实现角色层次隔离解决角色层次引发的冲突。在此基础上应用角色映射回路检测算法与职责分离冲突检测算法实现安全多域访问。

为了便于描述冲突,这里给出冲突的形式化定义。

定义1DARm>DARx,表示角色DARm为角色DARx祖先角色。同理DARm

定义2在任意关联的域DA和DB中,假设存在关联映射DARm→DBRn和DARx→DBRy,如果满足DARm>DARx并且DBRnDBRy,那么映射关系DARm→DBRn和DARx→DBRy就存在角色层次关系的冲突。

定义3在任意关联的域DA和DB中,假设存在关联映射DARm→DBRn和DBRy→DARx,如果DBRn和DBRy在角色树中为父子关系,那么此时在DA域中存在映射回路冲突。

定义4在任意关联的域DA和DB中,DB中存在职责分离冲突集合Set,如果DA中有角色集RoleSet={DARm→DBRn|DARm∈DA∧DBRn∈Set},则此时映射DA域中RoleSet存在映射职责分离冲突。

假设新建映射DARm→DBRn,这两个域已经存在映射DARx→DBRy。此时根据前文角色树映射算法可以得到角色DARm的树集合DARmTree,同理有DBRnTree。如果DARx∉DARmTree或者DBRy∉DBRnTree,则此时不会发生层次冲突。如果存在DARx∈DARmTree并且DBRy∈DBRnTree,根据算法可以得到DARmTree=DATree1∪DARx∪DATree2,其中DATree1={DARi|DARiDARx},同理得到同样规律的DBRnTree=DBTree1∪DBRy∪DBTree2,以及映射集合MapSet={DATree1→DBTree1,DATree2→DBTree2}。根据算法映射规则,如果DARm∈DATree1,则DBRn∈DBTree1。即若DARm>DARx,则DBRn>DBRy;或者若DARm

映射回路检测消除策略和动态职责分离检测消除策略结合定义3和定义4显然能够避免映射回路冲突和动态职责分离冲突。再结合角色树映射算法能够保证任意两个租户域建立角色映射时能够解决前文中的冲突问题。

4 基于角色等级树的原型系统

4.1 原型系统体系结构

原型系统中定义了两个核心模块:角色映射模块、访问控制模块,该系统架构图如图3所示。

图3 原型系统架构设计图

角色映射模块:该模块由系统管理员负责维护,其作用就是建立从一个租户域到另外一个租户域的角色之间映射关系。系统根据前面所描述的角色映射中利用角色树建立合适的角色映射。

访问控制模块:该模块主要是在用户登录时获取该用户在本域中的角色及其权限。同时搜索保存的多域角色映射记录从而获取在其他域中对应的角色和权限,在此过程中运用角色映射冲突检测消除策略以避免产生冲突。

4.2 系统主要数据表设计

在模型中,核心的数据库表有租户表、角色表、权限表、多域角色映射表、用户表、职责分离表。同时为了处理数据表中多对多关系也设计了一些中间表如租户权限表、角色权限表,如图4所示。在模型中角色继承关系为倒树结构——角色从上到下权限变小,下层角色为上层角色的祖先角色。在原型系统中为了方便理解则采用了正树结构,即上层角色为下层角色祖先角色。

图4 原型系统核心表

4.3 系统角色映射模块

系统角色映射模块主要就是由系统管理员负责建立租户域角色与目标租户域角色之间的映射关系,根据前面介绍的角色树映射流程算法对每一个角色关联映射请求进行处理。

在原型系统中,当系统管理员建立一对角色映射时具体步骤如下:

1) 从前台得到映射请求角色及店号和目标角色及店号。

2) 通过查询角色表分别得到请求角色树集合和目标角色树集合。

3) 按照角色树映射流程算法进行判断是否能够建立映射。如果满足条件能够映射,则将映射角色和店号以及目标角色和店号存储到角色映射表中,并向前台返回保存成功标记;反之,则映射不能保存并向前台返回映射不能建立的信息。

4.4 访问控制模块

用户(系统管理员、租户管理员和普通用户三个类型)登录系统时,由系统中Login方法根据用户类型去查找User表或者Tenant表,查找成功则说明登录成功。

当用户登录成功后则获取在当前店内角色以及权限存储到LocalList中,查找Mapped表来确定该用户是否拥有其他店角色及权限,若有则将查找出的信息存储到OutList中,最后把这些信息存储到Web系统的Session中。Session中保存用户当前状态信息:所在店铺、角色以及权限集合。

当用户访问功能模块时,根据用户当前所在店铺、角色、权限集合,通过Web系统拦截器来判断该功能模块是否在当前权限集合中,若在则可以正常访问,反之,则提示用户无法访问。

系统中提供角色切换功能使得用户可以在建立角色映射的基础上切换到相应的店铺角色,此时将该用户在切换后店铺中的店铺、角色以及权限集合信息替换掉Session中保存的当前状态信息。

4.5 实例说明

为了方便说明模型实际应用场景,假设在原型系统中有3个租户域D1、D2、D3,这三个域角色关系如图5所示。图中带箭头实线表示租户域内角色继承关系,带箭头虚线表示由原型系统角色映射模块成功建立的角色映射关系。D3域中角色R2和R3属于职责分离冲突。

图5 原型系统租户角色图

角色D1R2映射到的角色D3R2,而角色D3R2映射到角色D1R3。当某个用户成功激活了角色D1R2时,角色访问控制模块映射回路检测模块检测到存在映射回路,所以该用户不会通过映射的传递性拥有角色D1R3相关权限。角色D2r2映射到D3R2,D2r3映射到D3R3,由于在D3域中存在职责分离冲突集合Set={D3R2,D3R3},当租户D2域中有用户激活角色D2r1,根据角色继承性和保存的映射关系,角色D2r1在多域访问D3域时,角色访问控制模块检测到存在映射存在职责分离冲突,所以会提醒该用户在访问D3域时只能激活角色D3R2和D3R3中的一个角色访问D3域系统功能。

4.6 实验分析

实验结果表明,设计的原型系统满足以下安全目标:

• 租户内部安全访问由于每次访问都需要验证用户是否是租户域内用户,验证通过后通过判断其在系统中角色以及对应拥有权限,系统比较用户所有的权限可以杜绝用户对本租户域以及其他租户域的非法访问。

• 租户之间安全访问系统管理员负责维护租户之间的角色映射关系,系统在用户登录后获取该用户在其他租户域内相应角色以及权限。通过系统角色映射冲突检测算法能够有效解决角色映射后所产生的冲突。

5 结 语

本文给出了一种基于RBAC模型角色等级树的多域安全访问控制模型,该模型在常见SaaS多租户模式应用所采用RBAC模型基础上加以改进。既减小了将普通SaaS多租户单域访问模式改造为多域访问模式的复杂度,也充分利用了RBAC模型的简单易管理优点,使得SaaS多租户系统的多租户间可以实现安全互操作。目前,模型已经完成理论研究,通过设计实现原型系统实验结果验证了该模型在SaaS多租户模式中多域安全访问时的有效性。接下来的工作是继续研究多租户多域映射后对角色的约束问题,使得约束既能够适应于私有域内角色,又对外域映射到私有域中角色能产生约束作用。

[1] Ju J, Wang Y, Fu J, et al. Research on Key Technology in SaaS[C]//International Conference on Intelligent Computing and Cognitive Informatics. IEEE, 2010:384- 387.

[2] Li D, Liu C, Liu B. H-RBAC: A Hierarchical Access Control Model for SaaS Systems[J]. International Journal of Modern Education & Computer Science, 2011, 3(5).

[3] 朱养鹏, 张璟. SaaS平台访问控制研究[J]. 计算机工程与应用, 2011, 47(24):12- 16.

[4] Al-Muhtadi J, Kapadia A, Campbell R, et al. The A-IRBAC 2000 Model: Administrative Interoperable Role-Based Access Control[R].University of Illinois at Urbana-Champaign Champaign, IL, USA.2000.

[5] 王福, 沈寒辉, 邹翔. 基于IRBAC的多域角色映射方法[J]. 计算机应用, 2010, 30(S1):106- 108.

[6] 彭友, 宋艳, 鞠航,等. 基于组织的四层访问控制模型多域访问过程中虚拟岗位构建方法[J]. 计算机应用, 2014, 34(8):2345- 2349.

[7] 曹进, 李培峰, 朱巧明,等. 基于安全标签的多域安全访问控制模型[J]. 计算机应用与软件, 2015, 32(1):297- 302.

[8] Ma X, Cheng N, Zhao L, et al. An efficient Role-Based Access Control approach in IRBAC 2000[J]. Icic Express Letters, 2014, 8(6):1593- 1598.

[9] Xiong D, Chen L. T-RBAC based Multi-domain Access Control Method in Cloud[J]. Network Protocols and Algorithms,2017, 8(4):29.

[10] 朱一群. 基于用户信任的多域访问控制模型[J]. 计算机应用与软件, 2015, 32(7):35- 38.

[11] 李由由, 郭海儒, 彭维平,等. 基于信任度属性的访问控制策略合成[J]. 计算机应用研究, 2016, 33(7):2175- 2180.

[12] 彭维平, 刘雪贞, 郭海儒,等. 基于信任度的多域安全访问控制模型研究[J]. 计算机应用研究, 2016, 33(6):1791- 1796.

[13] 叶重阳, 庄毅. 一种基于多维信任度的动态RBAC模型[J]. 计算机与现代化, 2015(6):7- 11.

[14] Hu V C, Kuhn D R, Ferraiolo D F. Attribute-Based Access Control[J]. Computer, 2015, 48(2):85- 88.

[15] Zhang X, Li Y, Nalla D. An attribute-based access matrix model[C]//ACM Symposium on Applied Computing. DBLP, 2005:359- 363.

[16] 毋涛, 张帆. 云计算下基于属性的访问控制方法[J]. 计算机系统应用, 2016, 25(2):231- 234.

[17] Kuhn D R, Coyne E J, Weil T R. Adding Attributes to Role-Based Access Control[J]. Computer, 2010, 43(6):79- 81.

[18] 李冬辉, 张斌, 费晓飞. 基于OSBE的属性访问控制模型[J]. 计算机工程与应用, 2015, 51(7):84- 87.

猜你喜欢

多域租户访问控制
“全时多域五三三”混合式课程思政教学模式的建构
多域SDN网络中多控制器负载均衡算法研究
基于多维战场空间理论的联合防空反导作战效能评估
基于时限访问控制模型的时间判断点选择算法研究
ONVIF的全新主张:一致性及最访问控制的Profile A
基于MVC模式的多租户portlet应用研究*
动态自适应访问控制模型
浅析云计算环境下等级保护访问控制测评技术
大数据平台访问控制方法的设计与实现
租户是大爷