我们正站在软件开发史的上独一无二的拐点上。
而对于诸多实践者来说,拐点更像是一个岔路口。一方面,我们希望软件项目开发的速度越来越快;另一方面,我们对软件安全性的要求越来越高。
目前,DevOps已经对开发速度的提升带来了足够的成长和想象空间。然而,安全要如何保障呢?速度和安全谁更重要?能够在安全不到位的情况下,单讲速度提升吗?
很显然,没有安全的保障,DevOps的速度提升价值也会大打折扣,甚至变得阻碍业务发展。“DevSecOps”的概念由此而生。
01 DevSecOps不是加上“安全”就好
知道DevOps含义的人就能很快get到“DevSecOps”。在开发(Developement)和运维(Operations)之间,安全(Security)的重要性被凸显出来。其中,安全不在开发之前,也不在运维之后,充分显示了安全要渗透在软件开发生命周期的每个阶段的意味。
最早是在2021年,DevSecOps由Gartner咨询公司研究员David Cearley首次提出了“DevSecOps”的概念。2016年9月,Gartner发布报告《DevSecOps: How to Seamlessly Integrate Security into DevOps》,对该模型及配套解决方案进行详细分析。其核心理念正是:安全是整个IT团队(包括开发、测试、运维及安全团队)所有成员的责任,需要贯穿整个业务生命周期的每一个环节。此后,2017年美国RSA大会还专门为这个概念和方向设置的议题和讨论会。
近年,“DevSecOps”越来越火。GitLab 2021年度全球DevSecOps年度调查显示,35.9%的组织或公司选择 DevOps 或者DevSecOps 作为开发实践方法论,超过敏捷,高居第一。
但是,安全因素并不应该“生硬地”、“直接地”介入到DevOps之中,而要“无缝”、“无感知”地融入到开发体系当中。也就是说,安全是在每一环节当中都存在的——而非依然作为孤岛存在。DevSecOps是将安全能力融入到DevOps中,而不是将安全人员融入到DevOps中。
首先,不能在DevOps架构之中,单纯地加入安全工具。如果无法在流程当中将安全融入,或者依然需要大量依赖于安全人员解决相关的安全问题(尤其是开发阶段),那么安全依然是独立于DevOps流程之外的元素,成为了DevOps+Sec,而非DevSecOps。
其次,安全应该在开发流程中自动化赋能。也就是通过提前配置的规则,将安全人力从开发流程当中解放出来。提高开发和运营人员的安全意识与安全能力后,只需要通过简单易用的工具,就能达到目的。
再次,在人员上,DevSecOps 的组织应该将网络安全架构师和工程师作为开发团队的一部分。他们可以保技术栈中的每个组件和每个配置项都已修补、安全地配置并妥善记录。
最后,DevSecOps的安全防护,不应该仅仅是在应用和数据层面。如果将安全问题留到开发流程的最后才考虑,就又走回冗长开发周期的老路,这样的DevOps是没有意义的。
其中,左移(shift left)是DevSecOps 中十分重要的一个概念。“左移” 鼓励软件工程师将安全性从DevOps(交付)流程的右侧(末尾)移至左侧(开头)。这使得DevSecOps 团队能够及早发现安全风险,并确保立即解决这些安全威胁。
02 DevSecOps 肩负着4大使命
DevSecOps从提出到如今被广泛关注,其中的原因是多重的。以下4个方面既是 DevSecOps 如此流行的原因,也标志出了 DevSecOps 肩上所扛下的几个使命,从个人到行业 DevSecOps 正在全方位改变着信息技术开发。
~DevSecOps是DevOps的内在需求,安全性是速度的基石
在过去,安全由单独的安全团队负责,在开发周期结束之后,再添加到软件中,由单独的质量保证 (QA) 团队进行测试。
这样的方式在 DevOps 时代几乎是不可取的,这种传统的、滞后的“添加式” 会拖累整个流程,从而变成 DevOps无法落地的瓶颈。
而DevSecOps 则主张将应用和基础架构安全无缝集成到敏捷及DevOps 流程和工具中。安全不再只是安全团队的事情,成为开发、安全和 IT 运营团队的共同责任,目的就是:在不减慢软件开发周期的情况下自动交付安全的软件。
~软件安全性被提到历史新高度,DevSecOps 顺应潮流
在国内,随着《中华人民共和国网络安全法》、《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》等相关法律颁布并施行,国家对企业安全能力的要求越来越高。国际上,美国等国家亦开始通过法案强调信息安全。
除了政治因素,社会因素也是“安全”被重视的一大推手。近年来,网络攻击频发,被勒索软件勒索、数据泄露、服务器被入侵等网络安全问题引起大众注意,这些事件都指向了应用安全问题。
在GitLab 2021年度全球DevSecOps年度调查中,72%的调查者认为组织在安全方面的投入达到了“良好(good)”和“非常重视(strong)”的程度。而这一数字仅在一年前,还是59%。
~开源软件的世界,DevSecOps 能降低开源风险
开源已成为软件技术和产业创新的主导模式。
根据 GitHub 2020 报告,企业开源软件占比已经超过5成,超过专有软件;开源服务市场年复合增长率达 24.2%;开源开发者的数量在 2020 年已经达到五千六百万,将在 2025 年达到一亿。
与此同时,开源带来的风险也不可小觑。国信通院一份报告表明,开源软件漏洞、知识产权及合规问题等安全性问题正在成为阻碍我国企业应用开源技术的“绊脚石”。
同样地,开源软件在帮助DevOps团队节省了大量的时间和金钱的同时,也需要得到DevSecOps 模式来减轻开源软件所带来的风险。比如说:
1.在开源软件进入工具链之前,构建一种材料软件账单(a software bill of materials ,简称SBOM),将其作为安全阀门。
2.企业提高采购开源软件的安全意识,可借鉴 DevSecOps 的生命周期来制定开源软件的采购战略。
~DevSecOps改进主动安全性,降低安全投入成本
在DevOps之前,瀑布式研发模式和敏捷研发都有相应的软件安全开发的管理理论方法,比如 BSIMM、SAMM 等。
其中,SDL(Security Development Lifecycle)最为流行。但是,SDL的投入太大了。从需求分析、设计、编码、测试、维护等每个环节都需要安全人员的参与,而且还需要企业的安全团队有一定的规模和实力。
在DevSecOps的理念中,将安全越在开发流程中“左移”,越节省成本。因为,多数潜在安全问题可以在直接在生产环境中被找到,避免了事后纠错带来的昂贵补救费用。
03 实现DevSecOps 的重点——自动化工具
从DevOps到DevSecOps 的转变,并不能独立于DevOps 进行,这个过程更多涉及的是整个开发组织的转变。以下是一个常见的 DevSecOps 实施框架:
1.分析、交流与教育:这其中包括分析自身开发流程的成熟度、定义适合自身的DevSecOps 、通过持续不断的反馈培育DevSecOps文化、自动化等等。
2.将安全融进DevOps 生态圈中:必须让DevOps 团队与安全团队一起工作。
3.引入自动化进入DevOps生态圈中:从小型的开发项目开始,渐渐地拓展至全局的自动化战略。
4.有机地添加安全因素至工具链:开发团队和安全团队共同打造DevOps工具链的安全部分。
5.DevSecOps式地执行:全部团队都必须参与DevSecOps工具链和新流程的打造。
6.鼓励保持学习和迭代:为开发者提供系统管理和反馈机制,以保持开发者的状态和工具链的健康。
可以从以上流程中看出, DevSecOps 的实践过程中安全的文化和思维问题十分重要。除了这一内层需要之外,自动化也是关键词之一。
云计算开源产业联盟认为,安全工具自动化以及平台化是DevSecOps的特点。DevSecOps的重点就是在体系中嵌入自动化的安全工具,实现DevOps的体系安全。
譬如说,飞算团队历时五年研发的飞算SoFlu全自动软件工程平台就是一个很好的自动化DevSecOps平台,它从全流程出发,将安全前置在开发环节,每个开发环节都有点测功能,每次修改都在实时项目构建运行,有问题会立刻出现并解决。
除此之外,标准化也是DevSecOps自动化平台的一大利器。飞算平台结合全球当下最先进的行业要求,制定出自己的代码规范。
如此一来,被上传的代码只有在确定没有问题后,才会被提交到代码仓库,而平台内的所有组件也需要经过代码质量管理工具扫描,确认质量后再提供给用户使用。
这就避免了因操作人员原因而带来的“人因”的安全隐患,从代码源头上保证了平台组件的质量和软件产品的品质。
飞算 SoFlu 全自动软件工程平台的组件安全性稳定性已经过金融级别、大规模的实践验证。其质量管理平台上已经有一千多条标准,而新的规则也在不断被加入其中。
据悉,于近期推出的全自动测试平台,作为飞算 Soflu 全自动软件工程平台的一个组成部分,在项目测试时,可以自动识别所有变动的接口,自动查找接口关联的所有测试用例,进行精准回归测试。
从开发、测试到运维,把所有动作规范好,统一管理,是飞算SoFlu全自动软件工程平台的核心,或将成为实现DevOps体系安全的重要抓手。
|