目录
一、DevSecOps概述
1.1 概述内容
1.2 DevSecOps定义
1.3 DevSecOps的基本概念
二、DevSecOps的核心理念
2.1 安全左移
2.1.1 传统软件开发中安全的位置
2.1.2 DevSecOps理念下安全的位置
2.2 安全文化
2.2.1 传统安全文化
2.2.2 DevSecOps理念的安全文化
2.3 安全管道
三、DevSecOps 的重要组成
3.1 组成总览
3.2 组成内容划分
3.2.1 管理方针/政策
3.2.2 过程参考/模型
3.2.3 操作指南
3.2.4 模板/工具
3.2.5 总结
3.3 实际落地组成参考
随着互联网行业的高速发展,尤其是近十年,行业格局的快速变革和软件技术的不断升级、整体的企业形态已经发生了翻天覆地的变化,尤其是在“互联网+”、“产业互联网”、“车联网”等概念的影响下,很多的传统企业正在逐步互联网化,成为新形势下的互联网企业。
互联网企业与传统企业根本性的区别在于企业的业务是否互联网化,是否在线。而在线后的业务模式将对企业内部原有的生产模式产生巨大的影响,如生产流水线上各个环节的调整或改为在线销售。这种影响在过去的20年里推动了互联网企业生产模式的选代更新,生了瀑布开发、敏捷开发、迭代开发等模式。到今天,众多的互联网企业正在采用更为先进的DevOps模式来开发和维护业务系统。
网络空间安全是近几十年才逐渐兴起的行业,在行业发展的过程中,随着内外部安全环境的变化和从业人员对网络空间安全理解的加深,先后出现了不同类型的安全治理框架,它们在不同的安全领域发挥着独特的作用,例如,大多数企业在信息安全管理中所选择的 ISO27001 信息安全管理体系,被广泛应用于软件开发领域的微软SDL模型,关注安全管理和安全技术实践应用的《美国国家安全体系黄金标准》CGS2.0标准框架等。
这些框架或标准模型在指导安全从业人员开展安全改进工作中起到了关键的作用。DevSecOps也是这样一个模型或框架,它是过去十几年,各大互联网企业在不断的安全实践中,总结失败经验,寻找成功路径,逐步形成的一套被业界所认可的契合互联网企业业务模式的安全工程实践。
DevSecOps 是在 DevOps的基础上逐渐发展起来的,在业界,虽然不同国家的媒体、世界知名互联网企业、全球公益性组织都在讨论DevSec0ps,但关于DevSeeOps的定义至今仍没有统一的说法。这里,我们不妨在美国国家标准与技术研究院(NIST)对DevOps定义的基础上,综合信息安全管理体系的定义格式,对DevSecOps做一个概念性描述:
DevSecOps是企业在软件工程领域开展的一项安全工程实践,它的核心在于依托平台和工具构建安全自动化能力,打破软件开发到发布过程中涉及的开发、安全和运维等不同角色或组织之间的协作壁垒,使安全自动化贯穿软件的开发、软件交付、基础设施和线上运维等环节,提升软件开发过程中的整体安全效能。
用一张图来表示DevSecOps给安全工程实践带来的变化,如下图所示:
我们可以看到,在 DevSecOps 环境下,安全的职责由各个不同的角色来共同承担,参与软件工程中的开发、测试、部署运维、质量等角色,依托DevSecOps平台开展安全工作,并对安全结果负责。
DevSecOps是在 DevOps 基础上发展起来的。在 DevSecOps 发展的不同阶段,在不同的资料中,先后曾出现过SecDevOps、DevSecOps、DevOpsSec、Secure DevOps、DevOps Security等名词,直至近来业界逐渐统一使用DevSecOps。无论是使用哪种称谓,它们的内容均指以下4个方面:
这4个方面的内容,也是 DevSecOps的核心理念。在业界,公认的 DevSecOps 的核心理念主要有如下几个方面。
在传统的软件开为安全常常作为测试验证的一部分,在软件交付前,通过安全检测来保障软件开发的质量。安全在整个软件开发生命周期中的位置如图:
与传统的安全工程实践相比,DevSecOps更注重于安全能力的左移。在 DevSecOps理念中,继续秉承了SDL模型中安全左移的理念,且对安全左移落地实施的贯彻更为彻底。SDL自微软提出之后,在国内鲜有成功实践的企业。企业安全管理的CSO们虽然知道SDL中安全左移的含义,却难以在企业安全实践中落地,其根本原因是在开展安全左移的过程中,缺少贯穿左移流程的安全工具的支撑。
所以在DevSecOps中,安全左移的表现形式与传统的安全工程实践相比,既有大量安全工作的前置,也有安全工具的支撑。如下图所示:
安全工作前置到目标规划、需求分析、软件设计、编码开发等阶安全左移的介入,尽可能在项目早期发现安全风险,制定改进策略,减少安全修复本投人。同时,底层的 DevSecOps平台为各阶段安全工作的开展提供能力支撑,降低安全左移工作的落地难度。
在传统的安全实践中,企业通常设置专门的安全岗位,招聘安全人员承担相应的安全工作。在管理期望上,企业希望安全人员能承担所有的安全工作,对安全结果负责。而实际情况是,在安全工作落地时,往往达不到预期的效果。不妨这样设想一下,如果一名安全人员负责某个软件的全生命周期安全,则需要这名安全人员在需求分析阶段了解产品需求,熟悉业务流程,参与产品的安全需求分析与需求设计;在设计阶段,将安全需求转化为安全功能、系统流程设计及部署架构;在编码阶段,要跟编码开发人员一起,写出安全的代码或做安全代码review等。这种岗位和职责现状就会导致对这名安全人员的职业能力要求非常之高,既要懂需求分析,又要懂系统设计,还要懂安全。光有这些能力还不够,还需要有很好的身体素质,需要不停地跟着需求分析人员、系统设计人员、编码开发人员一起做各项安全工作。看到这里,想必大家也明白这样的岗位设置是不合理的,也是不现实的。
安全文化作为 DevSecOps理念中的重要组成部分,一直贯穿DevSecOps的始终。在介绍DevSecOps的基本概念时,我们提及DevSecOps旨在将安全融入软件开发和IT运维中,在不同的角色之间共担安全责任,让安全实践贯穿业务信息系统的全生命周期,这一点与传统的安全实践中组织、岗位、人力模型等设计是相悖的。在没有全员对DevSecOps安全文化理念认同的情况下,DevSecOps工作将难以开展。
与传统安全文化相比,比较好的设置是需求分析人员把安全需求一并做了,系统设计人员把安全设计一并做了,编码开发人员保证代码编写的安全。这种不同角色负责各自的安全模块,共同为整体的安全承担职责,即是DevSecOps的安全理念。为了保障上述安全理念的落地,DevSecOps尤其强调安全文化的重要性,意在通过组织和文化建设,统一安全观念,建立激励和考核机制,对齐安全目标,加强组织协同,以达到不同角色共担安全责任的目的。
为了DevSecOps安全文化的贯彻和落地,DevSecOps的核心理念吸取了其他安全模型落地困难的教训,尤其强调安全工作的管道化,即安全平台在DevSecOps落地中的作用。
在企业内部,信息安全工作涉及企业生产活动的方方面面,这些工作具体落到DevSecOps中也是涉及多个方面。如何将这些多个方面的、无序的安全工作有机地组合在一起,按照一定的流程规范去执行跟踪,这是在DevSecOps中强调构建安全管道的根本原因。
DevSecOps 安全管道一般依附于 DevOps 管道去构建,又被称为黄金管道。DevOps 管道包含如下不同的阶段:计划、代码、构建、测试、发布、部署、操作和监控。DevSecOps安全管道嵌入这些阶段中,DevOps保持不变,在此基础之上构建管道化的DevSecOps平台能力。
与传统的安全实践或者SDL相比,DevSecOps安全管道更强调的是安全工作的自动化,通过安全管道的流程化控制,达到安全工作持续、稳定、高效地运行。例如,依托CI/CD平台,采用Jenkins 完成代码编译、构建、测试的自动化编排,在编译时,自动检查安全编译参数的设置是否正确;在构建时,自动化对需要发布的制品进行数字签名;在测试过程中,自动调用安全测试工具对制品进行安全检测。在传统安全实践中,这些工作通常是在开发人员的本地计算机上完成的,或者说需要不同的角色在本地计算机上共同合作完成的。在DevSecOps安全管道中,这些操作均在平台上完成,按照既定的模板或剧本进行自动化调度,以完成这些安全工作。
如图所示:
各个不同的角色均使用黄金管道,这样的好处是:
除了上述三个DevSecOps核心理念外,还有默认安全、基础设施即代码、持续集成与交付等,在后续文章中,我们将在对应的内容中展开叙述。
通过对 DevSecOps核心理念的了解,我们对 DevSecOps所包含的内容有了初步的印象。那么,当我们谈论DevSecOps时,它具体包含哪些内容或组成部分呢?这将是本节讨论的内容。
从前文中我们已经了解到,DevSecOps 和其他安全模型一样是一个安全工程实践框架。作为一个框架或体系,在其落地过程中,通常由如下内容构成,如图下所示。
一个框架或体系的落地,其基本构成一般包含管理方针/政策、过程参考/模型、操作指南、模板/工具4个部分,DevSecOps的体系落地自然也不例外。不同的是,在构建这些体系能力时,DevSecOps依托已有的DevOps体系来构建,将安全融入其中。下面,我们为DevSecOps 在这4个部分中所承载的内容,做简单的说明。
管理方针是 DevSecOps工作开展的实施总纲,需要明确 DevSecOps的适用范围、总体目标、运转模型、关键岗位与职责、风险准则、组织保障等,为整个 DevSee0ps工作的开展提供原则性指导纲领,一般由《DevSecOps 管理办法》和(DevSecOps 管理手册》组成。
过程参考是DevSecOps顶级程序文件,用于定义DevSecOps 的生命周期模型、模型中各个流程的输入输出、关键活动、度量指标,以及保障其落地相匹配的组织运转模式、人力模型等。一般由《DevSecOps规范》《DevSecOps基本要求》《DevSecOps实施指南》等文件构成,在部分大型集团企业中,对于过程参考也会划分成两级文件,即顶级过程参考文件、专项过程参考文件。
操作指南是DevSecOps体系落地过程中,被各参与方使用最多的文件类型,主要由DevSecOps总体参考设计和专项参考设计指南构成,如《DevSecOps总体参考设计指南》《安全架构设计指引》《云原生安全操作手册》等,是指导DevSecOps工作的各个参与方开展规范操作的作业指导手册。
模板/工具在DevSecOps中主要起到两方面作用:
从以上4个部分的构成我们可以看出,DevSecOps是一项体系性的工作,其组成部分包含管理制度、操作流程、组织保障等,涵盖了管理、技术、人员三方面的关键要素,这与其它管理体系是一致的。
在实际落地中,很多企业会根据自身的实际情况,对上述4个构成部分进行裁剪。或者说对上述4个构成部分之间的关系不做严格的拆分,而是从落地保障层面构建DevSecOps体系的组成。如下图所示:
图中把DevSecOps体系文件和管理要求相关的内容放在第一层,把DevSecOps过程执行和落地运营放在第二层,把平台工具的支撑放在第三层。突显执行过程和平台支撑的重要性,并把流程管理、技术规范、组织运转等融入平台中去,通过平台之上的DevSecOps运营,推动整个 DevSecOps体系的落地。
好了,本次内容就分享到这,欢迎大家关注《DevSecOps》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!