安全不是对面向服务架构(SOA)避而远之的理由。虽然SOA安全还没有完全成熟起来,但如今有30%的企业在使用SOA与外部的客户和合作伙伴进行集成。对使用简单对象访问协议(SOAP)的标准Web服务而言,WS-Security规范达到了作为一项基本标准所需的临界规模。另一方面,高级的SOA安全解决方案――涉及合作伙伴之间的联合、不可否认性(nonrepudiation)以及跨实现的多层服务传播用户身份――还处于初期阶段。为了从如今的实用阶段进入到将来的高级SOA安全阶段,你就要为完善SOA安全架构建立一个反复迭代设计过程;这个架构要考虑目前及将来的安全要求、新兴的行业规范、SOA安全方面产品功能的重叠,以及可能需要定制的安全集成。
SOA安全所涉及的内容
作为设计SOA安全的基础,为SOA请求和响应确保安全的最简单方法就是,把它们放在虚拟专用网(VPN)里面。确保外部SOA安全的最常用方法就是使用双向安全套接层(SSL)协议,该协议:
1)允许彼此联系的各合作伙伴都能验证对方的身份;
2)为安全设定了高标准。
除非黑客从服务使用者处窃取了证书和密钥,否则他们甚至无法连接到基于SOA的服务。虽然建立VPN比较容易,但基于VPN的SOA安全存在粗粒度(coarse-grained)的弊端,也没有能力来支持一些高级功能,比如跨实现的多层服务传播用户身份;多个安全域之间的协调和联合;以及严格的不可否认性。另外,证书日常管理可能会成为管理负担。
确保SOA安全的其他重要办法包括:利用Java或.NET应用平台中现有的SOA安全特性,或把SOA专业产品中的SOA安全特性结合起来,比如企业服务总线、SOA和Web服务管理解决方案、SOA安全服务或SOA硬件设备等产品。硬件设备为SOA安全提供了最简单、最专门的“嵌入式”(drop-in)解决方案;不过构建整体SOA平台时,需要考虑SOA专业产品具有的一些优缺点。
SOA架构的层次
借助应用服务器和SOA专业产品的新兴功能,连一些简单的SOA安全解决方案也很诱人。在过去,企业一直不太情愿处理实现高级应用安全要求所面临的困难。随着实现的SOA安全机制不断成熟――加上有了更广泛的架构来实现安全联合,实现高级安全场景就会比较容易。许多用户企业会发现,高级SOA安全成了一项必需的要求――特别是由于数据隐私及其他法规越来越多,更是如此。因而有必要事先料到在业务要求需要、SOA安全成熟度允许的情况下,需要构建更深入的额外安全功能,并为之留出余地,哪怕你从简单的SOA安全解决方案入手也是如此。
弗雷斯特研究公司(Forrester)强烈建议,你设计的解决方案应当不需要应用程序开发人员编写与安全有关的代码。就算借助严格的指导准则和代码审查,从获得一致的安全性以及便于将来应用程序安全具有灵活性、可以不断改进来看,把安全性嵌入到应用程序代码中的做法都面临很高风险。要注意:不是说让开发人员不必为安全性编写代码,就用不着培训应用程序开发人员使用一套安全编码实践了。安全编码是应用安全实践的一个单独领域,涉及确保应用程序故障不会留下安全漏洞等问题。
为你的安全策略找到适当组合的行业标准、产品、集成和框架是一个反复迭代过程,其中需要:
1、确认安全需求
对照一系列广泛、战略性的安全功能,评估自己的需求。这成了设计SOA安全策略和解决方案的基础。应根据你基于SOA的解决方案的主要设计重点来组织管理需求。弗雷斯特研究公司采用的一个模型按服务使用者、请求-响应、服务提供者以及安全需求来组织管理。在SOA安全设计的反复迭代过程中不断前进时,随着进一步了解标准、产品以及贵企业有没有能力为需求所带来的SOA安全支付成本,可能要重新考虑所选择的需求。
2、确定所用的SOA安全规范
你的SOA安全需求为确定可能哪几项SOA安全规范符合需求做好了准备。不过在选择你所要使用的实际规范时,必须考虑到自身基础架构中的产品(现有产品以及可能需要为SOA购买的产品)支持哪些规范。几种主要的规范包括:Web服务安全(WS-Security)、Web服务互操作性基本安全概要(WS-I Basic Security Profile)、XML加密(XML Encryption)和XML签名(XML Signature)等规范。几种高级的规范包括:Web服务信任(WS-Trust)、Web服务安全策略(WS-SecurityPolicy)、Web服务联合(WS-Federation)、XML访问控制标记语言(XACML)和Web服务安全通话(WS-SecureConversation)等规范。
3、选择为你提供核心SOA安全功能的产品
SOA安全解决方案的许多功能(比如使用Web服务安全标头来执行验证)可通过不同产品类别的多类产品来提供。你的设计过程必须考虑每一种选择,评估其优缺点,然后选择一款产品(或者一套相互协调的产品)来提供核心SOA安全功能。SOA安全解决方案有可能用到的关键产品类别包括:SOA硬件设备、SOA管理解决方案、企业服务总线、SOA安全服务器、应用服务器、安全令牌服务器、授权管理服务器以及身份和访问管理解决方案。
4、配置及集成产品,以便协同工作
你可能会有多个产品来执行某项特定的SOA安全功能;这些产品必须集成起来,以便协同工作。这项集成工作可能大部分由产品配置选项(比如对SOA硬件设备进行配置,把授权工作委托给某个单次登录产品)来完成,但也可能需要使用产品编程接口来构建集成组件。
5、用框架填补漏洞
产品集成工作完毕后,可能有必要为应用程序开发人员构建一个帮助框架,以便他们没必要在基于SOA的应用程序中编写安全代码。
弗雷斯特研究公司建议使用反复迭代过程,主要有两个原因。首先,通常不是所有应用程序都需要满足你的所有安全需求;在构建SOA安全解决方案时,初期的轻型版应用程序也许基本上能够符合要求,而后期的应用程序需要为解决方案填充额外的功能。其次,每次你通过,就会加深了解如何利用现有的各部分内容来构建最有效的SOA安全解决方案。
实施SOA方面处于领导地位的企业仍在为别人铺平道路。对一些企业来说,可能存在高级安全很重要的一种业务场景。这类企业可以证明有必要投入成本,来构建高级SOA安全解决方案。这些领导企业会在一路上帮助不断强化行业规范,并帮助厂商不断完善产品。如果贵企业眼下就需要高级SOA安全,市面上有许多产品和标准可以拿来使用,但要小心行事:你应当另外抽出时间,针对建立原型、产品调试以及性能和扩展性测试等方面进行相应的项目规划。