智汇 IT
城启新篇

CI/CD流水线安全左移从来不是安全部门的独角戏

上周在南京的开发者沙龙散场,三个后端开发围着我吐槽,说最近被安全团队追着给CI/CD加扫描环节,每次提交代码就卡十分钟,扫出来的全是无关告警,最后大家干脆写了个跳过扫描的命令,直接在生产服务器上手动拉代码部署。

CI/CD流水线安全左移的概念,就是在这样的吐槽声里被反复提起。很多人提这个词的时候,总觉得是飘在天上的方法论,是厂商卖工具的时候吹的噱头。说白了,这事没那么复杂——别等代码跑到生产环境才找漏洞,把安全检查的动作往开发流程的前端挪,就这么点事。

别把安全左移做成拖慢开发效率的绊脚石

不少团队对左移的理解,还停留在“把所有安全工具一股脑塞进流水线”的阶段。静态代码扫描、第三方依赖扫描、硬编码密钥扫描、容器镜像扫描,全堆在代码提交触发的第一环节,美其名曰“全链路覆盖”。

我见过最极端的例子,某个团队给流水线配了全量的静态代码扫描规则,每次提交代码要等8分钟才能出结果。开发本来写代码的节奏就碎,等扫描的空当要么刷半小时短视频,要么干脆切到本地跳过扫描的分支直接合并。最后花大价钱买的商业扫描工具,成了流水线里的摆设。

CI/CD流水线安全扫描环节卡点示意图
CI/CD流水线安全扫描环节卡点示意图

这里的账很多人算不明白。一个20人的研发团队,每个开发每天因为等待扫描多花20分钟,一年下来耗在无效等待上的人力成本,比漏了三个低危漏洞去应急修复的成本高10倍都不止。

真正的取舍从来不是“要不要做左移”,而是“哪些检查该放在哪个环节”。高危的依赖漏洞扫描、硬编码密钥扫描,必须放在提交的第一分钟触发,这是真金白银的硬风险,漏了就要出大事;但那些代码风格类的、可优化写法类的低优先级检查,完全可以放到夜间的定时构建环节跑,根本没必要卡着开发的提交节奏。

说实话,很多安全团队根本没蹲在开发工位旁边看十分钟写代码的过程,就拍脑袋定规则,最后把流水线搞成了大家都想绕开的路障。

真正的左移,是把检查动作嵌到开发的写代码习惯里

很多人对左移的认知还停留在流水线层面的强制拦截,但实际上最有效的左移,位置比流水线的起点还要靠前。

之前接触过一个做垂直零售的技术团队,没有上来就给流水线堆扫描工具。他们先把过去三年所有出过安全问题的风险点——比如硬编码数据库密码、引入有已知漏洞的旧版依赖、文件上传不做类型校验——整理成了本地IDE的插件规则。开发在本地敲代码的时候,只要写了硬编码的密码,IDE马上就飘个红框提示,根本等不到代码提交到流水线环节,问题就已经改完了。

IDE本地集成安全规则提示界面
IDE本地集成安全规则提示界面

我第一次看他们跑流水线的时候真的挺惊喜。从代码提交到部署到测试环境,全程只需要1分20秒,比很多团队只跑个编译环节的速度都快。

这种做法的代价是什么?没有捷径。要花时间把所有的安全规则翻译成IDE能识别的本地提示,而不是直接买个商业扫描工具往流水线里一塞就完事。很多团队嫌这个麻烦,觉得买工具快,但是最后工具跑出来的结果全是告警噪音,开发根本不看,等于白花钱。

把检查动作嵌到开发的日常写代码习惯里,才是最低成本的安全落地方式。不需要强制,不需要考核,只要提示够及时,规则够准确,开发自然会在写代码的时候规避风险,根本不会等问题流到后面的环节。

别把左移的责任全压给开发团队

很多团队做CI/CD流水线安全左移,最后走成了安全部门给开发派KPI的路子。比如要求开发提交的代码扫描通过率必须到95%,达不到就扣绩效。这就完全走偏了。

之前碰到过一个团队,一开始的密钥扫描环节,每次都能扫出来开发把测试环境的API密钥硬编码在代码里。团队一开始的处理方式是罚绩效,结果开发干脆把所有硬编码的密钥都换成了base64编码的字符串,原来的扫描工具识别不出来,表面上告警是少了,实际上问题根本没解决。

后来安全团队换了个思路,专门在流水线里加了个自动的密钥替换环节。只要扫到代码里有疑似密钥的字符串,自动从配置中心拉取对应的密钥值替换,根本不需要开发手动去改配置。没俩月,硬编码密钥的告警直接降到了零。

麻烦在于,很多安全团队觉得自己的职责就是找问题、开罚单,根本没想着怎么把解决问题的成本降下来。比如依赖扫描环节,如果扫出来某个依赖有高危漏洞,流水线直接自动把依赖升级到修复版本,跑一遍单元测试,没问题就自动合并,根本不需要开发手动去查漏洞、手动升级、手动提交PR。整个流程顺了,谁会去绕开安全检查呢?

上周又碰到之前沙龙上吐槽的那个后端开发。他说他们团队最近调整了流水线的扫描逻辑,把之前卡8分钟的全量静态扫描挪到了夜间构建环节,提交环节只留了高危依赖和硬编码密钥的扫描,现在提交到测试环境只要40秒,扫出来的告警一周也就三四个,根本不需要专门抽时间处理。

他说之前总觉得CI/CD流水线安全左移是安全部门想折腾开发,现在才发现,只要把工具的位置摆对,根本不会有什么矛盾。

这事没那么玄。既不是要把所有安全检查都堆到流水线的最前端,也不是要给开发加多少额外的工作,本质上就是把安全检查的成本,从生产环境出了故障之后的应急救火,往前挪到整个开发流程里——哪个环节的检查成本最低,就把哪个环节的检查放在哪里。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:CI/CD流水线安全左移从来不是安全部门的独角戏
文章链接:https://www.itcdj.com/it/306.html