slsa-framework/slsa-github-generator
GitHub: slsa-framework/slsa-github-generator
一个基于 GitHub Actions 的工具,用于生成符合 SLSA 标准的不可伪造来源证明,以保障软件供应链的完整性和可追溯性。
Stars: 553 | Forks: 173
# SLSA GitHub Generator
[](https://api.securityscorecards.dev/projects/github.com/slsa-framework/slsa-github-generator)
[](https://bestpractices.coreinfrastructure.org/projects/6503)
[](https://goreportcard.com/report/github.com/slsa-framework/slsa-github-generator)
[](https://slack.openssf.org/)
[](https://slsa.dev)
- [概述](#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 的非详尽项目列表:
[](https://github.com/pallets/flask)
[](https://github.com/google/flatbuffers)
[](https://github.com/grpc-ecosystem/grpc-gateway) [](https://github.com/argoproj/argo-cd)
[](https://github.com/pallets/click)
[](https://github.com/getsops/sops)
[](https://github.com/GoogleContainerTools/jib)
[](https://github.com/pallets/jinja)
[](https://github.com/docker/docker-bench-security)
[](https://github.com/google/sentencepiece)
[](https://github.com/pallets/werkzeug)
[](https://github.com/ko-build/ko)
[](https://github.com/micronaut-projects/micronaut-core)
[](https://github.com/kubeedge/kubeedge)
[](https://github.com/google/osv-scanner)
[](https://github.com/fluxcd/flux2)
[](https://github.com/kyverno/kyverno)
[](https://github.com/pallets-eco/flask-sqlalchemy)
[](https://github.com/ossf/scorecard)
[](https://github.com/urllib3/urllib3)
[](https://github.com/PowerDNS/pdns)
[](https://github.com/aws-powertools/powertools-lambda-python)
[](https://github.com/ddworken/hishtory)
[](https://github.com/PrivateBin/PrivateBin)
[](https://github.com/atsign-foundation/noports)
[](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, 上游代理, 出处证明, 可复现构建, 完整性验证, 工件认证, 文档安全, 日志审计, 构建安全, 硬件无关, 自动化构建, 自动笔记, 请求拦截, 软件供应链安全, 软件开发工具包, 远程方法调用