1.1.2 DevSecOps的核心理念
了解DevSecOps的基本概念之后,接下来看看DevSecOps的核心理念。
DevSecOps是在DevOps基础上发展起来的。在DevSecOps发展的不同阶段,在不同的资料中,先后曾出现过SecDevOps、DevSecOps、DevOpsSec、Secure DevOps、DevOps Security等名词,直至近来业界逐渐统一使用DevSecOps。无论是使用哪种称谓,它们的内容均指以下4个方面。
•把与安全相关的人员、组织或安全事项作为一个整体融入DevOps中去。
•强调安全融入DevOps文化或者在DevOps中增加安全文化。
•加强Dev、Ops、Sec三类岗位人员之间的相互融合、互动及信任。
•突显安全工具在DevOps流程中的作用,强调工具在流程中的融合。
这4个方面的内容,也是DevSecOps的核心理念。在业界,公认的DevSecOps的核心理念主要有如下几个方面。
1. 安全左移
与传统的安全工程实践相比,DevSecOps更注重于安全能力的左移。在传统的软件开发中,安全常常作为测试验证的一部分,在软件交付前,通过安全检测来保障软件开发的质量。安全在整个软件开发生命周期中的位置如图1-2所示。
图1-2 传统软件开发中的安全实践
在DevSecOps理念中,继续秉承了SDL模型中安全左移的理念,且对安全左移落地实施的贯彻更为彻底。SDL自微软提出之后,在国内鲜有成功实践的企业。企业安全管理的CSO们虽然知道SDL中安全左移的含义,却难以在企业安全实践中落地,其根本原因是在开展安全左移的过程中,缺少贯穿左移流程的安全工具的支撑。
所以在DevSecOps中,安全左移的表现形式与传统的安全工程实践相比,既有大量安全工作的前置,也有安全工具的支撑。如果继续用图1-2来对照,其示意图如图1-3所示。
图1-3 DevSecOps实践中安全左移理念的变化
在图1-3中,安全工作前置到目标规划、需求分析、软件设计、编码开发等阶段,通过安全左移的介入,尽可能在项目早期发现安全风险,制定改进策略,减少安全修复带来的成本投入。同时,底层的DevSecOps平台为各阶段安全工作的开展提供能力支撑,降低安全左移工作的落地难度。
2. 安全文化
安全文化作为DevSecOps理念中的重要组成部分,一直贯穿DevSecOps的始终。在介绍DevSecOps的基本概念时,我们提及DevSecOps旨在将安全融入软件开发和IT运维中,在不同的角色之间共担安全责任,让安全实践贯穿业务信息系统的全生命周期,这一点与传统的安全实践中组织、岗位、人力模型等设计是相悖的。在没有全员对DevSecOps安全文化理念认同的情况下,DevSecOps工作难以开展。
在传统的安全实践中,企业通常设置专门的安全岗位,招聘安全人员承担相应的安全工作。在管理期望上,企业希望安全人员能承担所有的安全工作,对安全结果负责。而实际情况是,在安全工作落地时,往往达不到预期的效果。读者不妨设想一下,如果一名安全人员负责某个软件的全生命周期安全,则需要这名安全人员在需求分析阶段了解产品需求,熟悉业务流程,参与产品的安全需求分析与需求设计;在设计阶段,将安全需求转化为安全功能、系统流程设计及部署架构;在编码阶段,要跟编码开发人员一起,写出安全的代码或做安全代码review等。这种岗位和职责现状就会导致对这名安全人员的职业能力要求非常之高,既要懂需求分析,又要懂系统设计,还要懂安全。光有这些能力还不够,还需要有很好的身体素质,需要不停地跟着需求分析人员、系统设计人员、编码开发人员一起做各项安全工作。看到这里,想必读者也明白这样的岗位设置是不合理的,也是不现实的。
比较好的设置是需求分析人员把安全需求一并做了,系统设计人员把安全设计一并做了,编码开发人员保证代码编写的安全。这种不同角色负责各自的安全模块,共同为整体的安全承担职责,即是DevSecOps的安全理念。为了保障上述安全理念的落地,DevSecOps尤其强调安全文化的重要性,意在通过组织和文化建设,统一安全观念,建立激励和考核机制,对齐安全目标,加强组织协同,以达到不同角色共担安全责任的目的。
3. 安全管道
为了DevSecOps安全文化的贯彻和落地,DevSecOps的核心理念吸取了其他安全模型落地困难的教训,尤其强调安全工作的管道化,即安全平台在DevSecOps落地中的作用。这部分技术内容也将是本书的重点内容。
在企业内部,信息安全工作涉及企业生产活动的方方面面,这些工作具体落到DevSecOps中也是涉及多个方面。如何将这些多个方面的、无序的安全工作有机地组合在一起,按照一定的流程规范去执行跟踪,这是在DevSecOps中强调构建安全管道的根本原因。
DevSecOps安全管道一般依附于DevOps管道去构建,又被称为黄金管道。DevOps管道包含如下不同的阶段:计划、代码、构建、测试、发布、部署、操作和监控。DevSecOps安全管道嵌入这些阶段中,DevOps保持不变,在此基础之上构建管道化的DevSecOps平台能力。
与传统的安全实践或者SDL相比,DevSecOps安全管道更强调的是安全工作的自动化,通过安全管道的流程化控制,达到安全工作持续、稳定、高效地运行。例如,依托CI/CD平台,采用Jenkins完成代码编译、构建、测试的自动化编排,在编译时,自动检查安全编译参数的设置是否正确;在构建时,自动化对需要发布的制品进行数字签名;在测试过程中,自动调用安全测试工具对制品进行安全检测。在传统安全实践中,这些工作通常是在开发人员的本地计算机上完成的,或者说需要不同的角色在本地计算机上共同合作完成的。在DevSecOps安全管道中,这些操作均在平台上完成,按照既定的模板或剧本进行自动化调度,以完成这些安全工作。如图1-4所示。
在图1-4所示的工作方式下,各个不同的角色均使用黄金管道,这样的好处是:一方面降低了开发人员、测试人员使用的技术门槛,释放了开发人员、测试人员的精力,使其将更多的精力投入到业务中去;另一方面,通过标准化、自动化的流程,将安全工作管控起来,从而解决因个人技术能力差异带来的质量水平参差不齐的问题,保证了研发过程整体输出产物的质量。
图1-4 DevSecOps黄金管道使用示意图
除了上述三个DevSecOps核心理念外,还有默认安全、基础设施即代码、持续集成与交付等,在后续章节中,我们将在对应的内容中展开叙述。