kubernetes-sigs/tejolote

GitHub: kubernetes-sigs/tejolote

一个可插拔的构建观察器,用于为软件构建运行生成已签名的 SLSA 来源证明,提升软件供应链的透明度与可信度。

Stars: 73 | Forks: 12

# tejolote 一个高度可配置的构建执行器和观察器,旨在生成关于构建运行的已签名 [SLSA](https://slsa.dev/) 来源证明。 ## 这是什么意思!? ![SLSA Logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/392e395997030446.png) 如果您不熟悉[来源](https://www.tiktok.com/@chainguard_dev/video/7133203786927050027)(provenance)证明,可以将其视为不可伪造的文档,用于告知您的用户软件是如何构建的,主要包括: 输入了什么 → 对源代码执行了什么操作(以及由谁执行) → 输出了什么。 来源证明为用户对其所使用软件的构建过程提供了完全的透明度,使他们能够了解软件的来源、构建方式以及构建者。 ## 主要特性 Tejolote 旨在观察构建系统的运行,以收集有关软件在构建过程中经历转换的数据。它具有可插拔的模型,可根据需要添加更多的构建系统和产物存储。 * 支持多种构建系统(目前支持 [Google Cloud Build](https://cloud.google.com/build)、[Github Actions](https://github.com/features/actions),[Prow](https://github.com/kubernetes/test-infra/tree/master/prow) 即将支持)。 * 支持在多个阶段收集证明数据,或在构建运行时进行观察。 * 从不同来源(构建系统原生、目录、OCI 注册表、Google Cloud Storage 存储桶)收集产物。 * 使用 [sigstore](https://sigstore.dev) 对证明进行签名。 * 使用 cosign 将证明附加到容器镜像。 ## 运行模型 Tejolote 会监视您的构建系统构建(或转换)您的软件项目。它将您的构建视为一个黑盒,并且不对构建本身的安全性做任何假设。 它将信任您指示其考虑的输入,并通过查看您指示的查找位置来信任构建生成的产物。 ``` flowchart LR subgraph Build System direction LR clone("Clone Repository") --> build(Run Build) --> publish(Publish Artifacts) fetch("Fetch Materials") --> build publish --> oci(Container Registry) publish --> gcs(GCS Bucket) publish --> file(Filesystem) end subgraph Tejolote direction LR watch(Watch Build System) --> attest(Attest) --> sign(Sign) watch-. RECORD .-o clone watch-. RECORD .-o fetch watch-. CONTINOUSLY OBSERVE .-o build watch-. COLLECT .-o publish end ``` 虽然构建系统本身可以提供有关运行后生成的产物的信息,但 Tejolote 位于更高层级,并期望产物出现在您告诉它监视的存储位置中。 ## 示例 例如,假设您想证明一个 Cloud Build 作业在 GCS 存储桶中生成了一组二进制文件。在此示例中,gcb 项目为 `example-project`,产物被上传到存储桶 `test-bucket` 的 `/test` 目录中: ``` tejolote attest \ gcb://kubernetes-release-test/3190d867-f2e5-4969-aafd-0117b6c8ed12 \ --artifacts=gs://ulabs-cloud-tests/test/ ``` 这些是编造的示例,但 Tejolote 将生成类似于以下内容的证明: ``` { "_type": "https://in-toto.io/Statement/v0.1", "predicateType": "https://slsa.dev/provenance/v0.2", "subject": [ { "name": "gs://ulabs-cloud-tests/test/bom-windows-amd64.exe", "digest": { "sha256": "c03c50f220b095bf52a0ca496989a6c07f198d03cb8aad19834df143625ee821" } } ], "predicate": { "builder": { "id": "" }, "buildType": "https://cloudbuild.googleapis.com/CloudBuildYaml@v1", "invocation": { "configSource": {} }, "buildConfig": { "steps": [ { "image": "gcr.io/cloud-builders/git", "arguments": [ "clone", "https://github.com/kubernetes/release" ] }, ... ``` 构建系统运行和产物仓库均通过使用指向特定运行和存储位置的 [spec url](docs/spec-urls.md) 来指定。请查看 ## 名字的由来? Tejolote /ˌteɪhəˈloʊteɪ/ :源自纳瓦特尔语词汇 _texolotl_。 ![molcajete and tejolote](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/2454a5917d030447.jpg) tejolote 是 [_molcajete_](https://en.wikipedia.org/wiki/Molcajete)(前西班牙时期的研钵,用于制作萨尔萨酱)的手柄。 所以,其理念是使用 tejolote 从您的项目中提取出一些 salsa(萨尔萨酱/好东西) :)
标签:CI/CD安全, cosign, DevSecOps, EVTX分析, Github Actions, Google Cloud Build, Llama, provenance, SBOM, sigstore, SLSA, Web截图, 上游代理, 供应链透明度, 制品收集, 容器安全, 日志审计, 来源证明, 构建执行器, 构建溯源, 构建观察器, 硬件无关, 证明书签名, 跌倒检测, 软件供应链安全, 软件物料清单, 远程方法调用, 防篡改