15. CI 的质量门禁 2:依赖安全(SCA)与许可证合规

依赖决定了风险面:漏洞、供应链、许可证。

本章目标

把依赖风险变成可治理系统:漏洞(CVE)与许可证合规都要进入 CI 门禁与运营闭环。

你会掌握

SCA 的定位与数据链路、漏洞修复优先级与 SLA、许可证策略(allow/deny/review)与可审计豁免。

真实收益

减少供应链事故与“上线后才发现违规依赖”的返工;让安全治理不靠临时抽查,而靠默认系统。

现代软件最大的“外包”不是外包团队,而是外包给依赖。
你写 10% 的代码,却运行 90% 的第三方代码。这意味着:你的风险面很大一部分来自依赖
本章把依赖治理拆成两条主线:漏洞(SCA)许可证合规,并告诉你如何在不扰民的前提下做到“默认安全”。

1) SCA 是什么?它和 SAST 有什么不同?

一句话:SAST 关注“你写的”,SCA 关注“你用的”。

图 1:SCA 数据流(动态)

从 lockfile/SBOM 到漏洞库,再到门禁决策与修复工单:SCA 是一条数据链,不是一次扫描。

Inputs lockfile / SBOM 依赖清单 SCA Engine match + enrich 解析依赖树 Vuln DB CVE / advisory 严重性/影响范围 Gate & Triage block / warn / ticket 分级处理

2) 漏洞治理:严重性不等于优先级

很多团队在 SCA 上踩的坑是:把“高危”当成“立刻阻断一切”。结果是噪声爆炸,团队开始绕过门禁。

专业做法是把优先级拆成三个维度:

现实策略:
高危 + 可达 + 暴露面大 → 阻断/紧急修;
高危但不可达 → 记录/观察/批量修复;
中低危 → 设 SLA(例如 30/60/90 天),定期收敛。

图 2:漏洞 → 修复闭环(动态)

扫描只是开始,治理才是关键:分级、分派、修复、验证、回归与审计,才能让风险持续下降。

Detect 扫描发现 Triage 分级/可达性/暴露面 Fix 升级/替换/补丁 Verify & Audit 复测 + 门禁 + 记录 风险持续收敛

3) 许可证合规:不是法律恐吓,是工程规则

许可证问题常见“翻车点”:

一个可落地的合规策略通常是三段式:

图 3:许可证门禁决策(动态)

合规不靠“临时查表”,靠“策略 + 门禁 + 审计”:允许/审核/禁止三段式能把复杂问题工程化。

Dependency name + license 从 SBOM/锁文件来 Policy allow / review / deny 组织策略 可审计豁免 Allow pass Review/Deny ticket / block

4) 豁免与审计:允许例外,但必须可追溯

现实里总会遇到“暂时没法修”的漏洞或许可证争议依赖。成熟策略是:

本章小结:依赖治理是一门“运营学”

← 上一章:Lint/SAST 下一章:Secrets 与最小授权 →