理解 Tekton Chains

Tekton Chains 是 Tekton 生态系统内一个强大的安全组件,它通过生成、签名和存储与使用 Tekton Pipelines 构建的工件相关的来源信息,帮助保护您的软件供应链。本文档提供了关于 Tekton Chains 如何工作及其关键组件的深入解释。

术语

术语描述
来源描述工件如何产生的元数据,包括构建过程、输入和环境
SLSA软件工件供应链级别 - 一个用于软件供应链完整性的安全框架
证明关于软件工件的经过认证的元数据,遵循 in-toto 证明格式
签名验证来源数据的真实性和完整性的加密证明
类型提示特殊命名的结果/参数,帮助 Tekton Chains 理解输入和输出
存储后端Tekton Chains 存储来源和签名的系统

为什么需要 Tekton Chains

软件供应链安全挑战

在传统的软件开发和交付管道中,确保工件在整个供应链中的完整性和安全性面临重大挑战:

  • 缺乏可追溯性:没有适当的来源信息,很难验证工件的来源和构建方式
  • 篡改风险:工件在各个阶段可能被修改而未被检测到
  • 验证困难:工件的使用者没有可靠的方式验证其真实性
  • 合规挑战:组织在满足日益增加的软件供应链安全监管要求方面遇到困难

这些挑战导致了高调的供应链攻击事件,如 SolarWinds,其中恶意代码被插入到构建过程中,影响到成千上万的组织。

Tekton Chains 的解决方案

Tekton Chains 通过以下方式应对这些挑战:

  1. 自动来源生成:捕获关于构建过程的详细元数据
  2. 加密签名:确保来源数据的完整性和真实性
  3. 标准化格式:支持行业标准格式,如 SLSA 来源
  4. 灵活存储:提供多种选项用于存储和检索来源
  5. 与现有工具集成:与 Sigstore、Cosign 和云 KMS 服务等工具协同工作

通过实施 Tekton Chains,组织可以实现更高水平的供应链安全性,并满足 SLSA 合规要求。

优势

  • 自动化:自动生成和签名来源,无需手动干预
  • 标准化:支持行业标准格式,如 SLSA 和 in-toto
  • 灵活性:与各种签名机制和存储后端兼容
  • 集成:与 Tekton Pipelines 生态系统无缝集成
  • 透明性:提供工件生产过程的清晰可见性
  • 合规性:帮助满足软件供应链安全的监管和行业要求

场景

场景 1:保护容器镜像构建

一个开发团队使用 Tekton Pipelines 来构建容器镜像。通过实施 Tekton Chains,他们可以自动生成每个镜像的签名来源,其中包括有关源代码、构建环境和构建步骤的详细信息。这些来源与镜像一起存储在他们的容器注册表中,使下游消费者能够验证镜像的真实性和构建过程。

场景 2:遵循安全要求合规

一个组织需要遵循安全要求,这要求对所有部署的软件实现可追溯性和完整性验证。通过使用 Tekton Chains,他们可以为所有工件生成 SLSA 来源,提供每个工件的构建过程及其来源的加密证明。这有助于他们满足审计要求,并在保护其供应链的尽职调查中展示其努力。

场景 3:检测供应链攻击

一个安全团队希望确保构建过程没有未经授权的更改。通过 Tekton Chains,任何试图篡改构建过程的行为都会导致来源不符合预期值。通过在其部署过程中实施验证步骤,他们可以自动检测和阻止具有可疑来源的工件的部署。

约束与限制

  • Kubernetes 依赖性:需要一个安装了 Tekton Pipelines 的 Kubernetes 集群
  • 配置复杂性:需要适当的类型提示配置以确保准确的来源
  • 密钥管理:安全管理签名密钥是必不可少的
  • 存储要求:需要额外的存储用于来源和签名
  • 性能影响:签名和存储来源会增加构建过程的一定开销

原则

Tekton Chains 的工作原理

Tekton Chains 通过一个控制器在 Kubernetes 集群中观察 TaskRun 和 PipelineRun 资源。工作流程遵循以下步骤:

  1. 观察:控制器观察已完成的 TaskRuns 和 PipelineRuns
  2. 快照:当一个运行完成时,Chains 会对其状态进行快照
  3. 格式化:Chains 生成以配置格式(如 SLSA)表示的来源
  4. 签名:来源使用配置的方法进行加密签名
  5. 存储:来源和签名都存储在配置的后端中

Tekton Chains 工作流程

来源生成

Tekton Chains 使用类型提示来理解构建过程的输入和输出。这些信息然后被用来以指定格式生成来源:

  1. 输入收集:Chains 通过类型提示识别输入工件
  2. 构建过程捕获:记录关于构建环境和步骤的详细信息
  3. 输出识别:通过类型提示识别输出工件
  4. 来源组装:将所有信息组装为标准化格式

签名过程

Tekton Chains 支持多种签名方法,以适应不同的安全要求:

  1. 密钥检索:从配置来源检索签名密钥
  2. 有效负载准备:准备用于签名的来源数据
  3. 签名生成:生成加密签名
  4. 验证数据:包括验证所需的附加数据

配置示例

基本 SLSA v1.0 配置

apiVersion: v1
kind: ConfigMap
metadata:
  name: chains-config
  namespace: tekton-chains
data:
  artifacts.taskrun.format: "slsa/v2alpha3"
  artifacts.taskrun.storage: "tekton,oci"
  artifacts.taskrun.signer: "x509"
  artifacts.pipelinerun.format: "slsa/v2alpha3"
  artifacts.pipelinerun.storage: "tekton"
  artifacts.pipelinerun.signer: "x509"
  artifacts.oci.format: "simplesigning"
  artifacts.oci.storage: "oci"
  artifacts.oci.signer: "x509"

Git 源的类型提示示例

apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
  name: build-from-source
spec:
  taskSpec:
    results:
      - name: CHAINS-GIT_URL
        description: Git 仓库 URL
      - name: CHAINS-GIT_COMMIT
        description: Git 提交 SHA
      - name: IMAGE_URL
        description: 构建镜像的 URL
      - name: IMAGE_DIGEST
        description: 构建镜像的摘要
    steps:
      # 任务实现

重要参数

存储配置

存储后端决定来源和签名存储的位置。这对于确保来源在需要时可用于验证至关重要。

用例

  • Tekton 存储:用于调试和内部验证
  • OCI 存储:在容器镜像旁边存储来源的理想选择
  • GCS/DocDB 存储:适合集中存储和管理

配置示例

artifacts.taskrun.storage: "tekton,oci"
artifacts.pipelinerun.storage: "tekton"
artifacts.oci.storage: "oci"

签名配置

签名配置决定了如何对来源进行加密签名,这对验证其真实性至关重要。

用例

  • x509:基于标准证书的签名
  • KMS:增强安全性的云密钥管理
  • 无密钥:使用临时密钥进行零信任签名

配置示例

artifacts.taskrun.signer: "x509"
artifacts.pipelinerun.signer: "x509"
artifacts.oci.signer: "x509"

参考