首页 / 业界 / 正文

CI/CD流水线安全左移落地别搞成空架子

上周跟几个做DevOps的朋友在大排档撸串,有人拍着桌子吐槽,说刚花了大价钱上的CI/CD流水线安全左移项目,上线三个月,除了每天往大家邮箱发几十封告警邮件,半毛钱实际作用都没有。旁边另一个做安全的朋友接话,说他们团队更冤,为了凑左移的KPI,把所有能接的扫描器全接到流水线里,现在开发提交代码,要等二十多分钟才能跑完检查,大家私下都在传,说以后能不提交就不提交。

别把安全左移等同于多塞几个扫描器

很多团队对CI/CD流水线安全左移的第一认知,就是把安全检查的位置往代码仓库方向挪,至于挪了之后好不好用,没人细想。就像给家里装烟雾报警器,你把报警器从厨房挪到玄关,就算是“安全前移”了?不对的。之前接触过一个做垂直电商的小团队,刚上左移项目的时候,一口气把SAST、依赖扫描、密钥检测三个工具全接到了代码提交的第一环节,不管开发提交的是一行注释,还是一个修复按钮样式的小改动,都要跑全仓库的扫描。第一次跑的时候,流水线卡了22分钟,开发在工位上盯着进度条转圈,等得直挠头。

CI/CD流水线各阶段安全扫描节点分布图

更麻烦的是,扫出来的告警80%都是无效信息。什么代码里的测试硬编码,什么开源组件三年前的低危漏洞,什么代码风格不符合规范的提示,全一股脑推到开发面前。安全团队觉得自己KPI完成了,扫出了几百个漏洞,开发团队觉得自己被添堵了,本来一天能做完的功能,现在光处理无效告警就要花俩小时。时间长了大家都找到了解决办法:提交代码的时候加个跳过参数,直接绕开所有扫描环节。等安全团队季度复盘的时候才发现,近一半的代码提交根本没走安全检查流程,所谓的左移,完全成了流水线里的摆设。

真正的左移是把检查嵌到开发的顺手位置

之前跟一个做云原生工具的团队聊,他们搞左移搞了快两年,踩了无数坑之后才摸明白,左移不是把所有安全检查全堆到最前面,是要顺着开发的操作路径,把检查放到大家最不抵触的位置。他们现在的检查是顺着开发的动作拆的:最先碰到检查的环节,是开发在本地写代码的阶段,IDE插件会帮着扫硬编码、扫低级的语法问题,这种检查是秒级出结果,开发当场就改了,根本不会把问题推到提交环节。等代码推到Git仓库的提交钩子环节,系统只扫本次提交改动的代码,不翻整个仓库的存量旧账,扫的时间控制在1分钟以内,扫出来的问题直接@到提交代码的人,不搞全员轰炸的告警。等代码打包成镜像准备推测试环境的时候,再做一轮全量的镜像漏洞扫描,这种检查不阻塞开发提测,只是把漏洞清单同步到镜像仓库,等漏洞修复了再推最终版本。

开发本地IDE安全插件实时检测界面
开发本地IDE安全插件实时检测界面

这里最关键的一点,安全检查的阻塞规则必须和漏洞的实际影响绑定。不是所有扫出来的问题都要卡住流水线不让走,只有那种能直接导致远程代码执行、核心数据泄露的高危漏洞,才触发阻塞机制;什么代码格式不规范、低危的依赖漏洞,直接记个台账就行,给个修复的时间窗口,没必要卡着流程不让大家上线。他们团队现在的流水线平均运行时间,比之前搞全量扫描的时候降了70%,开发的投诉少了,扫出来的有效漏洞反而比之前多了三倍。毕竟大家不用费劲绕开检查了,扫出来的问题也都是真的需要解决的。

别把左移做成安全团队的独角戏

很多团队的CI/CD流水线安全左移,从一开始就走偏了。安全团队自己关起门来定规则,自己选工具,自己接流水线,全程没找开发团队聊过一次。结果定出来的规则离谱到什么程度?比如要求所有代码里不能出现“password”这个字符串,不管你是真的写了硬编码密码,还是在注释里写“这里需要用户输入password”,只要出现就触发告警。开发看着满屏的报错都懵,这根本不是在帮忙,是在添乱。

说白了,左移的核心不是把安全工作甩给开发,是安全团队要把能力沉淀成开发能直接用的工具。比如针对常见的漏洞场景,写好可以直接套用的代码模板,开发遇到问题不用自己翻几十页的漏洞公告,复制粘贴就能解决问题。别搞那种事后算账的机制,比如开发因为赶紧急需求跳过了某个低危检查,安全团队就上来开罚单,换谁都要抵触。毕竟大家的目标是一致的,都是让系统更稳,不是为了考核而考核。

上周再碰到之前在大排档吐槽的那个DevOps朋友,他说他们把之前的全量扫描拆成了三层,现在开发的配合度高多了,也没人再想着绕开检查。这事没那么玄。不是买最贵的工具,搞最复杂的流程就叫安全左移。能让开发愿意配合,扫出来的问题真的能被改掉,不把流水线变成摆设,就够了。