基于可扩展标记语言安全策略的网格访问控制方法

文档序号:7740333阅读:205来源:国知局
专利名称:基于可扩展标记语言安全策略的网格访问控制方法
技术领域
本发明是一种分布式计算的安全解决方案。主要用于解决网格环境下访问控制的问题,属于分布式计算软件安全技术领域。

背景技术
网格计算(Grid Computing)是指通过高速网络把分散在各处的硬件、软件、信息资源连结成一个巨大的整体,从而使得人们能够利用地理上分散于各处的资源,完成各种大规模的、复杂的计算和数据处理的任务。与以前的协同工作(Cooperativework)、分布式计算(Distributed Computing)等概念相比较,网格计算的集成程度更高、使用更加方便、资源的利用更加充分和有效。它标志着现代信息技术应用有一个新的、更高水平。
安全问题是网格计算技术的关键问题之一,特别是随着网格技术的商业化发展和普及,安全问题的解决更是迫在眉睫。本发明的目的就是介绍解决网格计算中的安全策略特别是访问控制方面的方法。目前对网格计算安全的研究还处在起步阶段,需要进行深入的研究。
可扩展标记语言(Extensible Markup Language,XML)作为一种异构平台之间进行数据交换和互操作的技术,是网格中最常用的数据交换表示形式,XML语言的安全是网格信息交换的基础。传统的技术如SSL和TSL的加密都是针对整个文件,在网格环境下,对XML文件的安全处理粒度不再是整个文件,有可能只是针对XML文档中部分信息进行加密签名等,因而有必要网格环境下使用一些基于XML技术的安全策略。
基于角色的访问控制RBAC是当前比较流行的访问控制模型,但和其它的传统访问控制模型一样采用的是静态授权,没有考虑所处的上下文环境,在应用于以动态性为显著特征的网格计算环境,必然导致一定的缺陷。本发明在基于角色访问控制RBAC模型的基础上进行了扩展,加入了用户活动角色、系统活动权限、用户活动权限、主体上下文、客体上下文的概念,并通过状态矩阵实现了基于上下文的访问控制,可以解决网格环境下上下文敏感的访问控制。


发明内容
技术问题;本发明的目的是为了解决网格计算访问控制过程中所涉及到的动态性和跨越不同安全域的问题。对角色进行安全域的限定,定义了不同安全域之间的角色继承关系,通过授权代理服务将本域的角色和其他域角色相关联建立域间的角色继承关系,对可能遇到的角色继承关系冲突给出了相应的解决方法。
技术方案本发明是标准RBAC模型基础上进行扩展,通过引入主体事件和客体事件两种上下文机制给出了基于上下文的角色访问控制(Role based AccessControl,RBAC)模型,该模型能够根据上下文信息实现动态的授权过程,形式化描述了由主体事件引起的角色状态改变和客体事件引起的权限状态改变的具体实现过程,同时对状态转换过程中的一致性分析表明该模型在状态转换过程中保持一致性。
下面给出该模型中的几个概念 安全域(Security Domain)加入网格环境的内部具有一致的安全体系的个体、组织、部门和团体等。
GSI(Globus Security Infrastrue)Globus安全基础架构。
PKI(Public Key Infrastructure)公钥基础架构。
RBAC(Role Based Access Control)基于角色的访问控制。
XACML(Extensible Access Control Markup Language)可扩展访问控制标记语言。
XML(Extensible Markup Language)可扩展标记语言。
本发明的基于可扩展标记语言安全策略的网格访问控制方法具体具体包括以下步骤 1).首先配置用户-角色设置的策略,设定域内的角色有两种,访客和管理员;策略文件中<规则>元素内子元素<主体匹配>的<属性值>的值为预设邮箱地址,匹配的规则采用姓名判断函数,以邮箱后缀名来作为判断依据,给用户名为预设邮箱后缀的用户配以管理员角色; 2).配置角色-权限的策略,定义管理员角色对资源10.10.138.*这个网段的资源节点有读、写和执行的权限,对资源<资源>10.10.138.*</资源>采用子网匹配的函数; 3).配置基于资源的动态访问控制策略,对网格中资源根据策略来动态控制用户的访问,比如基于时间的资源策略和基于资源动态性能的访问控制策略; 4).用户向服务提出访问资源请求; 5).核实用户信息,根据用户访问控制请求转换器把经过网格认证系统认证的用户信息与请求信息,转换为可扩展的访问控制标记语言的规范格式,把用户的信息归为<主体>元素,把请求要访问的资源归为<资源>元素,把对资源的访问动作类型归为<动作>元素; 6).根据转换后的可扩展的访问控制标记语言格式请求,提取用户请求消息中<资源>元素,检查相应的资源访问控制策略,若该资源处于可用状态,则进行下一步,否则返回<拒绝>信息; 7).根据接收到的可扩展的访问控制标记语言请求中<主体>元素里包含的<权限>,查询用户-角色信息库,以判断该用户属何种角色,并给用户匹配相应的角色; 8).根据分配到的角色再查询角色-权限信息库,给该角色分配相应的权限,如读,写,运行的权限; 9).将该角色的权限与用户的请求<动作>对比,用户的请求动作属于该角色的权限则匹配合格进行下一步,请求动作在用户的权限之外则匹配失败则返回<拒绝>信息; 10).以上步骤全部通过则给用户返回相应的最终访问协议,用户可以通过该协议对请求的资源做指定的动作。
有益效果本发明主要优点有如下几个 (1)内容简单从定义可以看出扩展的RBAC只是在权限分配和角色分配处加入了上下文驱动和对角色进行安全域的限定,其余定义保持标准的内容,从而保证了一定的兼容性,也使该模型易于实现; (2)多粒度控制上下文的控制分角色动态分配和权限动态分配,从而更好地适应网格的动态特性,从而实现跨域的访问控制; (3)易于扩展上下文的定义本身是动态的,只需要在接口上提供状态转换控制,可以灵活的加入各种动态逻辑例如依据CPU负载的控制、依据时间的控制、依据用户访问数目的控制、依据地点的控制以及依据链路状态的控制等等。



图1是核心RBAC的组成元素。
图2是安全域内的网格访问控制模型。
图3是状态机RSM的示意图。
图4是状态机PSM的示意图。
图5网格访问控制基本流程图。
图6是本发明系统流程图。
图7是本发明模型的设计流程图。

具体实施例方式 一.体系结构 图1给出了核心RBAC定义了RBAC模型最基本的五个元素用户、会话、角色、操作、对象特权(权限)。
用户(User)代表人,但是也可以是一台机器、agent或其他任何智能型物品。
角色(Role)表示一个工作职责,在一个组织机构环境中的工作职责。该职责可以关联一些关于权力和责任的语义。
权限(Permission)是一个许可,对在一个或多个对象上执行操作的许可。
操作(Operation)是程序的可执行的反映(image),被用户调用和执行。操作的类型取决于实现系统的类型。例如文件系统可能的操作时读写,执行等,数据库系统则是CRUD。
对象(Object)表示资源或对象,任何访问控制机制都是为了保护系统的资源。对象可能包括文件,目录,数据库表,行,字段等等,甚至于磁盘空间,打印机,CPU周期等都是资源。
图2给出了基于上下文的RBAC模型,其中(1).认证及授权服务负责网格计算中安全域内的认证和授权服务,该服务是可管理和配置的并且依据策略来动态控制。(2).上下文代理(Context Agent)由认证及授权服务分配到指定的角色和权限处,它们使用中间件服务来监测上下文并产生事件触发状态机的状态迁移。(3).角色状态机(Role State Machine)用于维护分配给用户的角色转移状态,它受上下文代理驱动。(4).权限状态机(Role State Machine)用于维护用户当前角色的权限转移状态,它也受上下文代理驱动。
二.方法流程 本发明选择无线网格来作为我们具体案例的描述背景。在无线网格环境下,我们同样将上下文分为两类主体上下文(例如用户地点、用户时间、本地资源状态、链路状态等)、客体上下文(例如当前负载、可用状态、连接性)。下面我们通过实例分别对主体上下文和客体上下文访问控制进行描述。
(1)主体上下文访问控制 实例在一个无线环境下,当用户使用内部无线安全链路接入时,分配用户角色为超级用户角色(权限为P1,P2,P3),当用户使用外部无线安全链路接入时,分配用户普通用户角色(P1,P2)。当用户使用外部非安全链路接入时,分配用户访客角色(P1)。
表4-1及表4-2给出了该案例中角色和事件的信息说明。显然我们可以容易的将这些内容用一个角色状态机(RSM)来描述。如图4-9所示是一个状态机的示意图,其中每个节点表示一个状态,每条边表示一个事件。其中的RS0表示禁止状态,当别的角色转变到RS0时,表示该角色将要在该次会话中被禁止。
表1角色权限表 表2事件表 我们采用XML格式的策略描述信息来对无线网格访问进行控制,下面是用户角色转移的策略说明示例。
对于主体事件驱动下的状态变化,只是针对用户主体,因而只涉及到一个用户user的角色权限转变,其角色转换过程如下 TransSubRoles(role_1ROLES,role_2ROLES,eventSUB_EVENTS)

while((role_1,event,role_2)∈RER∧event.state==activate)

session∈role_sessions(role_1)·session.state=Execute session.state=Block role_1.state=enable if((user

role_2)

UA) session.state=Error else·if(role_2

authorized_roles(session)) AddActiveRole(user,session,role_2) role_2.state=activate TransSubPerms(role_1,role_2,session) authorized_role′=authorized_role\{role_2}∪{role_1} activated_role′=activated_role\{role_1}∪{role_2} session.state=Activate
其中,子函数AddActiveRole(userUSERS,sessionSESSIONS,role_2)表示role_2不在被授权的角色集中时,则要在该会话中增加该角色的定义为 AddActiveRole(userUSERS,sessionSESSIONS,role_2)

authorized_roles′(session)=authorized_roles \{session

authorized_roles(session)} ∪{session

(session_roles(session)∪{role_2})} authorized_prms′(session)=authorized_prms ∪ {role_2

authorized_prms(role_2,session)}
而子函数TransSubPerms(role_1,role_2,event)则是进行相应的权限调整,即将role_1所授予的并处于activate的权限的状态调整为enable,而将role_2所授予的权限,状态为enable调整为activate,最后分别调整authorized_prms集和activated_prms集,该函数的具体定义为 TransSubPerms(role_1ROLES,role_2ROLES,sessionSESSIONS)

prms∈activated_prms(role_1,session) prms.state=enable

prms′∈authorized_prms(role_2,session) prms′.state=activate authorized_prms′=authorized_prms\{role_2

(authorized_prms(role_2)}∪ {role_2

(authorized_prms(role_2)\{prms′}∪{prms}} activated_prms′=activated_prms\{role_1

(activated_prms(role_1)}∪ {role_1

(activated_prms(role_1)\{prms}∪{prms′}}
当事件的发生引起角色状态变化从激活状态到禁止状态时,即相当于从role_1到role_0的角色转换。也可以用该种表示方式来实现 DropActiveRole(role_1ROLES,eventEVENTS,sessionSESSIONS)

while(role_1,event,role_0)∈RER0∧event.state=activate DropSubPerms(role_1,session) role_1.state=disable activated_role′(session)=activated_role\{role_1}
其中的子函数DropSubPerms(role_1,session)表示该角色所授予和激活的权限的状态也转变为禁止状态 DropSubPerms(role_1,session)

prms∈activated_prms(role_1,session) prms.state=disable

prms′∈authorized_prms(role_1,session) prms′.state=disable authorized_prms′(session)=authorized_prms\{prms′} activated_prms′(session)=activated_prms\{prms}
(2)客体上下文访问控制 实例只允许用户在早上8:00到晚上8:00对某资源进行访问;允许用户在资源的CPU负载处于<80%时对资源进行访问,而>80%只允许读资源;只有一个会话使用资源时资源可读可写可执行,而有多个会话使用资源时,资源则不能写。
表4-3及表4-4给出了该实例中权限状态和事件的信息说明。同样我们可以用权限状态机(PSM)来描述这些情形。如图4-10所示是权限状态机的示意图,其中每个节点表示一个状态,每条边表示一个事件,PS0表示该权限的禁止状态。
表3权限状态表 表4事件表 我们依然采用XML格式的策略描述信息来对无线网格访问进行控制,下面是权限转移的策略的一个示例。
若存在某个或某些事件可以将权限实现禁止和允许之间的转换则对于权限从禁止到允许,我们称为基于状态机的权限激活而从允许到禁止我们称作权限的钝化。
对于客体事件驱动下的状态变化,由于针对同一个系统,因而关系到使用该权限的所有会话,由客体事件引起的权限状态转换为 TransObjPerms(prms_1PERMS,prms_2PERMS,eventOBJ_EVENTS)

while((prms_1,event,prms_2)∈PEP∧event.state==activate)

session∈(avail_perms_session(prms_1)·session.state=Execute session.state=Block if(prms_2∈authorized_prms(session)) prms_1.state=enable prms_2.state=activate TransObjRoles(prms_1,prms_2,session) authorized_prms′(session)=authorized_prms\{prms_2}∪{prms_1} activated_prms′(session)=activaed_prms\{prms_1}∪{prms_2} session.state=activate else·session.state=Error 其中的子函数TransObjRoles(prms_1,prms_2,session)是进行相应的角色状态调整,即将授予prms_1权限的并处于状态activate的角色状态调整为enable,而将授予prms_2权限的并处于状态enable的角色状态调整为activate,最后分别调整authorized_roles集和activated_roles集,该函数的具体定义为(考虑角色继承关系) TransObjRoles(prms_1,prms_2,session)

role∈activated_roles(session)∧(role

prms_1)∈PA

prmsPERMS·(role

prms)∈PA∧prms.state!=activate role.state=enable if(

role′ROLES·

prms∈activated_prms(role)∧(role′

prms)∈PA) role′.state=activate

role′∈authorized_roles(session)∧(role′

prms_2)∈PA role′.state=activate authorized_roles′=authorized_roles\{session

(authorized_roles(session)}∪ {session

(authorized_roles(session)\{role′}∪{role}} activated_roles′=activateed_roles\{session

(activated_roles(session)}∪ {session

(activated_roles(session)\{role}∪{role′}}
同样当有权限撤销时,即转移到PS0状态,相应的转化过程为 DropActivePerms(prms_1PERMS,eventEVENTS,sessionSESSIONS)

while((prms_1,event,prms_0)∈PEP0∧event.state==activate) DropObjRoles(prms_1,session) prms_1.state=disable activated_prms′(session)=activated_prms\{prms_1}
而相应的授予和激活该权限的角色的状态也转变为禁止状态。
DropObjRoles(prms_1,session)

role∈authorized_roles(session)∧(role

prms_1)∈PA∧ (

rmsPERMS·(role

prms)∈PA∧prms.state

{activate,enable}) role.state=disable authorized_role′(session)=authorized_role\{role} activated_role′(session)=activated_role\{role}
在此,我们考虑了继承角色状态的改变,当激活的角色所对应的权限都为enable时,而通过继承来的激活权限则需要转移到该权限所属的角色被激活。
一个完整的运用可扩展标记语言实现网格访问控制的执行流程如图7所示。
1).首先配置用户-角色设置的策略,设定域内的角色有两种,访客和管理员;策略文件中<规则>元素内子元素<主体匹配>的<属性值>的值为预设邮箱地址,匹配的规则采用姓名判断函数,以邮箱后缀名来作为判断依据,给用户名为预设邮箱后缀的用户配以管理员角色; 2).配置角色-权限的策略,定义管理员角色对资源10.10.138.*这个网段的资源节点有读、写和执行的权限,对资源<资源>10.10.138.*</资源>采用子网匹配的函数; 3).配置基于资源的动态访问控制策略,对网格中资源根据策略来动态控制用户的访问,比如基于时间的资源策略和基于资源动态性能的访问控制策略; 4).用户向服务提出访问资源请求; 5).核实用户信息,根据用户访问控制请求转换器把经过网格认证系统认证的用户信息与请求信息,转换为可扩展的访问控制标记语言的规范格式,把用户的信息归为<主体>元素,把请求要访问的资源归为<资源>元素,把对资源的访问动作类型归为<动作>元素; 6).根据转换后的可扩展的访问控制标记语言格式请求,提取用户请求消息中<资源>元素,检查相应的资源访问控制策略,若该资源处于可用状态,则进行下一步,否则返回<拒绝>信息; 7).根据接收到的可扩展的防问控制标记语言请求中<主体>元素里包含的<权限>,查询用户-角色信息库,以判断该用户属何种角色,并给用户匹配相应的角色; 8).根据分配到的角色再查询角色-权限信息库,给该角色分配相应的权限,如读,写,运行的权限; 9).将该角色的权限与用户的请求<动作>对比,用户的请求动作属于该角色的权限则匹配合格进行下一步,请求动作在用户的权限之外则匹配失败则返回<拒绝>信息; 10).以上步骤全部通过则给用户返回相应的最终访问协议,用户可以通过该协议对请求的资源做指定的动作。
权利要求
1.一种基于可扩展标记语言安全策略的网格访问控制方法,其特征在于该方法具体具体包括以下步骤
1).首先配置用户-角色设置的策略,设定域内的角色有两种,访客和管理员;策略文件中<规则>元素内子元素<主体匹配>的<属性值>的值为预设邮箱地址,匹配的规则采用姓名判断函数,以邮箱后缀名来作为判断依据,给用户名为预设邮箱后缀的用户配以管理员角色;
2).配置角色-权限的策略,定义管理员角色对资源10.10.138.*这个网段的资源节点有读、写和执行的权限,对资源<资源>10.10.138.*</资源>采用子网匹配的函数;
3).配置基于资源的动态访问控制策略,对网格中资源根据策略来动态控制用户的访问,比如基于时间的资源策略和基于资源动态性能的访问控制策略;
4).用户向服务提出访问资源请求;
5).核实用户信息,根据用户访问控制请求转换器把经过网格认证系统认证的用户信息与请求信息,转换为可扩展的访问控制标记语言的规范格式,把用户的信息归为<主体>元素,把请求要访问的资源归为<资源>元素,把对资源的访问动作类型归为<动作>元素;
6).根据转换后的可扩展的防问控制标记语言格式请求,提取用户请求消息中<资源>元素,检查相应的资源防问控制策略,若该资源处于可用状态,则进行下一步,否则返回<拒绝>信息;
7).根据接收到的可扩展的访问控制标记语言请求中<主体>元素里包含的<权限>,查询用户-角色信息库,以判断该用户属何种角色,并给用户匹配相应的角色;
8).根据分配到的角色再查询角色-权限信息库,给该角色分配相应的权限,如读,写,运行的权限;
9).将该角色的权限与用户的请求<动作>对比,用户的请求动作属于该角色的权限则匹配合格进行下一步,请求动作在用户的权限之外则匹配失败则返回<拒绝>信息;
10).以上步骤全部通过则给用户返回相应的最终访问协议,用户可以通过该协议对请求的资源做指定的动作。
全文摘要
基于可扩展标记语言安全策略的网格访问控制方法是为了解决网格计算访问控制过程中所涉及到的动态性和跨越不同安全域的问题。对角色进行安全域的限定,定义了不同安全域之间的角色继承关系,通过授权代理服务将本域的角色和其他域角色相关联建立域间的角色继承关系,对可能遇到的角色继承关系冲突给出了相应的解决方法。本发明是标准RBAC模型基础上进行扩展,通过引入主体事件和客体事件两种上下文机制给出了基于上下文的角色访问控制模型,该模型能够根据上下文信息实现动态的授权过程,形式化描述了由主体事件引起的角色状态改变和客体事件引起的权限状态改变的具体实现过程,同时对状态转换过程中的一致性分析表明该模型在状态转换过程中保持一致性。
文档编号H04L12/56GK101771698SQ20101001791
公开日2010年7月7日 申请日期2010年1月15日 优先权日2010年1月15日
发明者王汝传, 郑卿, 王海艳, 王杨, 张琳, 邓勇 申请人:南京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1