刘 畅,喻 潇,王 捷,徐江珮,田 里
(1.国网湖北省电力公司电力科学研究院,湖北 武汉 430077;2.国网湖北省电力公司十堰供电公司,湖北 十堰 442000)
现今,信息化已朝着电子化、互联网化、移动化方向快速发展。随着业务的多元化,组织机构与信息系统环境变得庞大复杂,企业在数据安全、流程风控和效率等方面都面临严峻挑战。组织中有日益增长的内部人员、外包人员和外部客户等不同维度的人员,以及不同人员所被赋予的岗位职责与权限,这些用户与权限与组织流程的运营效率和风险密切相关。大量数据显示,多数安全风险实际是来自组织的内部人员,以及由于缺失规范的内部控制体系导致相关联外部人员违规操作,从而直接威胁到组织经营安全。只有清晰、合理地权责划分,才可能为风险控制体系奠定坚实的基础。身份管理平台是科学进行职责权限分工的必要工具,是完善组织内部控制系统的重要手段。组织需要合理划分每个人员的岗位职责和权限的安全边界,确保合适的人、在合适的岗位,有适当的职责与访问权限。
身份管理的概念来源于西方。早在2002年,美国政府对SOX的立法增加了对身份管理与访问控制(Identity and Access Management)技术的需求。于是从2004开始,第一批身份管理产品相继诞生,它们来自大家耳熟能详的厂商:IBM、CA、Oracle、BMC等。
经过若干版本的迭代和与用户需求实践的积累,2011年IDaaS概念被提出,即“身份即服务”。Okta,Onelogin,Centrify等一批新型的厂商开始在互联网上提供身份基础服务。时至今日,身份管理的覆盖范围扩展到了各种应用系统;管理的对象延伸到对实体身份的管理,实体不仅包括人、组织,也包括各种物理对象、虚拟对象等等;管理的重心也从原来简单的帐户管理转向授权管理和审计等方面。根据注明咨询机构Gartner在2017年6月发布的统计报告,全球市场中占主要地位的仍是Okta、Oracle、微软、IBM和CA等大型厂商。
图1 身份管理行业魔力四象限Fig.1 Identity management industry magic Quadrant
回顾中国国内,身份管理概念的引入大概是在“十一五”期间,即2006-2010年。国内的大型企业接团纷纷开始建设自己的身份管理体系。国家电网的“SG186”工程、中国石化集团的统一身份认证项目即是其中的典型代表。此时,国外企业的产品通过直销或者代理的方式进入了国内市场,同时也将身份管理的理念灌输给国内的企业客户。
随后,国内也出现了专注于身份管理技术的高新企业。其中的典型代表有国内软件行业的先行者中科软股份有限公司、技术专注而经验丰富的竹云科技有限公司等等。这些企业已经完成了身份管理解决方案的国产化,并且在业内也已经有了一定的成功案例,技术比较成熟。
身份管理平台现已成为信息化的基础平台之一。通常情况下,身份管理平台从人力资源系统等权威用户数据源处获取基础身份信息,并建立身份主数据,集中维护身份属性,供应给应用系统。
若将身份管理平台的逻辑架构进行抽象地概括,核心可以抽象为业务层和数据层。用户可以通过浏览器访问其用户接口,进行自助访问;管理员通过浏览器进行平台管理。应用系统则通过各种接入方式实现与身份管理的供应和回收接口对接。
图2 身份管理平台基础架构Fig.2 Identity Management Platform Infrastructure
经过身份管理项目中的一系列工作,权威的身份数据经过一定流程输入到身份管理平台中,通过业务层和数据层之后,被整理成易于应用系统取用的数据,通过身份管理平台的供应接口传输到应用系统中。这些数据通常包括用户(自然人)的基本身份数据、用户在组织中的角色数据、用户在特定应用系统中的特殊属性数据等。例如,用户的姓名、身份证号码、手机号码、电子邮件地址、用户工作单位、用户岗位名称、用户的权限等级等。
应用系统是指在信息化建设中,为了实现业务或职能的自动化、信息化,而建立的各种信息系统。例如,人力资源系统(简称HR系统)、协同办公系统(简称OA系统)、企业资源规划系统(简称ERP系统)等等。
应用系统接入身份管理平台主要是实现集中的身份信息的管理。从信息系统的整体规划来看,身份管理平台是基础服务平台,置于业务系统等应用系统的下层,为上层应用系统提供身份信息。从底层来看,身份管理平台中的身份主数据,包含了各个应用系统运行所需的电子身份信息,例如账号、用户基础属性(姓名、性别、年龄、部门等等),用户基础权限(用户组、岗位、角色等等),以及其他个别应用系统所需的特殊字段。接入的主要目标,是实现这些数据在身份管理平台和应用系统之间的流动。
接入的过程往往是比较困难的。这是由于应用系统的类型和数量都是非常大的。以中石化集团为例,其业务系统总数达到6000多个;其中,既有上世纪80年代建设的C/S架构业务系统、主流的B/S架构业务系统,也有最近上线的云架构应用系统。这些系统由不同的供应商提供,采用不同的技术架构,使用不同的基础信息平台。
经过业内专家若干年的经验积累,通常会使用“连接器方式”和“私有协议/SDK方式”将应用系统接入身份管理平台。
连接器是身份管理平台为了连接各目标系统的数据存储库而编写的程序。连接器在得到身份管理平台的指示后,主动与应用系统的数据库对接,实现身份管理平台操作目标应用系统数据的功能。
几乎所有的应用系统都可以抽象地看做是对数据做处理的信息系统。身份信息也是以数据的形态存储在应用系统中。因此,在应对众多复杂多样的应用系统时,直接操作数据来实现身份管理平台接入的方式是非常直接的,也是广泛可行的一个连接器必须实现两类接口,Configuration和Connector。其中Configuration接口负责定义接口的基本属性,例如连接器的URL、标识信息、加密信息等。Connector类的接口则负责实现数据的增删改查等具体功能。
图3 连接器接入方式逻辑示意图Fig.3 Connector access diagram logic diagram
(1)配置(Configuration)接口
配置接口中包含了连接器连接目标系统并实现操作的一些参数。除此之外还可以实现Validate()来验证参数的正确性。每一个连接参数使用Anno⁃tation(Java)or attribute(.NET)的方式来实现,它有这样一些元属性:
以下代码用以实现一个无状态的接口配置逻辑:
表1 配置接口元属性表Tab.1 Configure interface element attribute table
表2 连接器接口元属性表Tab.2 Connector interface element attribute table
Message文件是用来填写接口中使用到的一些参数。例如helpm1essageKey、displayMessageKey等调用的参数。可对Message的配置将Connector的显示信息进行国际化操作。默认的Message文件和Con⁃nector在同一个包中,可以使用messageCatalogPaths来指定。
通常一个连接器都要实现若干的基础接口,例如创建接口、删除接口、禁用接口、修改接口、查询接口等。有的连接器还需要根据应用系统的特殊情况设置特殊的接口,例如Scheme接口等。本文将讨论典型接口的实现逻辑。
创建接口在目标系统中创建对象,并返回对象的UID属性。如果创建的操作部分成功,Connector回滚当前的操作并抛出异常。如果不能回滚,则Connector可以抛出RetryableException。创建的实现逻辑如下:
类似的,Connector通过ObjectClass和UID在目标应用系统中删除一个对象的实现如下:
通过ObjectClass和UID来确定一个对象,然后更新对应对象的属性。
以上典型接口的逻辑剖析可以从底层的角度展示一个连接器在实现目标应用系统接入时的接入方法。其他典型接口与上文中接口实现逻辑类似,在此不做赘述。连接器方式这种直接操作目标应用系统数据库的方式适合用来应对一些陈旧的应用系统。
例如,在某早期建设的应用系统中,使用IBM的DB2数据库作为后端数据存储。其应用系统采用早期的技术部署于IBM的小型机上。此应用系统的用户管理模块,会维护数据库中的一张用户表,从而实现对账号的增删改查。此时,要将该系统接入到身份管理平台中,也就意味着用户的增删改查应该由身份管理平台统一负责。管理员不再登录到该应用系统,而是直接在身份管理平台中进行用户的增删改查。
在此案例中,身份管理平台将通过连接器发起数据变更的操作,主动将变更同步到应用系统的数据库用户表中。具体实现中,连接器调用IBM提供的ODBC,通过DB2的接口来进行用户表中数据项的增删改查。这种方式的实现非常简单直接,以判断用户类别是内部员工还是外包人员的代码为例:
连接器方式在身份管理平台的接入项目中非常常见,它可以通过简单的方法来实现应用系统的接入。因此,能够在很多复杂的应用系统环境中使用。但是,由于是针对数据层的直接接入,如果操作不慎,可能造成应用系统错误,致使业务停滞。而且,连接器的编写必须根据应用系统的实际情况来完成,不同的应用系统往往不能通用。因而,在身份管理项目中往往要花费很多精力在连接器的开发和测试上,支出的代价可谓比较可观。
因此,连接器方式虽然简单高效,却不是一个值得推荐和广泛使用的接入方式。在近些年的项目场景中,往往只是使用这种方式处理那些年代久远且无法改造的应用系统和已经成熟的标准商业套件。
私有协议方式(又称为SDK方式),将身份管理平台中的身份数据,以标准的规范格式提供给应用系统,实现应用系统的身份管理接入。
图4 私有协议/SDK接入方式逻辑示意图Fig.4 Private protocol/SDK access diagram
与连接器不同的是,这种方式不再主动去操作应用系统的数据,而是提供这些数据,等待应用系统来取用。这种变化,将主动权交还给应用系统,保障应用系统中的数据只会通过应用系统自身进行修改。而且,身份管理平台通过提供标准的数据服务接口,也降低了自身系统的复杂程度,并且为新建应用系统提供了统一的接入标准。进一步推进了企业的信息系统标准化进程。采用私有协议/SDK方式进行集成时,无需编写连接器,但要求应用系统进行改造。身份管理平台则只需完成对应的配置,即可与应用系统完成接入。
通常情况下,为了方便应用系统端进行改造,身份管理平台会提供封装完毕的抽象类,它一般包括如下方法:
(1) Create(objectCode, attributes),return Key(String)
应用系统实现这个方法,完成应用系统端的目标对象的创建。应用系统要返回账号的Key,身份管理平台会把这个Key保存在系统中,以后的更新、删除等操作,就可以用这个Key作为关键字。如果失败,要有Exception抛出,Exception中有失败的原因描述。
(2) Update(objectCode,key,attributes,action),re⁃turn Key(String)
Action可以有(Update、Enable、Disable、Lock、Un⁃lock)。应用系统实现这个方法,完成应用系统端的目标对象更新,并返回Key值。如果失败要有Ex⁃ception抛出,Exceptin中有失败的原因。身份管理平台对账号的启用、禁用等操作,在客户端中被调用的也是Update,只是传的action不同。
(3)Delete(objectClassName,Key)
应用系统实现这个方法,完成应用系统端的目标对象删除。如果失败,要有Exception抛出,Excep⁃tion中有失败的原因。
(4)Search(objectCode,filter,returnAttrsNameList,pageNumber,pageSize)
根据传入的returnAttrsNameList,组装对象。将组织好的目标对象列表返回。应用系统根据传入的Filter和Page查询目标对象。查询的时候,根据依赖关系情况进行返回:
·有层级关系的目标对象(比如TORG),要先返回父节点,再返回子节点;
·有Manager的目标对象(TACC),要先返回Manager。
以一个Java开发的B/S架构的WEB应用系统为例。为了能以私有协议/SDK的方式接入身份管理平台,首先要将上述抽象类以Servlet方式嵌入到应用系统中。应用系统管理员修改web.xml文件,以便在应用系统启动时可以同时启用该身份管理Servlet。
以身份管理平台提供的抽象类为基础,应用系统的改造工作就相对简易了。思路大体分为3部分:配置文件、属性映射、完成操作。
其中,配置文件用于连接身份管理平台,其中一般包含连接用的URL、身份标识信息以及加密隧道等配置。Main函数需要有访问该配置文件的权限。例如,以下代码从D盘根目录下读取了配置文件“im-integration.fps.properties”,并从身份管理平台取一次数据。
取到数据之后,需要将数据格式调整为应用系统可以识别的格式,这个过程就是属性映射。这部分的实现逻辑条理非常清晰,以用户的常见身份属性为例,如下代码实现了属性的映射。
完成了属性定义后,就可以根据情况对应用系统的数据进行更新了。仍然使用上文的例子,要更新该用户的属性,直接调用应用系统中的用户信息修改的方法即可。为了清晰,本文以应用直接写数据库为例:
应用系统中所需的其他身份数据的下拉与上推过程逻辑与上述用户属性的过程类似,在此不再赘述。
私有协议/SDK接入方式在身份项目的实施中可以清晰地定义身份管理平台和应用系统的界限,使得原本纷繁复杂的接入过程变得条理清晰。身份管理平台通过提供已经封装好的抽象类,简化了应用系统改造的过程,大幅度缩短了改造工程的实施周期。故而,在现今的身份管理项目中,使用这种接入方式可以提高整个项目的实施水平,也方便日后的维护。但是,如果应用系统不能支持改造,这种接入方式是无法实施的。因此,对应用系统的运维团队的代码能力要求相对要高一些。
通过剖析这两种接入方式的实现逻辑,可以得出以下结论:连接器方式和私有协议/SDK方式均能满足身份管理平台的接入要求。然而,前者与应用系统关系更紧密,项目中开发工作量相对较大,增加了系统的复杂性,提高了故障定位的难度;后者则采用统一的接口协议,明确了应用系统与身份管理平台之间的界限,减少了身份管理项目的开发工作量,简化了信息部门的运维工作。因此,在条件允许的情况下,建议首选私有协议/SDK方式来实现身份管理的接入,连接器方式可以作为一个补充,应对项目中的特殊情况。
身份管理作为信息安全范畴下的一个细分领域,已经得到信息主管单位的重视,并且在各行业的信息化部门中广泛得以应用。通过本文对身份管理平台接入方式的梳理和总结,可以让更多的企业或组织从中受益,提高自身的信息安全水平和内部风险控制水平,以更完善的基础信息服务来辅助业务的高速发展。
[参考文献](References)
[1] 薛聪,向继,高能.身份管理发展趋势和中国科学院身份管理系统[J].科研信息化技术与应用,2015,6(01):41-49.XUE Cong,XIANG Ji,GAO Neng.The trend of iden⁃tity management and the identity management sys⁃tem of Chinese academy of sciences[J].E-science Technology and Application,2015,(01):41-49.
[2] 陈志德,黄欣沂,许力.身份认证安全协议理论与应用.[M].北京:电子工业出版社,2015.CHEN Zhide,HUANG Xinyi,XU Li.Theory and application ofauthentication protocol[M].Beijing:Publishing House of Electronics Industry,2015.
[3] 陈茂隆.云计算平台下用户身份管理系统的设计与开发[D].天津:天津大学,2012.CHEN Maolong.Design and implementation of user identity managementsystem in cloud computing center[D].Tianjin:Tianjin University,2012.
[4] 赵琨.身份管理系统与企业信息系统的集成与应用研究[D].上海:上海交通大学,2008.ZHAO Kun.The research of integration and applica⁃tion of identify management with enterprise’s infor⁃mation system[D].Shanghai:Shanghai Jiaotong Uni⁃versity,2008.
[5] 于子元.基于SAML和REST的企业级身份管理系统的研究与实现[D].长春:东北师范大学,2009.YU Ziyuan.The research and implementation of en⁃terprise identity management system based on SAML and REST[D].Changchun:Northeast Normal University,2009.
[6] 徐元区.基于统一身份管理的企业安全体系架构的设计和实现[D].北京:北京邮电大学,2008.XU Yuanqu.Design and implementation of security system in enterprise it infrustructure based on uni⁃fied identity authentication[D].Beijing:Beijing Uni⁃versity Of Posts And Telecommunications,2008.
[7] 李石师.统一身份管理系统的设计与实现[J].中国新技术新产品,2015(15):27.LI Shisi.The design and implementation of a unified identity management system[J].China New Technolo⁃gies and Products,2015(15):27.