(转)基于 SOA 的医疗权限管理服务

14年前

业务场景

安全作为一项非功能需求,在行业应用中受到越来越高的重视,而权限管理是安全领域的基本功能,保证拥有适当权限的用户才能访问应用。在电子健康档案系统中,患者的医疗档案具有私密性,他人不准查看,而出于医疗活动的需要,会开放给某些医生浏览或者更新,这就要求由患者为医生授权对文档的访问权限。安全处理可能散布在区域信息中心和各医院的多个应用系统之中,那么如何以统一的方式描述这种安全策略,并将安全处理独立出来,集中的执行和管理?


XACML

XACML(eXtensible Access Control Markup Language) 作为 OASIS 标准,用于描述通用访问控制策略,并提供执行授权策略框架。该框架包含策略的执行点 PEP、决策点 PDP、信息点 PIP 以及管理点 PAP,目标是对访问请求做出授权响应。XACML 的策略语言模型如图 1 所示。


图 1. XACML 策略语言模型
图 1. XACML 策略语言模型

规则 Rule 是策略 Policy 的基本单元,其中主要包括目标 Target、效果 Effect 和条件 Condition。目标定义了主体 Subject、资源 Resource、动作 Action 和环境 Environment,效果表示目标满足后的结果(允许 Permit 或是拒绝 Deny),条件表示该规则在何时适用。策略可以包含一组规则、规则结合算法、策略级别的目标和义务,其中策略级别的目标可以是策略中规则的目标交集,义务表示授权决策完成后要求执行点的动作。

下面通过 XML 片段说明 XACML 的策略和请求、应答消息。策略要求只有访问者 id 是以 med.example.com 为域名的 email, 才允许访问资源。请求消息中的访问者 id 并不满足要求,因此应答消息并没有允许该访问请求。


清单 1. XACML 策略示例
        <Policy xmlns="urn:oasis:names:tc:xacml:2.0:policy:schema:os"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:policy:schema:os     http://docs.oasis-open.org/xacml/access_control-xacml-2.0-policy-schema-os.xsd"    PolicyId="urn:oasis:names:tc:example:SimplePolicy1"    RuleCombiningAlgId="identifier:rule-combining-algorithm:deny-overrides">     <Description>Medi Corp access control policy</Description>     <Target/>   <Rule RuleId= "urn:oasis:names:tc:xacml:2.0:example:SimpleRule1" Effect="Permit">    <Description>Any subject with an e-mail name in the med.example.com domain    can perform any action on any resource.</Description>    <Target><Subjects><Subject>      <SubjectMatch MatchId="urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match">      <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">     med.example.com</AttributeValue>    <SubjectAttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"    DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name"/>       </SubjectMatch>      </Subject></Subjects></Target>     </Rule>    </Policy>   


清单 2. 请求消息示例
        <?xml version="1.0" encoding="UTF-8"?>    <Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:context:schema:os    http://docs.oasis-open.org/xacml/access_control-xacml-2.0-context-schema-os.xsd">     <Subject>      <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:subject:subject-id"      DataType="urn:oasis:names:tc:xacml:1.0:data-type:rfc822Name">       <AttributeValue>bs@simpsons.com</AttributeValue>      </Attribute>     </Subject>     <Resource>   <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id"       DataType="http://www.w3.org/2001/XMLSchema#anyURI">     <AttributeValue>file://example/med/record/patient/BartSimpson</AttributeValue>      </Attribute>     </Resource>     <Action>      <Attribute AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id"      DataType="http://www.w3.org/2001/XMLSchema#string">       <AttributeValue>read</AttributeValue>      </Attribute>     </Action>     <Environment/>    </Request>   


清单 3. 应答消息示例
        <?xml version="1.0" encoding="UTF-8"?>    <Response xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="urn:oasis:names:tc:xacml:2.0:context:schema:os    http://docs.oasis-open.org/xacml/xacml-core-2.0-context-schema-os.xsd">     <Result>      <Decision>NotApplicable</Decision>     </Result>    </Response>   


TSPM 简介

当前简单的基于角色访问控制已经不能满足要求,企业需要基于业务规则和上下文数据进行更细粒度的访问控制。于是,集中式的基于策略的安全管理系统出现了,它构建在开放标准之上,集中管理认证、授权等安全任务,方便与异构系统集成。灵活的策略管理框架有助于实现业务目标和安全要求,而通用的安全服务是 SOA 环境中的基础构造元素,它可以复用在多个业务场景中。

IBM 针对策略管理提出了包含建模 Author、转换 Transform、运行 Enforce 和监控 Monitor 在内的生命周期,有效的安全策略管理就需要贯穿这四个阶段,首先需要根据需求编写安全策略,策略的定义和管理由策略管理点完成,然后它以通用形式被分发到策略决策点和执行点,在系统应用中被执行。

TSPM 是基于标准的应用安全方案,它提供集中式的应用权利管理、SOA 安全策略管理和安全服务,来加强应用系统和业务服务的访问控制能力,从而在企业中实现服务治理。TSPM 使得主管部门和管理员将安全问题交给专门服务来处理,并且简化了复杂的授权策略管理;另一方面,使得企业架构师和安全操作员针对多个系统的安全需求,可以集中管理和执行策略。结合策略管理框架,TSPM 通过多个组件的协作完成安全策略的生命周期管理。Tivoli Security Policy Manager 控制台作为策略管理点,TSPM Runtime Security Services 作为策略决策点,保证容器级别安全性的 WAS 插件作为策略执行点。


图 2. TSPM 体系结构
图 2. TSPM 体系结构

医疗权限管理服务

TSPM 提供了通用的安全策略管理和执行平台,业务系统可以直接调用 RTSS 服务进行授权请求。但是,这需要业务系统构造 XACML 格式的请求,并遵从 RTSS 的访问协议,这增加了系统改造的负担,而且无法简单明了的配置访问控制列表。因此,针对区域医疗的集成环境,基于 TSPM 产品开发授权服务,对外提供简单的 Web 服务,根据请求构造 XACML 消息,再转发给 RTSS 进行授权处理。同时,该服务支持配置访问控制列表,使得在业务系统中也可以灵活的改变授权策略。图 3 给出了业务系统和医疗授权服务的关系。


图 3. 医疗权限管理的交互关系
图 3. 医疗权限管理的交互关系

该方案中,根据业务需求通过 TSPM 创建策略,并发布到 RTSS 等待执行。策略的定义依赖于业务服务的元数据、用户身份以及其他上下文信息。这里的策略与 Entitlement 数据不同, 它是符合 XACML 的通用策略,即通过请求中的主体、资源、动作、环境等,就可以得到是否允许访问的效果。实际的策略可能很复杂,根据不同情况进行处理。而 Entitlement 数据作为策略执行的上下文信息(信息点),从一个方面描述用户对资源的授权情况,为策略执行提供必要的支撑数据。读者可以通过下一章节的策略示例来理解它们的区别。

授权服务提供的方法包括根据请求参数返回授权结果,以及针对资源访问控制列表进行增删改查操作,代码片段如下所示。


清单 4. 授权服务接口
        @WebService    public class AuthzHealthcare{    @WebMethod    public List<AuthzEntry> authorize(List<AuthzEntry> props);      @WebMethod    public boolean addEntitlement(AuthzRelation record);    @WebMethod    public boolean removeEntitlement(AuthzRelation record);    @WebMethod    public boolean updateEntitlement(AuthzRelation record);    @WebMethod    public List<AuthzRelation> listEntitlement();    }   

其中 authorize 方法用于将外部系统的访问请求转化生成 XACML 消息,发送给 TSPM 的 RTSS 服务进行授权处理,并将返回的授权结果包装成 POJO 对象。其余方法针对授权数据表进行管理,授权数据表参考 XACML 模型进行设计,记录了访问主体、目标资源、访问类型和有效时间段。


权限管理在区域医疗中的应用

下面以医疗文档共享系统和居民主索引系统为例,说明区域医疗中安全策略的应用场景。


表 1. 区域医疗安全策略
应用 动作 策略
文档共享系统 Query EHRQueryPolicy
Retrieve EHRRetrievePolicy
Submit EHRSubmitPolicy
居民主索引系统 Register EMPIBasicPolicy
Update EMPIBasicPolicy
Retrieve EMPIBasicPolicy, EMPIRetrievePolicy
Query EMPIQueryPolicy

1. 查询文档

  • 安全需求:在查询医疗文档时,如果是紧急环境,就允许访问;如果病人查询自己的文档,则允许访问;如果某人已经得到病人的授权,则允许访问。
  • TSPM 模型:请求属性包括请求用户 ID、当前病人 ID、紧急标识,请求类型是查询;PIP 需要在数据库中查询该病人的授权用户;PDP 执行规则依次是,检查紧急标识,判断请求用户和当前病人是否一致,检查请求用户是否属于授权用户和当前时间处于授权有效期。

2. 获取文档

  • 安全需求:在获取医疗文档时,如果是紧急环境则允许;如果病人获取自己的文档则允许;如果某人已经得到该文档的获取授权则允许;如果某人已经得到病人的授权则允许。
  • TSPM 模型:请求属性包括请求用户 ID、当前病人 ID、文档 ID、紧急标识,请求类型是获取;PIP 需要在数据库中查询该病人的授权用户,以及查询该文档的授权用户;PDP 执行规则依次是,检查紧急标识,判断请求用户和当前病人是否一致,检查请求用户是否属于文档的授权用户,检查请求用户是否属于病人的授权用户,并且保证当前时间处于授权有效期。

3. 提交文档

  • 安全需求:在提交医疗文档时,如果用户角色属于医生,则允许。
  • TSPM 模型:请求属性包括请求用户 ID,请求类型是提交;PIP 在 LDAP 中查询用户的角色;PDP 判断用户角色是否是“医生”。

4. 操作居民信息

  • 安全需求:在注册、更新、获取、查询居民信息时,如果操作人员是主管部门的工作人员则允许操作。
  • TSPM 模型:请求属性包括用户 ID,请求类型可能是注册、更新、获取、查询,PIP 在 LDAP 中查询用户的角色;PDP 判断用户角色是否是主管工作人员。

图 4 举例说明了策略和权限管理服务的应用场景。EHR Viewer 为病人和医生提供浏览、查看医疗文档的功能。根据要求,该系统应该遵循以下策略,病人可以查看自己的文档,医生只有在经过授权,或者紧急状况下才可以访问病人的文档。下图中医生 doctor_b 的工作台中展示了病人张三的文档树,但由于未获得授权,对文档内容的访问被拒绝。如果增加病人授权,或者勾选紧急情况开关,则该请求允许访问。作为区域医疗解决方案中的系统之一,EHR Viewer 为了实现安全功能,将策略管理统一交由 TSPM 来完成,运行时与医疗权限管理服务进行交互,并根据授权结果进行后续处理。


图 4. EHR Viewer 中的权限管理
图 4. EHR Viewer 中的权限管理

总结

Tivoli Security Policy Manager 为分布式应用提供了统一集中的安全策略执行和管理功能,使得安全作为公共服务,从业务逻辑中分离出来,并且支持安全策略的整个生命周期管理。它实现了 XACML 框架,Policy Manager 作为 PAP,定义和分发 XACML 表达的安全策略;Authorization Service 作为 PDP,根据实际请求执行策略;数据源如数据库或 LDAP 服务器作为 PIP,为策略执行提供依据;对应用暴露的安全服务作为 PEP,接收访问请求并返回授权结果。在区域医疗应用场景中,基于 TSPM 开发授权管理服务,便于系统中授权策略的灵活配置和集中管理,从而为整个区域环境下的系统集成提供了有利的安全保障。


系列文章总结

随着中国新医改的推进,医疗信息化建设逐渐成为 IT 市场的热点之一。为了实现医改目标——建立以人为本的医疗服务体系,需要发展区域卫生信息化,建立电子健康档案,整合医疗卫生信息资源。IBM 提出了“智慧的医疗”,将电子健康档案作为区域医疗信息化建设的信息载体,基于 SOA 架构实现医院、社区、公共卫生等信息资源的整合和共享,从而实现以人为中心的医疗体系。本系列文章由 IBM 医疗解决方案实验室,结合医疗行业的实际需求,基于 IBM 的核心产品,针对区域医疗中的重点问题——医疗文档共享、居民主数据管理、公共服务总线以及安全问题,总结出一系列解决方案和开发方法。开篇文章首先介绍了区域医疗的问题和挑战,以及电子健康档案的概念,随后给出方案基于的医疗行业标准,最后重点介绍整个解决方案的体系结构和主要内容。接下来的文章分别介绍各主要问题的业务背景,标准相关内容,具体解决方案,开发概述和场景应用。通过该系列文章,希望能使读者了解医疗行业背景,理解如何采用 SOA 技术解决区域医疗的重点问题,从而熟悉我们的参考解决方案。


参考资料

学习

获得产品和技术

  • WebSphere 下载中心,您可以获得最新的 WebSphere 产品的试用版和免费版,让您可以提前免费体验相关产品的强大功能。

讨论

作者简介

闫哲:IBM 中国软件研发实验室 SOA 设计中心高级软件工程师,2007 年加入 IBM,参与过 SOA 策略管理、Web 服务元数据集成、医疗解决方案等项目,感兴趣的领域包括 SOA、数据集成、工作流、J2EE 开发等,

李传锋:IBM 集成技术交付(Integrated Technology Delivery,ITD)工程师,拥有 10 年的软件开发、设计、集成、交付和支持经验,领域涵盖电信 BOSS 系统、ITIL 管理软件、SOA 软件集成、J2EE、Web 2.0 等。

尹瑞:IBM 中国开发实验室 SOA 设计中心的高级软件工程师,曾参与过国内外多个 SOA 客户项目的实施,目前正从事于医疗卫生行业解决方案的开发