(轉)基于 SOA 的醫療權限管理服務
安全作為一項非功能需求,在行業應用中受到越來越高的重視,而權限管理是安全領域的基本功能,保證擁有適當權限的用戶才能訪問應用。在電子健康檔案系統中,患者的醫療檔案具有私密性,他人不準查看,而出于醫療活動的需要,會開放給某些醫生瀏覽或者更新,這就要求由患者為醫生授權對文檔的訪問權限。安全處理可能散布在區域信息中心和各醫院的多個應用系統之中,那么如何以統一的方式描述這種安全策略,并將安全處理獨立出來,集中的執行和管理?
XACML(eXtensible Access Control Markup Language) 作為 OASIS 標準,用于描述通用訪問控制策略,并提供執行授權策略框架。該框架包含策略的執行點 PEP、決策點 PDP、信息點 PIP 以及管理點 PAP,目標是對訪問請求做出授權響應。XACML 的策略語言模型如圖 1 所示。
圖 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> |
當前簡單的基于角色訪問控制已經不能滿足要求,企業需要基于業務規則和上下文數據進行更細粒度的訪問控制。于是,集中式的基于策略的安全管理系統出現了,它構建在開放標準之上,集中管理認證、授權等安全任務,方便與異構系統集成。靈活的策略管理框架有助于實現業務目標和安全要求,而通用的安全服務是 SOA 環境中的基礎構造元素,它可以復用在多個業務場景中。
IBM 針對策略管理提出了包含建模 Author、轉換 Transform、運行 Enforce 和監控 Monitor 在內的生命周期,有效的安全策略管理就需要貫穿這四個階段,首先需要根據需求編寫安全策略,策略的定義和管理由策略管理點完成,然后它以通用形式被分發到策略決策點和執行點,在系統應用中被執行。
TSPM 是基于標準的應用安全方案,它提供集中式的應用權利管理、SOA 安全策略管理和安全服務,來加強應用系統和業務服務的訪問控制能力,從而在企業中實現服務治理。TSPM 使得主管部門和管理員將安全問題交給專門服務來處理,并且簡化了復雜的授權策略管理;另一方面,使得企業架構師和安全操作員針對多個系統的安全需求,可以集中管理和執行策略。結合策略管理框架,TSPM 通過多個組件的協作完成安全策略的生命周期管理。Tivoli Security Policy Manager 控制臺作為策略管理點,TSPM Runtime Security Services 作為策略決策點,保證容器級別安全性的 WAS 插件作為策略執行點。
圖 2. TSPM 體系結構

TSPM 提供了通用的安全策略管理和執行平臺,業務系統可以直接調用 RTSS 服務進行授權請求。但是,這需要業務系統構造 XACML 格式的請求,并遵從 RTSS 的訪問協議,這增加了系統改造的負擔,而且無法簡單明了的配置訪問控制列表。因此,針對區域醫療的集成環境,基于 TSPM 產品開發授權服務,對外提供簡單的 Web 服務,根據請求構造 XACML 消息,再轉發給 RTSS 進行授權處理。同時,該服務支持配置訪問控制列表,使得在業務系統中也可以靈活的改變授權策略。圖 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 中的權限管理

Tivoli Security Policy Manager 為分布式應用提供了統一集中的安全策略執行和管理功能,使得安全作為公共服務,從業務邏輯中分離出來,并且支持安全策略的整個生命周期管理。它實現了 XACML 框架,Policy Manager 作為 PAP,定義和分發 XACML 表達的安全策略;Authorization Service 作為 PDP,根據實際請求執行策略;數據源如數據庫或 LDAP 服務器作為 PIP,為策略執行提供依據;對應用暴露的安全服務作為 PEP,接收訪問請求并返回授權結果。在區域醫療應用場景中,基于 TSPM 開發授權管理服務,便于系統中授權策略的靈活配置和集中管理,從而為整個區域環境下的系統集成提供了有利的安全保障。
隨著中國新醫改的推進,醫療信息化建設逐漸成為 IT 市場的熱點之一。為了實現醫改目標——建立以人為本的醫療服務體系,需要發展區域衛生信息化,建立電子健康檔案,整合醫療衛生信息資源。IBM 提出了“智慧的醫療”,將電子健康檔案作為區域醫療信息化建設的信息載體,基于 SOA 架構實現醫院、社區、公共衛生等信息資源的整合和共享,從而實現以人為中心的醫療體系。本系列文章由 IBM 醫療解決方案實驗室,結合醫療行業的實際需求,基于 IBM 的核心產品,針對區域醫療中的重點問題——醫療文檔共享、居民主數據管理、公共服務總線以及安全問題,總結出一系列解決方案和開發方法。開篇文章首先介紹了區域醫療的問題和挑戰,以及電子健康檔案的概念,隨后給出方案基于的醫療行業標準,最后重點介紹整個解決方案的體系結構和主要內容。接下來的文章分別介紹各主要問題的業務背景,標準相關內容,具體解決方案,開發概述和場景應用。通過該系列文章,希望能使讀者了解醫療行業背景,理解如何采用 SOA 技術解決區域醫療的重點問題,從而熟悉我們的參考解決方案。
學習
- 參考 TSPM 紅皮書 redp4483,了解 Tivoli Security Policy Manager 產品概要
- 參考 Info Center了解 Tivoli Security Policy Manager 技術細節
- 學習 eXtensible Access Control Markup Lauguage (XACML) Version 2.0
- developerWorks SOA and Web services 專區:讓您了解更多和 SOA 以及 Web 服務相關的內容,包括技術文章、教程以及特殊專題等。
獲得產品和技術
- 從 WebSphere 下載中心,您可以獲得最新的 WebSphere 產品的試用版和免費版,讓您可以提前免費體驗相關產品的強大功能。
討論