上周跟一个做运维的老同事在新街口喝冰美式,他吐槽说刚被公司逼着上了整套安全左移流程,跑一次流水线要等40分钟,开发已经把CI/CD的入口页给浏览器屏蔽了,宁愿手动打包上线。
不是把安全工具塞进流水线就叫左移
很多团队对CI/CD流水线安全左移的理解,还停留在“之前安全扫描是上线前运维做,现在把SCA、SAST插件往GitLab CI或者Jenkins的阶段里一插,就算完成转型”的层面。
麻烦在于,没人跟开发对齐扫描规则。
之前给安全团队合规检查用的规则集,是按等保最高要求配的。一个普通的内部OA系统,跑一次全量扫描能出来几千个依赖漏洞,其中90%都是低危甚至在当前运行环境下根本不会触发的。开发点开报告扫一眼,直接就麻了。
我见过最离谱的配置,是把全量依赖扫描放在代码提交后的第一个检查点,只要扫出漏洞,直接卡住整个流水线,连单元测试都跑不了。开发只是改个按钮的边距,都要等十几分钟扫描跑完,碰到高危漏洞还要填豁免申请找安全团队审批,快则半天慢则三天。
换你你不绕开?

左移的核心是把安全成本摊到开发能接受的程度
真正落地顺畅的团队,从来不是把所有安全检查都堆在流程最前面。
他们会把扫描规则拆成三个层级:第一档是阻断级检查点,比如代码里用了有明确RCE漏洞的公开依赖,硬编码了生产环境的数据库密码,这种才放在提交后的第一个执行节点,发现了直接打回,开发花5分钟就能改完,没人会有意见。第二档是警告级,比如低危的依赖漏洞,代码里有写得不太规范的加密逻辑,这种只给开发发个提醒,不卡流水线,攒到每周的技术债清理时间统一处理就行。第三档是审计级,比如代码仓库的分支保护配置,流水线的执行权限,这种根本不需要在开发提交代码的时候扫,后台定时跑批就行,有问题直接找对应负责人,完全不耽误业务迭代。
说实话,这事没那么玄。
很多人把安全左移想成要给开发加多少额外工作量,实际上算过账就知道,之前一个漏洞上线后被外部扫到,应急响应、回滚、发用户公告,前前后后要耗掉十几个研发、运维的工时,比在提交代码的时候花10秒钟扫一下的成本高10倍都不止。
之前接触过的一个团队,一开始硬推全量扫描,开发抵触到什么程度?有人直接把代码推到一个不接流水线的私有分支里,手动上传服务器上线,连安全团队的定期巡检都发现不了。后来他们把规则按层级拆完,整个流水线的平均跑通时间从之前的38分钟降到了7分钟,开发的抵触情绪直接消了大半。毕竟大部分人根本感知不到那些不卡流程的警告扫描,只有真的碰到阻断级问题的时候,才会停下来改一下,5分钟的事,没人会费那个劲绕流程。

别把左移做成安全团队的独角戏
很多团队的CI/CD流水线安全左移,从一开始就是安全团队牵头推进,找开发团队要资源,要排期,要改流程。
开发团队凭什么全力配合?
大家的KPI本来就不一样。安全团队的考核指标是漏洞检出率,开发团队的考核指标是需求交付速度,天然就有目标冲突。
真正能长期跑下去的配置,从来不是安全团队拍板定的。比如扫描规则的阈值,要拉着有5年以上经验的资深开发一起评,哪些漏洞是真的会影响线上稳定性的,哪些是扫描器的误报,哪些是在当前业务场景下根本不会触发的。举个例子,一个完全没有公网访问入口的内部后台系统,那种需要公网暴露权限才能触发的依赖漏洞,扫出来根本没必要让开发排期改,直接标记成可接受风险就行。
我之前碰到过一个扫描器,把测试用例里写的本地数据库密码,算成硬编码的生产环境凭证,报了个高危漏洞,卡了整个团队的流水线两个小时。最后安全团队的人自己都不好意思,给这个规则单独加了个测试目录的排除路径。这种乌龙事多来几次,开发对安全团队的信任度直接就跌到谷底。
还有个容易被忽略的盲区。很多团队做了半天代码层面的安全扫描,结果流水线的执行token是存在公开的配置文件里的,任何拿到代码仓库只读权限的人,都能改流水线的配置,往里面塞恶意的构建脚本,把要上线的生产镜像给替换掉。这种漏洞,你扫多少遍应用代码都扫不出来。说白了,CI/CD流水线安全左移,从来不是只扫应用代码那么简单,你得把从代码提交到镜像推送到仓库的整个链路,都按最小权限原则配一遍,别给人留可乘之机。
上周跟之前那个吐槽流程太长的老同事吃饭,他说现在他们把规则拆完之后,跑一次流水线平均12分钟,开发再也不绕开流程了。哦对,他还说,之前那个把CI/CD入口屏蔽的开发,现在每次看到扫描器提的依赖升级提示,还会主动点一下升级。
哪有什么大家不配合安全工作。
只是之前的流程,太折腾人了而已。