核心概念

目录

供应链安全

供应链安全指的是保护从开发到部署的软件开发生命周期的完整性、安全性和可靠性。Tekton Chains 旨在通过提供机制来验证 CI/CD 流水线生成的工件未被篡改且可信,从而解决供应链安全问题。

SLSA 框架

SLSA(Supply-chain Levels for Software Artifacts)是一种安全框架,提供防止篡改、提升完整性以及保护包和基础设施的标准和控制清单。Tekton Chains 支持多种 SLSA 来源格式:

  • SLSA v0.2:通过 slsa/v1in-toto 格式支持
  • SLSA v1.0:通过 slsa/v2alpha3slsa/v2alpha4 格式支持

作为该框架的一部分,SLSA 设有多个保障等级。这些等级包含业界认可的最佳实践,形成四个逐级提升保障的等级。

安全等级

路径/等级要求关注点
Build L0(无)(不适用)
Build L1显示包构建方式的来源错误、文档
Build L2签名的来源,由托管构建平台生成构建后篡改
Build L3加固的构建平台构建期间篡改

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_URLCHAINS-GIT_COMMIT
  • 通用输入:带有后缀 ARTIFACT_INPUTS 的参数或结果
  • 镜像输出:IMAGES 或带有后缀 IMAGE_URLIMAGE_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 命名空间中。