kubernetes-sigs/tejolote
GitHub: kubernetes-sigs/tejolote
一个可插拔的构建观察器,用于为软件构建运行生成已签名的 SLSA 来源证明,提升软件供应链的透明度与可信度。
Stars: 73 | Forks: 12
# tejolote
一个高度可配置的构建执行器和观察器,旨在生成关于构建运行的已签名 [SLSA](https://slsa.dev/) 来源证明。
## 这是什么意思!?

如果您不熟悉[来源](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_。

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截图, 上游代理, 供应链透明度, 制品收集, 容器安全, 日志审计, 来源证明, 构建执行器, 构建溯源, 构建观察器, 硬件无关, 证明书签名, 跌倒检测, 软件供应链安全, 软件物料清单, 远程方法调用, 防篡改