一、DevSecOps 建设规划概述
1.1 概述
了解完DevSecOps基本概念、参考模型、成熟度模型之后,接下来来看看DevSecOps建设规划。一份细致的、做过详实调研后制定出来的建设规划才是切实可行的、务实的。
二、制定实际可达的演化路径
在开展DevSecOps规划之前,首先需要判断当前所在的企业是否真的需要开展DevSecOps体系建设。
2.1 评判企业是否适合做DevSecOps
在前文曾提到DevSecOps是一个体系,作为体系它有它所包含的内容。所以,判断一家企业是否适合去做DevSecOps时,也可以参考DevSecOps体系所包含的内容去判断。这里,主要包含以下4个方面,如下图所示:
下面,就从上图所包含的4个方面来讨论如何评判一家企业是否适合开展DevSecOps体系建设。
2.1.1 研发管理成熟度是否适配
在DevSecOps中,强调了企业文化的重要性,即DevSecOps管理文化的重要性。大多数情况下,DevSecOps是从DevOps研发型组织转变而来的,或者说从SDL研发模型转化为DevSecOps。这些都是DevSecOps在开始之前已具备的组织运转层面的协作基础。如果一个企业的研发管理还停留在瀑布模型开发模式,这个时候强制去做DevSecOps可能不合适。所以,就研发管理成熟度而言,企业规模、管理流程、分工协作这三个方面成为我们判断是否合适开展DevSecOps的一个因素。若企业规模过小、组织协同混乱、管理无序,这将使得DevSecOps体系建设工作中途流产。比较适合的条件是,在现有的管理流程基础之上嵌入DevSecOps的关键卡点,来构建DevSecOps的落地实践。
2.1.2 IT基础实施是否可自动化
在DevSecOps理念中,黄金管道是很重要的一点,即DevSecOps流水线,其目的是通过DevSecOps的黄金管道,将软件工程或信息系统的生命周期管理变成流水线作业,通过自动化流程在保障原生安全的基础上降本增效。如果黄金管道没有构建、基础设施不能API化管理,还停留在人工安装操作系统、人工配置网络接口的层面,则强行推广DevSecOps为时尚早。理想的状态是,在IT基础实施运维自动化的基础上构建DevSecOps能力。如果没有黄金管道,难度上要增加一个数量级,规划建设者要做好从黄金管道搭建开始构建DevSecOps体系的心理准备。
2.1.3 企业技术人员能力是否匹配
在DevSecOps理念中,强调的是人人都对安全负责,研发人员具备安全编码能力,架构人员具备安全架构设计能力,运维人员具备自动化运维安全编码能力。如果企业中的人员不具备这些能力,则需要开展相应的赋能,如培训赋能、工具赋能。若人员能力相差太大,如大多数都是非IT技术人员即使通过赋能培训也达不到基本的人员素质要求,则DevSecOps将变得不可行。这里面,尤其是 具备与DevSecOps流水线技术栈管理相匹配的能力、基础设施技术栈管理相匹配的能力非常重要。
2.1.4 企业实际情况是否需要
企业是否真的需要DevSecOps依赖于企业IT信息化的现状和未来规划。例如,一家企业没有研发中心,所有的信息系统都是外部采购,平时都是厂商维护人员在维护,企业自身连基本的代码仓库、代码编译构建过程都没有,这时开始DevSecOps建设是不合适的,或者说,仅可以建设DevSecOps管道中的一段流程。比较好的情况是,企业有自己的研发中心,企业业务在快速迭代,未来会建立自己的数据中心,在这种情况下,为了提升IT效能,采用DevSecOps是合适的。
2.2 制定切实可行的规划和分步建设策略
2.2.1 DevSecOps落地实践案例来源路径
当前阶段市场上能看到的DevSecOps落地实践案例,大多数来源于以下两条途径。
- DevOps研发型组织发起安全实践,开展DevSecOps落地工作。
- 裁剪版的SDL安全实践,通过黄金管道,逐步转化为DevSecOps落地实践。
这两条成功的实践途径,可以作为企业开展DevSecOps落地实践时体系规划的参考样例。
从DevSecOps建设的进程来说,大体可以遵循如下几个关键策略。
2.2.2 分步建设策略
2.2.2.1 同步规划,分步建设
“同步规划,分步建设”策略是DevSecOps建设的总体策略。所谓“同步规划”是指站在企业全貌的角度,系统性地规划DevSecOps体系建设未来的可达成路径;而“分步建设”是指对于规划出来的工作事项,不是立即投入,而是分步骤、分批次投入资源去建设,逐步达到DevSecOps体系建设的最终目标。
从企业IT信息建设的角度去看,这条策略是务实且实际的。“同步规划”保障了未来一段时间内,所奔赴的方向是正确的;企业在安全方面的投入都是逐年、逐步的,在看不清可达成路径或成效的前提下,很少有企业一股脑地投入大笔资金建设DevSecOps,“分步建设”有利于看到阶段性成果,也有利于及时修正当前规划中存在的问题,便于更快地达成目标。
典型的“同步规划,分步建设”方案如下图所示:
如上图所示为DevSecOps总体规划的概览图,在图中需要建设的各个块用不同的颜色来区分,表示哪些是当前规划需要做的事项,哪些是下一个年度规划需要做的事项,哪些是未来规划需要做的事项。
2.2.2.2 先分段建设,再全线贯穿
对于DevSecOps黄金管道建设和安全左移,要遵循“先分段建设,再全线贯穿”的基本策略。其原理与建设公路的道理是一样的,当资源投入不足以全线开工时,可以划分多个标段,分段建设,最后全线通车。DevSecOps建设的这个策略也是如此。
熟悉研发过程的读者想必都知道,对安全诉求最强烈、与安全组织协同最好的是运维部门。所以,基础性的安全工作在运维侧要先做起来。而研发侧的安全工作又是DevSecOps的基础,所以,开始建设时,可以 先从研发段和运维段分别建设,然后逐步连接,最后安全左移到项目规划与需求分析段,如下图所示:
第一阶段首先开展持续集成与运维自动化建设,以持续集成段的自动化为目标,理清管理协作流程和边界,确定安全卡点和质量目标,解决可交付制品的安全性问题,以运维自动化为切入点,理清基础设施架构和资产,统一技术路线选型,完成代码或脚本化适配,重点解决运维侧安全压力;第二阶段开展持续交付与持续部署的流程打通,完善基础设施基线和管道流程的自动化能力,缩短编码开发到上线交付的周期,提升应急响应速度,深入安全运营与DevSecOps管理的集成,逐步达到安全编排,安全自动化;第三阶段重点解决安全需求、安全设计层面的自动化,在第一阶段管理手段的基础上,完善线上流程和数据归集,通过全流程数据分析,持续优化DevSecOps自动化能力。
2.2.2.3 先固化,再工具化,最后自动化、数据化、智能化
这个策略是针对DevSecOps体系水平的动态演进而言的,如果说上一个策略是将DevSecOps黄金管道纵向截取后分段建设,则此策略是从横切面去看总体能力的逐步演进。
2.2.2.3.1 固化阶段
固化阶段类似于安全实践的初级阶段,这个阶段 重点关注的是流程和文化。 在当前的流程之设置安全卡点。例如,安全从业人员提及最多的安全评审、上线前渗透测试、线上周期性安全巡上检。通过关键流程和卡点,粗线条地把整体安全风险控制在可控范围之内。这个阶段,通过流程规范的发布、宣传、领导站台、培训、趣味活动等,打造DevSecOps文化氛围。 与各个部门、各个角色之间横向拉通信息和目标对齐,保障安全卡点的执行,而具体的动作(如渗透测试、安全巡检工作),可以先人工操作工具,把流程运转起来,要在整个组织内,搭建这种氛围,推行这样的安全意识规范和执行流程。这个阶段,若有领导站台,有横向拉通部门,一般操作起来不难。难度在于要考虑流程设计的合理性和可执行性,通过流程规范和文化氛围,真的能将组织、技术、人员合在一起,做成DevSecOps这件事情。
2.2.2.3.2 工具化阶段
工具化阶段是整个DevSecOps体系建设过程中最难的一段。在固化阶段很多事情是人工做的,为了工作更好地开展,使用工具替代人工是必需的选择。工具化阶段最重要的 DevSecOps黄金管道和安全工具链建设 ,黄金管道是帮助研发人员、测试人员、运维人员通过平台去管理软件研发过程的。例如,在编码开发到持续构建、持续发布、持续部署、持续监控、持续运维这个管道里,当开发人员编码完之后,只需要在DevSecOps平台上手动单击按钮,提交的代码则通过流水线自动部署到业务的生产环境,操作简单、便捷。但背后涉及的各种编程语言、测试工具、安全工具、部署工具等的支持,都需要DevSecOps建设者去构建。特别是安全工具链中的各种安全检测工具,如SAST、DAST、IAST等。 这些工具需要由DevSecOps平台开发人员利用API接口、脚本、页面集成等方式把这些安全能力原子化,放到DevSecOps黄金管道的作业编排模板中,供开发人员选用。这些编排模板通常是根据企业自身的业务形态去适配、构建通过多种不同的作业模板满足研发侧的需要。基于这些模板,当研发人员开发一个Java应用程序时,直接选择Java流水线作业模板即可;开发一个Node.js应用程序时,直接选择Node.is流水线作业模板即可。这些模板和原子化安全能力的构建是需要安全人员对DevSecOps和编码开发都具有深入理解的基础上才能完成的。以安全加固基线为例,在很多企业安全加固基线仅是一个文档,文档本身难以落地;有些企业会针对加固文档编写交互性的脚本,通过交互性脚本的执行来完成加固操作;还有一些企业,将需要安全加固的软件做成加固后的镜像,镜像通过自动化部署实例化后,自动具备了安全加固的属性。这三种方式都是安全加固,但落地的成效是不一样的,执行效率也是不一样的。在实际应用中具体选择哪一种方式是工具化阶段建设时所考虑的重点,这些也是工具化阶段建设的难点。
2.2.2.3.3 自动化、数据化、智能化
最后,来说说自动化、数据化、智能化。
当工具逐级丰富, 不断增加的原子化能力补齐了安全能力的短板,安全能力已经全线贯穿黄金管道,则进入了自动化阶段。在自动化阶段,很多工作是 通过黄金管道里的流水作业模板或任务编排去做的。 例如,最简单的编排任务,代码提交完之后自动去后台触发代码安全检测;自动化打包完之后进行自动化部署,部署完成之后,自动把这个服务启动起来,然后自动去做安全扫描,扫描通过后,还可以自动化部署,部署的过程中可以修改防火墙规则,开放防火墙端口。这些功能的完善需要逐步迭代才能实现,一般来说是从研发侧向运维侧推进的,或者研发测和运维同时实施,最后向中间合拢,达成一体化的安全自动化。自动化之后,在系统中会看到各种各样的过程数据,如项目管理的数据、需求任务的数据、版本关联代码的数据、发现漏洞的数据等,把这些数据汇总之后,基于这些数据做数据分析, 在数据分析的基础上引入AI能力,以数据运营和人工智能推动流程优化和改进,促进DevSecOps水平不断地提升。
以上内容就是DevSecOps建设规划在实际落地中可实现的演化路径。