第八篇:《供应链安全:SLSA、SBOM 与制品 provenance》

发布时间:2026/10/30 1:00:07
第八篇:《供应链安全:SLSA、SBOM 与制品 provenance》 2025 年供应链攻击占比从 1% 跃升至 7%Forrester 数据显示 30% 的外部攻击源于软件供应链漏洞。镜像扫描解决了“有没有漏洞”的问题镜像签名解决了“从哪里来”的问题但它们都无法回答一个更根本的问题这个制品是怎么构建出来的构建过程是否可信 这就是 SLSASupply-chain Levels for Software Artifacts 框架要解决的核心问题。本文从 SLSA 框架的四个安全等级讲起深入讲解 SBOM软件物料清单的生成与格式、provenance构建出处证明的生成与验证以及如何将供应链安全实践嵌入 CI/CD 流水线帮你构建从“代码”到“部署”的全链路可信交付体系。一、SLSA 框架供应链安全的“成熟度模型”SLSASupply-chain Levels for Software Artifacts软件制品供应链级别是由 OpenSSF开源安全基金会发起的一套行业标准它为软件供应链安全定义了渐进式的安全等级从 L0 到 L3。1.1 SLSA 的四个安全等级每一个更高等级都建立在之前等级的所有要求之上。SLSA 框架当前版本定义了对构建出处证明provenance、源代码完整性和构建环境安全等领域的重点关注。 实践建议从 L1 起步先让 provenance 在 CI 中可追溯达到 L2 后签名 provenance 并上传到 Rekor 透明度日志L3 需要加固构建基础设施适合对安全性要求极高的生产环境。二、SBOM软件物料清单SBOMSoftware Bill of Materials软件物料清单 是一份正式记录列出软件制品中包含的所有组件及其版本信息。在供应链攻击日益频繁的今天SBOM 已成为安全合规的基本要求——没有 SBOM就无法知道你的软件里到底有什么。2.1 SBOM 的主流格式2.2 使用 Syft 生成 SBOMSyft 是 Anchore 开源的 SBOM 生成工具支持从容器镜像和文件系统中生成软件物料清单。安装 Syft# macOSbrewinstallsyft# Linuxcurl-sSfLhttps://raw.githubusercontent.com/anchore/syft/main/install.sh|sh-s---b/usr/local/bin生成 SBOMCycloneDX JSON 格式 # 从容器镜像生成 SBOMsyft scan myapp:latest-ocyclonedx-json# 输出到文件syft scan myapp:latest-ocyclonedx-json./sbom.cdx.json# 同时生成多种格式syft scan myapp:latest-ospdx-json./sbom.spdx.json-ocyclonedx-json./sbom.cdx.json[reference:10]2.3 在 CI 中集成 SBOM 生成以下 GitHub Actions 工作流在镜像构建后自动生成 SBOM 并上传为 Artifact# .github/workflows/sbom-generate.ymlname:Generate SBOMon:push:branches:[main]jobs:build-and-sbom:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv4-name:Build Docker imagerun:docker build-t myapp:latest .-name:Generate SBOM with Syftrun:|syft scan myapp:latest -o cyclonedx-json./sbom.cdx.json syft scan myapp:latest -o spdx-json./sbom.spdx.json-name:Upload SBOM as Artifactuses:actions/upload-artifactv4with:name:sbompath:./sbom.*.json三、Provenance构建出处证明Provenance构建出处证明 是一份可验证的元数据记录了软件制品“由谁、如何、用什么输入”构建而成。它解决了“这个制品是怎么来的”这一核心问题。SLSA 的每个等级对 provenance 的要求逐步提高L1provenance 存在记录构建过程L2provenance 由托管构建平台签名L3provenance 在加固的构建平台上生成防止构建期间篡改3.1 使用 in-toto 生成 provenancein-toto 是一个用于保护软件供应链完整性的框架通过在 CI/CD 流程的每个步骤创建加密签名的 attestation证明。生成 SLSA Provenance 的基本流程# 1. 生成 provenance 谓词predicate文件# provenance.json 包含构建信息构建器、输入材料、输出制品等# 2. 使用 Cosign 对 provenance 进行签名cosign attest-blob\--typeslsaprovenance\--predicateprovenance.json\myapp:latest[reference:15]3.2 使用 Sigstore 实现无密钥签名Sigstore 项目提供了一套工具链Cosign、Fulcio CA、Rekor 透明度日志实现了“无密钥签名”——开发者无需管理私钥通过 GitHub OIDC 即可完成签名和验证。在 GitHub Actions 中签名镜像并生成 provenance-name:Sign image with Cosign (Keyless)run:|cosign sign --keyless \ --oidc-issuer https://token.actions.githubusercontent.com \ ghcr.io/${{ github.repository }}:${{ github.sha }}env:COSIGN_EXPERIMENTAL:true签名后镜像的 provenance 信息会被记录到 Rekor 透明度日志中任何人都可以公开验证。四、实战完整的供应链安全 CI 流水线将 SBOM、镜像签名和 provenance 集成到一条完整的 CI 流水线中# .github/workflows/supply-chain-security.ymlname:Supply Chain Securityon:push:branches:[main]jobs:build-and-attest:runs-on:ubuntu-latestpermissions:contents:readid-token:write# 用于 OIDC 无密钥签名packages:write# 用于推送镜像到 GHCRsteps:-uses:actions/checkoutv4# 1. 构建镜像-name:Build Docker imagerun:docker build-t ghcr.io/${{github.repository}}:${{github.sha}}.# 2. 推送镜像-name:Push imagerun:docker push ghcr.io/${{github.repository}}:${{github.sha}}# 3. 生成 SBOM-name:Generate SBOMrun:|syft scan ghcr.io/${{ github.repository }}:${{ github.sha }} \ -o cyclonedx-json./sbom.cdx.json# 4. 上传 SBOM 作为 Artifact-name:Upload SBOMuses:actions/upload-artifactv4with:name:sbompath:./sbom.cdx.json# 5. 无密钥签名镜像-name:Sign image with Cosignrun:|cosign sign --keyless \ --oidc-issuer https://token.actions.githubusercontent.com \ ghcr.io/${{ github.repository }}:${{ github.sha }}env:COSIGN_EXPERIMENTAL:true# 6. 验证签名-name:Verify signaturerun:|cosign verify --keyless \ --oidc-issuer https://token.actions.githubusercontent.com \ ghcr.io/${{ github.repository }}:${{ github.sha }}五、在 Kubernetes 中验证供应链安全通过 Kyverno 的 ImageVerificationPolicy可以在 Pod 调度前强制验证镜像签名apiVersion:kyverno.io/v1kind:ClusterPolicymetadata:name:verify-image-signaturespec:validationFailureAction:Enforcerules:-name:verify-signaturematch:any:-resources:kinds:-PodverifyImages:-imageReferences:-ghcr.io/myorg/*attestors:-entries:-keyless:issuer:https://token.actions.githubusercontent.comrekor:url:https://rekor.sigstore.dev此策略会拒绝所有来自 ghcr.io/myorg/* 但未经签名验证的 Pod。六、小结SLSA 框架从 L0 到 L3 的四个安全等级L2 要求签名 provenanceL3 要求加固构建平台。SBOM使用 Syft 生成 CycloneDX/SPDX 格式的软件物料清单。Provenance使用 in-toto 生成构建出处证明使用 Cosign 进行签名。Sigstore 无密钥签名通过 GitHub OIDC 自动签名无需管理私钥。Kubernetes 准入控制通过 Kyverno ImageVerificationPolicy 强制验证镜像签名。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询