核心概念
目录
供应链安全
供应链安全指的是保护从开发到部署的软件开发生命周期的完整性、安全性和可靠性。Tekton Chains 旨在通过提供机制来验证 CI/CD 流水线生成的工件未被篡改且可信,从而解决供应链安全问题。
SLSA 框架
SLSA(Supply-chain Levels for Software Artifacts)是一种安全框架,提供防止篡改、提升完整性以及保护包和基础设施的标准和控制清单。Tekton Chains 支持多种 SLSA 来源格式:
- SLSA v0.2:通过
slsa/v1或in-toto格式支持 - SLSA v1.0:通过
slsa/v2alpha3和slsa/v2alpha4格式支持
作为该框架的一部分,SLSA 设有多个保障等级。这些等级包含业界认可的最佳实践,形成四个逐级提升保障的等级。
Tekton 可实现 SLSA Level 2 合规。更多信息请参见 使用 Tekton 和 Tekton Chains 达到 SLSA Level 2
签名
签名是对来源进行加密签名以确保其完整性和真实性的过程。Tekton Chains 支持多种签名方法:
- x509:使用标准 x509 证书和私钥
- Cosign:使用 Sigstore 的 Cosign 工具进行签名
- KMS:使用云提供商的密钥管理服务
- Keyless:使用 Fulcio 证书机构的临时密钥
镜像证明
镜像证明用于存储和验证与镜像相关的元数据信息。它提供更丰富的供应链安全信息,例如:
SLSA 来源
SLSA 来源 是包含可验证软件工件信息的元数据,描述了软件如何构建、使用了哪些源代码以及由谁构建。在 Tekton Chains 中,来源通过加密签名确保其完整性和真实性。
Tekton Chains 中有两种来源类型:
- 任务级来源:捕获特定 TaskRun 执行的详细信息
- 流水线级来源:捕获整个 PipelineRun 执行,包括所有子 TaskRun
SBOM(软件物料清单)
SBOM 是软件的嵌套清单,列出组成软件组件的“成分”,包括:
- 软件组件
- 组件版本
- 许可证信息
- 依赖关系
SBOM 可采用多种格式,例如:
漏洞扫描结果
Cosign 漏洞扫描结果 记录软件构建过程的安全评估,包括:
- 扫描器信息(名称、版本)
- 漏洞数据库信息
- 发现的漏洞列表及其严重程度
- 修复建议
自定义元数据
可根据需要添加自定义元数据以支持特定的安全需求。
例如,grype 可以生成漏洞扫描结果,这些结果可以作为自定义类型上传到镜像仓库。
证明验证
验证机制高度灵活,可自定义以验证证明中存在的任何元数据。这意味着证明中存储的任何信息都可以作为验证标准,使组织能够根据其具体需求实施精确的安全控制。
证明验证的灵活性通过多种验证方法体现:
-
Kyverno JMESPath 验证
- 使用 JMESPath 语法进行 JSON 查询和验证
-
Rego 策略验证
- 利用 Open Policy Agent (OPA) 实现复杂策略执行
- 支持声明式策略规则和自定义验证逻辑
- 示例:验证构建者信息和构建环境
-
CUE 验证
- 提供类型系统和约束系统进行验证
- 支持模式验证和数据一致性检查
- 支持复杂数据结构验证
工件
Tekton Chains 中的工件指构建过程的输入和输出:
- 输入工件:影响构建过程的资源,如源代码仓库和依赖项
- 输出工件:构建过程产生的资源,如容器镜像
类型提示
类型提示是 Tekton Chains 用于理解 TaskRun 或 PipelineRun 的输入和输出工件的机制。类型提示是遵循特定格式的特殊命名参数或结果:
- Git 输入:
CHAINS-GIT_URL和CHAINS-GIT_COMMIT - 通用输入:带有后缀
ARTIFACT_INPUTS的参数或结果 - 镜像输出:
IMAGES或带有后缀IMAGE_URL和IMAGE_DIGEST的参数/结果 - 通用输出:带有后缀
ARTIFACT_OUTPUTS的参数或结果
存储后端
存储后端是 Tekton Chains 存储生成的来源和签名的位置。支持的后端包括:
- Tekton:作为 TaskRun/PipelineRun 的注解存储
- OCI:与容器镜像一起存储在 OCI 注册表中
- GCS:存储在 Google Cloud Storage
- DocDB:存储在文档数据库中
- Grafeas:存储在 Grafeas/Container Analysis 中
控制器
Tekton Chains 控制器是核心组件,负责观察 TaskRun 和 PipelineRun 的执行,捕获相关信息,并生成、签名和存储来源。它作为 Kubernetes 部署运行在 tekton-pipelines 命名空间中。