slsa-framework/slsa-github-generator

GitHub: slsa-framework/slsa-github-generator

一个基于 GitHub Actions 的工具,用于生成符合 SLSA 标准的不可伪造来源证明,以保障软件供应链的完整性和可追溯性。

Stars: 553 | Forks: 173

# SLSA GitHub Generator [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/slsa-framework/slsa-github-generator/badge)](https://api.securityscorecards.dev/projects/github.com/slsa-framework/slsa-github-generator) [![CII 最佳实践](https://bestpractices.coreinfrastructure.org/projects/6503/badge)](https://bestpractices.coreinfrastructure.org/projects/6503) [![Go 报告卡](https://goreportcard.com/badge/github.com/slsa-framework/slsa-github-generator)](https://goreportcard.com/report/github.com/slsa-framework/slsa-github-generator) [![Slack](https://img.shields.io/static/v1?label=openssf.slack.com&message=%23slsa-tooling&color=4A154B&logo=slack)](https://slack.openssf.org/) [![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://slsa.dev) SLSA logo - [概述](#overview) - [什么是 SLSA?](#what-is-slsa) - [什么是 provenance?](#what-is-provenance) - [什么是 slsa-github-generator?](#what-is-slsa-github-generator) - [名人堂](#hall-of-fame) - [Provenance 生成](#generation-of-provenance) - [Builder 创建](#builder-creation) - [生成 provenance](#generate-provenance) - [引用 SLSA builder 和 generator](#referencing-slsa-builders-and-generators) - [Builder](#builders) - [Generator](#generators) - [验证 provenance](#verify-provenance) - [安装](#installation) - [输入](#inputs) - [命令行示例](#command-line-examples) - [已知问题](#known-issues) - [error updating to TUF remote mirror: invalid](#error-updating-to-tuf-remote-mirror-invalid) - [构建您自己的 Builder](#build-your-own-builder) - [项目路线图](#project-roadmap) - [技术设计](#technical-design) - [规范](#specifications) - [Provenance 格式](#provenance-format) - [贡献](#contributing) ## 概述 本仓库包含免费工具,用于使用 GitHub Actions 为原生 GitHub 项目生成和验证 SLSA Build Level 3 provenance。 开发者可以使用安全流程构建软件,防止许多供应链攻击和篡改。 其软件的用户可以验证关于流程的防篡改声明,以了解软件是如何创建的。 ### 什么是 SLSA? [软件工件供应链等级](https://slsa.dev)(Supply-chain Levels for Software Artifacts),或简称 SLSA (salsa), 是一个安全框架,一份标准和控制清单,旨在防止 篡改,提高完整性,并保护您的 项目、企业或公司中的包和基础设施。 SLSA 定义了一组可递增采用的级别,这些级别是 根据递增的合规性和保证来定义的。SLSA 级别就像一种通用 语言,用于讨论软件、供应链及其组件 部分的安全性。 ### 什么是 provenance? Provenance 是关于软件工件如何被 创建的信息或元数据。这可能包括关于使用了什么源代码、构建系统 和构建步骤,以及谁发起了构建及其原因的信息。 Provenance 可用于确定您使用的 软件工件的真实性和可信度。 作为框架的一部分,SLSA 定义了一种 [provenance 格式](https://slsa.dev/provenance/),可用于保存此 元数据。 ### 什么是 slsa-github-generator? slsa-github-generator 是一套用于为原生 GitHub 项目生成 SLSA3+ provenance 的工具。它允许项目使用 [GitHub Actions](https://github.com/features/actions) 安全准确地生成 [SLSA provenance](https://slsa.dev/provenance/)。 具体而言,本仓库包含: - 用于在 GitHub 上为您的项目生成不可伪造的 SLSA provenance 的 工具。生成的 provenance 满足 [SLSA Build level 3 及以上](https://slsa.dev/spec/v1.0/levels)的 [provenance 生成](https://slsa.dev/spec/v1.0/requirements#provenance-generation)和 [隔离](https://slsa.dev/spec/v1.0/requirements#isolation-strength)要求。请参阅一些使用本项目生成 provenance 的[热门项目](#hall-of-fame)。 - 用于使用 [Build-Your-Own-Builder](#build-your-own-builder) 框架在 GitHub 上构建 SLSA builder 的 工具。使用此 框架,您可以将现有的 GitHub Action “封装”到 SLSA builder 中。 该 SLSA builder 将生成满足 [SLSA Build level 3 及以上](https://slsa.dev/spec/v1.0/levels)的 [provenance 生成](https://slsa.dev/spec/v1.0/requirements#provenance-generation)和 [隔离](https://slsa.dev/spec/v1.0/requirements#isolation-strength)要求的不可伪造的 provenance。请参阅一些使用 BYOB 框架创建的 [builder](#builder-creation)。 虽然 slsa-github-generator 可以帮助您达到 SLSA Build level 3,但仅使用提供的 [GitHub Actions 可重用工作流](https://docs.github.com/en/actions/using-workflows/reusing-workflows) 并不足以满足 SLSA Build level 3 的所有要求。 具体而言,这些工作流不涉及 provenance [分发](https://slsa.dev/spec/v1.0/distributing-provenance)或 [验证](https://slsa.dev/spec/v1.0/verifying-artifacts)。 您可以使用 [slsa-verifier](#verify-provenance) 来验证 provenance。 #### Provenance 生成 以下是一份使用本仓库中的 builder 生成 provenance 的非详尽项目列表: [![flask stars](https://img.shields.io/github/stars/pallets/flask?logo=github&label=pallets/flask)](https://github.com/pallets/flask) [![flatbuffers stars](https://img.shields.io/github/stars/google/flatbuffers?logo=github&label=google/flatbuffers)](https://github.com/google/flatbuffers) [![grpc-gateway stars](https://img.shields.io/github/stars/grpc-ecosystem/grpc-gateway?logo=github&label=grpc-ecosystem/grpc-gateway)](https://github.com/grpc-ecosystem/grpc-gateway) [![argo-cd stars](https://img.shields.io/github/stars/argoproj/argo-cd?logo=github&label=argoproj/argo-cd)](https://github.com/argoproj/argo-cd) [![click stars](https://img.shields.io/github/stars/pallets/click?logo=github&label=pallets/click)](https://github.com/pallets/click) [![SOPS stars](https://img.shields.io/github/stars/getsops/sops?logo=github&label=getsops/sops)](https://github.com/getsops/sops) [![jib stars](https://img.shields.io/github/stars/GoogleContainerTools/jib?logo=github&label=GoogleContainerTools/jib)](https://github.com/GoogleContainerTools/jib) [![jinja stars](https://img.shields.io/github/stars/pallets/jinja?logo=github&label=pallets/jinja)](https://github.com/pallets/jinja) [![docker-bench-security stars](https://img.shields.io/github/stars/docker/docker-bench-security?logo=github&label=docker/docker-bench-security)](https://github.com/docker/docker-bench-security) [![sentencepiece stars](https://img.shields.io/github/stars/google/sentencepiece?logo=github&label=google/sentencepiece)](https://github.com/google/sentencepiece) [![werkzeug stars](https://img.shields.io/github/stars/pallets/werkzeug?logo=github&label=pallets/werkzeug)](https://github.com/pallets/werkzeug) [![ko stars](https://img.shields.io/github/stars/ko-build/ko?logo=github&label=ko-build/ko)](https://github.com/ko-build/ko) [![micronaut-core stars](https://img.shields.io/github/stars/micronaut-projects/micronaut-core?logo=github&label=micronaut-projects/micronaut-core)](https://github.com/micronaut-projects/micronaut-core) [![kubeedge stars](https://img.shields.io/github/stars/kubeedge/kubeedge?logo=github&label=kubeedge/kubeedge)](https://github.com/kubeedge/kubeedge) [![osv-scanner stars](https://img.shields.io/github/stars/google/osv-scanner?logo=github&label=google/osv-scanner)](https://github.com/google/osv-scanner) [![flux2 stars](https://img.shields.io/github/stars/fluxcd/flux2?logo=github&label=fluxcd/flux2)](https://github.com/fluxcd/flux2) [![kyverno stars](https://img.shields.io/github/stars/kyverno/kyverno?logo=github&label=kyverno/kyverno)](https://github.com/kyverno/kyverno) [![flask-sqlalchemy stars](https://img.shields.io/github/stars/pallets-eco/flask-sqlalchemy?logo=github&label=pallets-eco/flask-sqlalchemy)](https://github.com/pallets-eco/flask-sqlalchemy) [![scorecard stars](https://img.shields.io/github/stars/ossf/scorecard?logo=github&label=ossf/scorecard)](https://github.com/ossf/scorecard) [![urllib3 stars](https://img.shields.io/github/stars/urllib3/urllib3?logo=github&label=urllib3/urllib3)](https://github.com/urllib3/urllib3) [![pdns stars](https://img.shields.io/github/stars/PowerDNS/pdns?logo=github&label=PowerDNS/pdns)](https://github.com/PowerDNS/pdns) [![powertools-lambda-python stars](https://img.shields.io/github/stars/aws-powertools/powertools-lambda-python?logo=github&label=aws-powertools/powertools-lambda-python)](https://github.com/aws-powertools/powertools-lambda-python) [![hishtory stars](https://img.shields.io/github/stars/ddworken/hishtory?logo=github&label=ddworken/hishtory)](https://github.com/ddworken/hishtory) [![PrivateBin stars](https://img.shields.io/github/stars/PrivateBin/PrivateBin?logo=github&label=PrivateBin/PrivateBin)](https://github.com/PrivateBin/PrivateBin) [![NoPorts stars](https://img.shields.io/github/stars/atsign-foundation/noports?logo=github&label=Atsign-Foundation/NoPorts)](https://github.com/atsign-foundation/noports) [![openfga stars](https://img.shields.io/github/stars/openfga/openfga?logo=github&label=openfga/openfga)](https://github.com/openfga/openfga) [编辑此文件](https://github.com/slsa-framework/slsa-github-generator/edit/main/README.md)以添加您的仓库! #### Builder 创建 已经使用 [“Build Your Own Builder” (BYOB) 框架](#build-your-own-builder)构建了几个 builder: 1. [nodejs builder](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/nodejs#readme),作者 [@ianlewis](https://github.com/ianlewis) 2. [JReleaser builder](https://github.com/jreleaser/release-action/tree/java#slsa-builder),作者 [@aalmiray](https://github.com/aalmiray) 3. [Maven builder](https://github.com/slsa-framework/slsa-github-generator/blob/main/internal/builders/maven/README.md),作者 [@AdamKorcz](https://github.com/AdamKorcz) 4. [Gradle builder](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/gradle/README.md),作者 [@AdamKorcz](https://github.com/AdamKorcz) 5. **即将推出!** [Bazel builder](https://github.com/slsa-framework/slsa-github-generator/tree/main/internal/builders/bazel/README.md),作者 [@enteraga6](https://github.com/enteraga6) ## 生成 provenance 下面我们介绍本仓库中的各种 [builder](#builders) 和 [generator](#generators)。它们使用可信/隔离的可重用工作流构建和/或生成不可伪造的 provenance。您可以在我们的[技术设计文档](#technical-design)中阅读有关设计的信息。 要为您的用例选择正确的选项来生成 provenance,请考虑您已经使用的编程语言和构建工具链,例如 `go`、`mvn`、`bazel` 等。为您的生态系统选择一个 [builder](#builders)。 例如,如果您使用 Go,请使用 [Go builder](internal/builders/go/README.md)。如果您使用 Java 并构建 Maven 包,请使用 [Maven builder](internal/builders/maven/README.md),依此类推。 如果您的发布脚本比 builder 支持的更复杂;或者您的生态系统没有 builder,请改用 provenance [generator](#generators)。 ### 引用 SLSA builder 和 generator 目前,本仓库中作为 builder 和 generator 提供的 GitHub Actions **必须**通过 tag 引用,以便 `slsa-verifier` 能够验证可信 builder/generator 的可重用工作流的 ref。它也需要以 `@vX.Y.Z` 的形式引用,因为如果您通过较短的 tag(如 `@vX.Y` 或 `@vX`)引用,构建将会失败。 这与 [GitHub 第三方操作最佳实践](https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-third-party-actions)(建议通过摘要引用)相反,但由于 GitHub Actions 的限制,这是故意的。 希望能够验证通过哈希固定的可重用工作流,以及当前状态的原因,在 slsa-verifier 项目中作为 [Issue #12](https://github.com/slsa-framework/slsa-verifier/issues/12) 进行跟踪。 有关如何配置 renovate 的指导,请参阅 [RENOVATE.md](RENOVATE.md)。 ### Builder Builder 构建并生成 provenance。它们让您满足 [SLSA Build level 3 及以上](https://slsa.dev/spec/v1.0/levels)的 [provenance 生成](https://slsa.dev/spec/v1.0/requirements#provenance-generation)和 [隔离强度](https://slsa.dev/spec/v1.0/requirements#isolation-strength)要求。 本仓库托管以下 builder: | 生态系统 | Builder | 描述 | 状态 | | :------------------------------------------ | :------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [Go](https://go.dev/) 项目 | [Go Builder](internal/builders/go/README.md) | 为 Go 项目构建并生成 provenance | [自 v1.0.0 起稳定](https://github.com/slsa-framework/slsa-github-generator/milestone/1) | | [Node.js](https://nodejs.org) 项目 | [Node.js Builder](internal/builders/nodejs/README.md) | 为 npm 包构建并生成 provenance | [自 v1.6.0 起 Beta](https://github.com/slsa-framework/slsa-github-generator/milestone/8). [GA 里程碑](https://github.com/slsa-framework/slsa-github-generator/milestone/17) | | [Maven](https://maven.apache.org/) 项目 | [Maven builder](internal/builders/maven/README.md) | 构建 Maven 包并生成 provenance。可上传至 [Maven central](https://search.maven.org) | [自 v1.9.0 起 Beta](https://github.com/slsa-framework/slsa-github-generator/milestone/14) | | [Gradle](https://gradle.org/) 项目 | [Gradle builder](internal/builders/gradle/README.md) | 构建 Gradle 项目并生成 provenance。可上传至 [Maven central](https://search.maven.org) | [自 v1.9.0 起 Beta](https://github.com/slsa-framework/slsa-github-generator/milestone/15) | | [Bazel](https://bazel.build/) 项目 | [Bazel builder](internal/builders/bazel/README.md) | 构建 [Bazel](https://bazel.build/) 项目并生成 provenance | [WIP](https://github.com/slsa-framework/slsa-github-generator/milestone/16) | | [docker](https://www.docker.com/) 镜像 | Container Builder | 构建 docker 容器并生成 provenance。生成的 provenance 与 [cosign](https://github.com/sigstore/cosign) 的 attestation 格式兼容 | [WIP](https://github.com/slsa-framework/slsa-github-generator/milestone/5) | | Any | [Container-based Builder](internal/builders/docker/README.md) | 构建构建管道由 Dockerfile 定义的项目 | [自 v1.7.0 起 Beta]() | 还有其他使用本仓库 [BYOB 框架](#build-your-own-builder) 但不托管在本仓库的可用 builder: | 生态系统 | Builder | 描述 | 状态 | | :------------------------------------------- | :-------------------------------------------------------------------------------------- | :------------------------------------------------------------------------ | :-------------------------------------------------------------------------------- | | [JReleaser](https://jreleaser.org/) 项目 | [JReleaser builder](https://github.com/jreleaser/release-action/tree/java#slsa-builder) | 使用 [JReleaser](https://jreleaser.org/) 构建并生成 provenance | [自 v1.0.0-java 起](https://github.com/jreleaser/release-action/tree/v1.0.0-java) | 如果这些选项都不符合您的需求,请使用如下所述的 [generator](#generators): ### Generator Generator 仅为您的生成 provenance。它们让您满足 [SLSA Build level 3 及以上](https://slsa.dev/spec/v1.0/levels)的 [provenance 生成](https://slsa.dev/spec/v1.0/requirements#provenance-generation)和 [隔离强度](https://slsa.dev/spec/v1.0/requirements#isolation-strength)要求。 Generator 为来自您仓库的软件工件创建 attestation。 本仓库托管以下 generator: | 工件类型 | Generator | 描述 | 状态 | | :---------------------------------- | :----------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------- | | 文件(二进制、包 tarball 等) | [Generic generator](internal/builders/generic/README.md) | 为任意基于文件的工件生成 provenance,适用于任何生态系统和编程语言 | [自 v1.2.0 起稳定](https://github.com/slsa-framework/slsa-github-generator/milestone/2) | | container | [Container generator](internal/builders/container/README.md) | 为容器镜像生成 provenance。生成的 provenance 与 [cosign](https://github.com/sigstore/cosign) 的 attestation 格式兼容。 | [自 v1.4.0 起稳定](https://github.com/slsa-framework/slsa-github-generator/milestone/3) | ## 验证 provenance 要验证本仓库中任何 builder 创建的 provenance,请使用 [github.com/slsa-framework/slsa-verifier](https://github.com/slsa-framework/slsa-verifier) 项目。 ### 安装 要安装验证器,请参阅 [slsa-framework/slsa-verifier#installation](https://github.com/slsa-framework/slsa-verifier#installation)。 ### 输入 验证器的输入在 [slsa-framework/slsa-verifier#available-options](https://github.com/slsa-framework/slsa-verifier#available-options) 中进行了描述。 ### 命令行示例 [slsa-framework/slsa-verifier#example](https://github.com/slsa-framework/slsa-verifier#example) 中提供了命令行示例。 ## 已知问题 ### 更新到 TUF 远程镜像时出错:invalid 使用所有 builder 和 generator 生成 provenance 时会发生这种情况。 **受影响版本:** 包括 v1.9.0 在内的所有版本 ``` error updating to TUF remote mirror: invalid ``` 此问题由 [issue #3350](https://github.com/slsa-framework/slsa-github-generator/issues/3350) 跟踪。您*必须*更新到 v1.10.0 才能修复此问题。 ## 构建您自己的 Builder 使用 [BYOB 框架](BYOB.md) 在 GitHub 上创建您自己的 SLSA builder。如果您有现有的 GitHub Action,则可以使用 BYOB 框架将其封装到 SLSA builder 中。 这将通过在隔离环境中运行 Action 来加固构建过程。生成的工件将满足 Build Level 3 期望并生成 Build Level 3 provenance。 为了验证 provenance,您的用户可以使用 [slsa-verifier](#verification-of-provenance)。 ## 项目路线图 项目路线图通过里程碑进行跟踪。您可以通过[里程碑页面](https://github.com/slsa-framework/slsa-github-generator/milestones?direction=asc&sort=due_date&state=open)跟踪进度和未解决的 问题。 每个里程碑都包含正在进行的工作的描述以及完成的粗略 时间表。 ## 技术设计 初始技术设计在博文“[通过防篡改构建提高软件供应链安全性](https://security.googleblog.com/2022/04/improving-software-supply-chain.html)”中进行了描述。 ### 规范 如需更深入的技术探讨,请阅读 [SPECIFICATIONS.md](./SPECIFICATIONS.md)。 ### Provenance 格式 provenance 的格式可在 [PROVENANCE_FORMAT.md](./PROVENANCE_FORMAT.md) 中找到。 ## 贡献 请参阅[贡献者指南](CONTRIBUTING.md)了解更多信息。
标签:DevSecOps, EVTX分析, GitHub Actions, Go, IPv6支持, OpenSSF, Provenance, Ruby工具, SBOM, SLSA, TUF, 上游代理, 出处证明, 可复现构建, 完整性验证, 工件认证, 文档安全, 日志审计, 构建安全, 硬件无关, 自动化构建, 自动笔记, 请求拦截, 软件供应链安全, 软件开发工具包, 远程方法调用