签名的来源证明
本指南帮助新用户快速设置 Tekton Chains,通过为 Tekton PipelineRun 生成和验证 SLSA Provenance 来保护其 CI/CD 流水线。
目录
简介使用场景预计阅读时间重要说明前提条件流程概述分步说明步骤 1:生成签名密钥步骤 2:设置身份验证步骤 3:配置 Tekton Chains步骤 4:创建示例流水线步骤 5:运行示例流水线步骤 6:等待 PipelineRun 完成签名步骤 7:从 PipelineRun 获取镜像步骤 8:验证镜像和证明预期结果参考简介
使用场景
Tekton Chains 通过自动为构建产物生成 SLSA Provenance,帮助您保护软件供应链。本指南演示如何设置 Tekton Chains、生成签名密钥、运行示例流水线,以及验证其 SLSA Provenance。
预计阅读时间
15-20 分钟
重要说明
- 使用 Alauda Container Platform Pipelines Operator 时,Tekton Chains 默认安装在
tekton-pipelines命名空间中 - 应安全管理签名密钥;在生产环境中,请考虑使用密钥管理系统(KMS)
- 本指南通过在流水线中内联生成 Containerfile,采用了简化的工作流
- 在生产环境中,应使用适当的源代码管理和版本控制
前提条件
- 已安装 Tekton Pipelines 和 Tekton Chains 的 Kubernetes 集群
- 已启用镜像推送功能的镜像仓库
- 已安装并配置为访问集群的
kubectlCLI - 已安装
cosignCLI 工具 - 已安装
jqCLI 工具
流程概述
分步说明
步骤 1:生成签名密钥
更多详情,请参阅签名密钥配置
Tekton Chains 使用加密密钥对构建产物进行签名。默认情况下,它会在 Chains 命名空间中查找名为 signing-secrets 的 secret。
-
如果尚未安装,请安装 cosign
-
生成密钥对并将其存储为 Kubernetes secret:
TIP此密码将存储在
tekton-pipelines命名空间中名为signing-secrets的 Kubernetes secret 中。 -
验证 secret 是否已创建:
步骤 2:设置身份验证
更多详情,请参阅 Chains 身份验证
配置用于推送镜像的镜像仓库凭据:
-
使用凭据创建 secret:
-
设置
config.json密钥: -
修补 service account 以使用该 secret:
步骤 3:配置 Tekton Chains
更多详情,请参阅 Chains 配置
配置 Tekton Chains,以 OCI 格式存储构建产物:
步骤 4:创建示例流水线
这是一个 Pipeline 资源,用于构建镜像并生成 SLSA Provenance 证明。
在生产环境中,您应:
- 使用
git-clone任务从代码仓库获取源代码 - 使用源代码中现有的 Containerfile 构建镜像
- 此方法可确保正确的版本控制,并保持代码与流水线配置之间的分离
Explanation of YAML fields
params:流水线的参数。generate-containerfile:用于生成构建镜像所需 Containerfile 的脚本。image:构建的目标镜像地址。
tasks:流水线的任务。generate-containerfile:用于生成构建镜像所需 Containerfile 的任务。build-image:构建镜像并将其推送到镜像仓库的任务。params.TLS_VERIFY:是否验证镜像仓库的 TLS 证书。
results:流水线的结果。first_image_ARTIFACT_OUTPUTS:第一个镜像构建产物输出的结果。digest:镜像的摘要。uri:镜像的 URI。
- 此格式符合 Tekton Chains 的要求,更多详情请参阅上文的 Tekton Chains 类型提示。
workspaces:流水线的工作区。source:源代码工作区。registryconfig:分发镜像仓库配置工作区。
需要调整的配置
params:generate-containerfiledefault:调整源镜像地址。
image:default:构建的目标镜像地址。
保存到名为 chains.demo-1.pipeline.yaml 的 yaml 文件中,并使用以下命令应用:
步骤 5:运行示例流水线
这是一个 PipelineRun 资源,用于运行流水线。
Explanation of YAML fields
pipelineRef:要运行的流水线。name:流水线的名称。
taskRunTemplate:任务运行模板。serviceAccountName:流水线使用的 service account。
workspaces:流水线的工作区。registryconfig:分发镜像仓库配置工作区。source:源代码工作区。
需要调整的配置
taskRunTemplate:serviceAccountName:上一步准备的 service account ServiceAccount 配置。
workspaces:registryconfig:secret.secretName:上一步准备的镜像仓库 secret 创建镜像仓库凭据。
source:volumeClaimTemplate.spec.storageClassName:卷声明模板的存储类名称。
保存到名为 chains.demo-1.pipelinerun.yaml 的 yaml 文件中,并使用以下命令应用:
等待 PipelineRun 完成。
步骤 6:等待 PipelineRun 完成签名
等待 PipelineRun 包含 chains.tekton.dev/signed: "true" 注解。
PipelineRun 包含 chains.tekton.dev/signed: "true" 注解后,即表示镜像已完成签名。
步骤 7:从 PipelineRun 获取镜像
此镜像将用于验证签名。
步骤 8:验证镜像和证明
-
获取签名公钥
如果您没有权限,可以请求管理员获取公钥。
-
验证签名
如果成功,您将看到以下输出:
-
验证 SLSA Provenance 证明
如果成功,您将看到以下输出:
-
使用 jq 提取负载:
Attestation Payload
预期结果
完成本指南后:
- 您将拥有一个配置了签名密钥且可正常运行的 Tekton Chains
- 您的 PipelineRuns 完成后会自动进行签名,并且镜像会包含 SLSA Provenance 证明
- 您可以验证签名和证明,以确保构建的完整性
本指南为在 CI/CD 管道中实施供应链安全奠定了基础。在生产环境中,您应该:
- 使用适当的源代码管理和版本控制
- 使用云 KMS 实施安全的密钥管理
- 在部署流程中设置自动验证
- 配置适当的访问控制和安全策略
- 定期轮换签名密钥并更新安全配置