构建过程也是产品的一部分
应用是源码、依赖、构建工具和 CI 环境的总和。攻击者可以攻破其中任何一环。恶意传递依赖、被重新打标签的 GitHub Action 或泄露的 CI 令牌,都能插入正常代码评审看不到的代码。供应链控制让每一步可见并受到约束。
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
permissions:
contents: read
示例锁定 Action 并限制工作流令牌,两者都缩小了依赖或工作流被攻破后的影响。
知道你在发布什么
从最终产物生成 SBOM,而不只是从锁文件生成。扫描已知漏洞,并按可达性和严重性分级。记录构建输入和来源,以便事后调查能回答哪个源码和依赖产生了已部署镜像。平台支持时,对产物签名并在部署时验证签名。
自动化的最小权限
CI 令牌是高价值凭证。只授予工作流需要的权限,避免把密钥暴露给来自 fork 的拉取请求,并分离构建与部署角色。轮换凭证,优先使用短时工作负载身份。拥有仓库写权限的被攻破构建步骤可以改写源码或发布产物。
何时使用
任何依赖第三方代码或自动构建的生产软件都应使用供应链控制。优点是可验证、受约束的生产路径;代价是工具和流程开销。与仅做依赖审计相比,供应链计划覆盖审计看不到的构建和分发层。