SuperAPI AI 工具集

verifying-build-provenance-with-slsa-sigstore

安全与审计

查看项目

更新于 10-16 01:30

技能介绍

用途:验证软件制品是否由可信构建者、从预期源码、无可篡改地构建出来,防范供应链投毒(对应 MITRE ATT&CK T1195、NIST CSF PR.DS-01)。SLSA 定义构建级别 L1–L3;Sigstore 提供签名与透明度基础设施:cosign 签名/验签、Fulcio 短时无钥证书绑定 OIDC 身份、Rekor 防篡改日志。

主要能力:用 cosign verify 校验镜像的无钥签名,并固定 OIDC issuer 与证书身份;用 cosign verify-attestation --type slsaprovenance 校验 SLSA 来源证明(支持 slsaprovenance、slsaprovenance02、slsaprovenance1);用 jq 解码证明,核对源码仓库、commit 与构建者;用 slsa-verifier verify-artifact 校验发布二进制并固定 source-uri、source-tag 与 builder-id(SLSA L3);用 cosign verify-blob-attestation 或 gh attestation verify 校验 GitHub 制品证明。

使用方式:先安装 cosign 与 slsa-verifier(命令见下),确保可访问 Rekor 与 Fulcio,并取得制品的证明包(.sigstore、.intoto.jsonl 或 OCI 附加证明)。验证须同时固定 OIDC issuer 与证书身份,否则无意义。可将校验写入 CI 脚本,用 set -euo pipefail 实现失败即关闭的门禁,也可用于 Kubernetes 准入控制。

适用场景:CI/CD 部署或晋级前的校验;消费第三方制品;建立并强制 SLSA L3 生产者管线;事件响应确认来源完整性;准入控制仅放行已验证镜像。

限制:需网络访问 Rekor 与 Fulcio;必须提供签名/证明包;需明确预期构建者身份与源码位置,否则无法完成身份固定;SLSA L1 证明不经签名可能可伪造,高信任制品应要求 L3。

安装命令: go install github.com/sigstore/cosign/v2/cmd/cosign@latest go install github.com/slsa-framework/slsa-verifier/v2/cli/slsa-verifier@latest curl -sSL https://github.com/slsa-framework/slsa-verifier/releases/latest/download/slsa-verifier-linux-amd64
-o /usr/local/bin/slsa-verifier && chmod +x /usr/local/bin/slsa-verifier

示例校验: cosign verify --certificate-oidc-issuer "https://token.actions.githubusercontent.com" --certificate-identity-regexp "^https://github.com/myorg/myrepo/.github/workflows/.@refs/tags/v." ghcr.io/myorg/myrepo:v1.2.3 cosign verify-attestation --type slsaprovenance --certificate-oidc-issuer "https://token.actions.githubusercontent.com" --certificate-identity "https://github.com/myorg/myrepo/.github/workflows/build-sign.yml@refs/heads/main" ghcr.io/myorg/myrepo:v1.2.3 slsa-verifier verify-artifact slsa-test-linux-amd64 --provenance-path slsa-test-linux-amd64.intoto.jsonl --source-uri github.com/myorg/myrepo --source-tag v1.2.3 cosign verify-blob-attestation --bundle ./myartifact.sigstore.json --new-bundle-format --certificate-oidc-issuer="https://token.actions.githubusercontent.com" --certificate-identity-regexp="^https://github.com/myorg/myrepo/" ./myartifact gh attestation verify ./myartifact --repo myorg/myrepo

SLSA 构建级别:L1 生成来源但可能未签名;L2 由托管构建服务签名;L3 由隔离加固构建者生成、不可伪造,高信任制品应要求 L3。