本系列讨论面向服务的体系结构(Service-Oriented Architecture,SOA)安全性实现路线图。本系列共包括三个部分,本文是其中的第二部分,将讨论可帮助SOA安全团队开发成功的高层次设计的规则。
SOA安全实现和整个SOA一样,应该视为一个长期的过程。就像任何过程一样,如果要成功,您将需要某些特定的东西。
本系列的第1部分重点讨论路线图,此路线图提供了简单的10步骤流程,可作为SOA安全团队的总体指南。在该流程的第7步“遵循SOA安全实现的SDLC流程”中,SOA安全团队将进行任何SOA安全实现的高层次设计(High-Level Design,HLD)。在此步骤,将期望SOA安全团队遵循软件开发生命周期 (Software Development Life Cycle)。
软件开发生命周期
软件开发生命周期 (SDLC) 通常包括四个阶段:
·需求
·设计
·编码
·测试
SDLC的第二阶段(设计阶段)的目标是得到系统的总体设计。设计阶段包括两个子阶段:HLD和详细设计(Detailed-Level Design,DLD)。对于 HLD,您作为安全企业架构师(Security Enterprise Architect,SEA)将对SOA安全实现的功能需求和非功能需求进行检查,并设计总体解决方案体系结构。与企业架构师(Enterprise Architect,EA)类似,SEA负责以下事项:
·确定公共模式,以便了解系统之间的高级关系,从而能够对旧系统进行变更来创建新系统。
·获得正确的体系结构,这对于软件系统的设计至关重要。错误的体系结构会带来灾难性的后果。
·对软件体系结构有详细的了解,将允许团队在设计备选项之间作出明智的决策。
·提供体系结构表示形式,这对复杂系统的高级属性的分析和描述非常重要。
最基本的观念是,对于任意成功的SOA安全实现而言,构造良好的HLD非常关键,SEA对带领SOA安全团队进行其创建工作负有最终的责任。
创建HLD的简单规则
尽管SOA安全实现HLD非常重要,但SOA安全团队并不是总能清楚地确定HLD的目标应为什么。在没有专用体系结构资源的情况下,团队成员经常被体系结构概念所淹没,而且不熟悉可帮助其管理整个流程的建模工具。
这里,除了建议的工具外,还提供有用的提示和规则,供SOA安全团队成员采用和包含到流程中,以创建成功的SOA安全实现HLD。
在开始编写HLD文档之前,SOA安全团队成员应该记住一些基本的首要规则。实际上HLD应该:
·为关系图或关系图组,注释尽可能少。
·开始时尽可能简单尽可能抽象。
·能够被所有涉众理解。
·满足需求文档中列出的整个安全需求集。
·使用的关系图数量尽可能少:只有一个关系图最好了,但并非总是可行。
·包含所有主要对象,但必须对其进行保护,并以通用的方式对其进行表示。
·包含对象间所有的关键安全关系。
·用于生成所有安全测试用例。
·利用面向对象的概念,如封装、继承和多态性。
·作为生成DLD的起点。
您的重点应该放在提供关键问题的答案,如“我们何时开始?”“我们如何继续?”“我们如何知道何时已经完成了?”
创建HLD
SOA安全团队的HLD工作的主要目标是创建可作为沟通工具的文档:文档必须针对整个团队并代表整个团队的立场。在SOA团队成员陷入体系结构文档的细节之前,应该将重点放在对其需求进行全面检查上,了解其总体安全目标是什么。HLD必须清楚地从SOA实现的总体安全性的角度说明其设想。
将团队就主要涉众SOA安全实现问题达成的协议正式化就是下一步要进行的工作。例如,文档应该包括以下问题:
·我们需要什么?(安全人员和需求文档)
·我们要构建什么?(开发人员)
·我们所投资的是什么?(高层管理)
HLD还必须提供更为复杂问题的答案,如非功能需求等。这些需求包括系统审核与控制、可扩展性、弹性、垂直伸缩性和水平伸缩性、多站点问题以及第三方工具的集成。
决定何时开始HLD工作并不容易。受到广泛认可的行业指导原则是,将能力成熟度模型集成(Capability Maturity Model Integration,CMMI)3-4 级别(请参见参考资料)作为实现企业SOA安全战略的基础。在开始进行相应的工作前,应该完成很多详细的需求文档。而且,必须同时了解SOA安全服务实现的大部分内容。在开始HLD前,团队应该已经列出了其需求,了解用于满足这些需求的服务,并将这些服务与相应的需求建立了联系。
标识主体
在深入开展HLD的工作前,团队应该创建其必须加以保护的所有实体的列表。在安全领域中,必须保护的项目称为主体。以下是典型SOA系统的高级主体:
·应用程序或服务
·硬件
·消息
·编排
·服务组件
·SOA组件(例如,企业服务总线(Enterprise Service Bus,ESB))
·用户
·实用工具
此外,SOA安全团队应该生成高级图形表示形式,以说明团队成员将如何保护主体之间的交互。图1显示主体如何进一步划分为参与者 和资源,其中每个参与者可以为调用资源的功能的人员或计算应用程序,而每个资源则是服务功能、数据、组件或实际效果。主体之间的安全中间层可以进一步分解为执行点、决策点、契约和属性。

图1. 受保护的主体交互
主体交互
由于上面列出的每个主体可能与其他主体交互,因此图1中所示的中间层要求为每个交互提供一个这样的关系图。对于具有表1中所示的聚合的SOA实现,大约可能会有1000 x 1000个交互。即需要考虑的(至少在HLD中如此)主体间的潜在交互数量为1,000,000。
表1. SOA主体计数
SOA主体 计数
应用程序或服务50
硬件50
消息700
编排50
服务组件50
SOA组件(ESB) 1
用户50
实用工具49
共计 1000
保护主体交互
随着对主体间的交互的进一步细分,将出现特定的SOA安全服务来专门负责保护这些交互。在开始SOA HLD前,团队应该创建将服务与主体关联的表格。表2显示了一段需求文本摘录,其中的identification服务与所有主体关联。