上线前加一道扫描,安全左移就完成了吗?不少团队的真实情况是:扫描报告躺在另一个系统里,开发要等安全同事转述;门禁一开就堵住整条流水线,最后被临时绕过;规则基线几年没更新,误报多到没人再看。
安全左移真正落进流水线,判断标准不是扫了多少次,而是每个风险有没有在正确的节点被发现、被分级、被修复。GitFox 是禅道 DevOps 内置的核心组件与一体化底层引擎,自研且无海外开源内核依赖,把代码托管、评审、CI/CD、代码扫描、质量门禁和制品库放在同一条交付链上;它与禅道项目管理分工衔接,适合 50~300 人研发中心、中大型组织和信创私有化团队做 PoC 验证。
一、安全左移常见问题分析
先把症状和根因分开。安全左移落不下去,常见的是流程断点,不是工具数量。
现场信号 | 更可能的原因 | 先处理什么 |
|---|---|---|
扫描结果只在安全团队手里 | 扫描没进流水线,结果靠人工转 | 把扫描任务放进 MR 和构建阶段,结果回写同一处 |
门禁一开就大面积失败 | 没有分级,存量问题和新问题一起拦 | 先区分新增与存量,再定阻断级别 |
规则越加越多,开发开始绕开 | 基线无人维护,误报消耗信任 | 给规则设负责人、复核周期和例外期限 |
Google Cloud DORA 团队在 2022 年的《Accelerate State of DevOps Report》中提到,63% 的受访者已把应用级安全扫描作为生产发布 CI/CD 的一部分;报告也指出,高信任、低责备的文化比技术更能预测安全实践采纳。工具提供信号,流程和文化决定信号会不会被处理。
二、安全左移该卡在流水线的哪几个位置?
位置放错,扫描就会变成事后补救。DevSecOps 平台里比较稳妥的做法,是把代码扫描按风险密度从早到晚布点,而不是每个阶段都塞满工具。
阶段 | 主要检查 | 建议动作 | 成功信号 |
|---|---|---|---|
提交与 MR | 密钥、增量 SAST、新依赖 | 只扫本次变更,严重问题阻断合并 | 评审页能看到结果并直接修 |
构建 | 依赖漏洞、镜像、IaC | 可利用高危才阻断 | 日志能定位组件和版本 |
制品入库 | SBOM、签名、来源 | 未签名或来源不明不入库 | 制品能追到提交和构建 |
部署前 | DAST、策略校验 | 高风险阻断,低风险告警 | 发布单能看到放行依据 |
这张表的重点不是把四行都做满,而是让每个阶段只回答一个问题:这个风险现在能不能被看见,能不能被判断,能不能被处理。NIST SSDF 和 SLSA 这类框架提供的也是分层思路,不是要求一次把所有检查开齐。

三、安全左移的门禁如何看?
门禁最容易犯的错,是把“有漏洞”直接等同于“禁止合并”。 真正可执行的质量门禁至少分三层:
级别 | 触发条件 | 流水线动作 | 处理责任 |
|---|---|---|---|
观察 | 低危、历史存量、误报待确认 | 记录,不阻断 | 安全团队定期复核 |
告警 | 中危,或高危但暂无可用修复 | 提示到 MR,允许有条件放行 | 研发负责人确认风险 |
阻断 | 密钥泄露、可利用的高危、来源不明制品 | 停止合并或停止入库 | 提交人修复,安全团队审例外 |
分级之后,还要处理存量。比较务实的规则是“新增问题阻断,存量问题限期收敛”:先冻结当前基线,新提交不允许新增同类问题,历史问题按模块排期。这样门禁不会在第一天就把所有历史债务变成交付事故。
例外也不能靠口头放行。每条例外至少写清申请人、原因、影响范围、到期时间和补偿措施;到期自动失效,重新评估。没有到期时间的白名单,很容易变成新的历史债务。

四、DevSecOps 平台里的安全左移,基线要有人养
规则基线如果没人维护,门禁的可信度会很快下降。 代码框架在变,依赖在升级,攻击手法也在变,装完就不再回看的规则迟早会失效。
规则包版本化:每次调整记录原因,避免“昨天能过、今天不能过”却查不到原因。
设固定负责人:安全团队定规则,平台团队保执行,研发负责人处理本模块例外。
控制扫描耗时:MR 只跑增量,完整扫描放到构建或夜间任务。
误报要闭环:记录规则、代码位置和结论,能抑制的设期限,不能抑制的回退规则。
结果放同一处:代码、流水线、制品和缺陷尽量共用同一套对象标识,减少跨系统复制粘贴。
这也是 DevSecOps 平台和单点扫描工具的区别:前者不只是提供扫描器,还要把扫描结果、门禁状态、制品版本和修复责任串起来。链路越短,定位问题越少来回。
五、DevSecOps 平台上的安全左移,怎么验收?
基线稳定之后,验收才有意义。验收不要只看“接入了几个扫描器”。 下面五个信号更能说明安全左移有没有真的进流水线:
新增高危拦截率:门禁是否在合并前拦住新增的可利用高危问题。
门禁误报率:开发是否愿意相信结果,误报有没有持续下降。
平均修复时长:从问题出现到关闭用了多久,卡在谁那里。
例外到期率:例外是否按期限关闭,还是不断续期。
扫描耗时与通过率:MR 阶段是否在团队可接受的时间内给出结论。
如果要做两周 PoC,不用先铺满所有仓库。选一个真实项目,定 5 条最关键规则,设 1 个阻断和 1 个告警级别,跑够 20 个 MR,再看上面五组数据。先在一个仓库跑通“发现—分级—修复—复核”,再复制到更多团队,比一次性上线十几个扫描器更稳。
想先看具体做法,可以参考把 5 类代码扫描嵌入 CI/CD 流水线,里面按 SAST、依赖、镜像等类型拆了接入位置。
六、安全左移落地常被问到的几个问题
落地时还有几个问题反复出现,集中说明。
1. 安全左移是把安全团队的活交给开发吗?
不是。安全团队仍然负责定基线、审例外、做高风险评审;开发负责在提交和评审阶段处理自己引入的问题。责任共担,不等于责任转移。
2. 扫描是不是越多越好?
不是。扫描越多,噪声和等待时间越高。先覆盖密钥、依赖和高危代码问题,再按项目风险增加镜像、IaC 和 DAST。
3. 存量漏洞太多,门禁一开就堵死怎么办?
先冻结基线,新增问题阻断,存量按模块排期;对确实无法立即修的,走有期限的例外,不要直接关掉门禁。
4. 例外开了就收不回来怎么办?
例外必须带到期时间和补偿措施,到期自动失效;续期要重新说明原因。把例外数量纳入验收指标,团队才会认真收敛。
5. 小团队要不要做安全左移?
要,但可以从最小闭环开始:密钥扫描、依赖检查、高危阻断三件事先跑通。团队规模小,更适合把规则放在流水线里,而不是靠人盯。
结语
安全左移不是让安全团队替开发做所有检查,也不是在每个阶段都堆扫描器。它真正落进流水线的标志,是风险在正确的节点被看见,门禁有分级,例外有期限,修复有人负责。
如果正在评估 DevSecOps 平台,建议先用一个真实仓库做两周 PoC:只开最关键的规则,只设一个阻断门禁,把扫描耗时、误报和修复时长记下来。能跑通这一小段,再谈全量推广。需要了解部署方式和适用边界,可以从官网的 DevOps 版页面开始,预约一次针对现有流水线的验证沟通。



