Signed Provenance
本指南帮助新用户快速设置 Tekton Chains,通过为 Tekton PipelineRuns 生成和验证 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 Devops Pipelines Operator 时,Tekton Chains 默认安装在
tekton-pipelines命名空间中 - 签名密钥应安全管理;在生产环境中,建议使用密钥管理系统(KMS)
- 本指南采用简化流程,在流水线内联生成 Containerfile
- 生产环境中,应使用合适的源代码管理和版本控制
前提条件
- 已安装 Tekton Pipelines 和 Tekton Chains 的 Kubernetes 集群
- 支持镜像推送的镜像仓库
- 已安装并配置好访问集群的
kubectlCLI - 已安装
cosignCLI 工具 - 已安装
jqCLI 工具
流程概览
详细步骤说明
步骤 1:生成签名密钥
更多详情请参阅 Signing Key Configuration
Tekton Chains 使用加密密钥对产物进行签名。默认情况下,它会在 Chains 命名空间中查找名为 signing-secrets 的 secret。
-
如果尚未安装,请安装 cosign
-
生成密钥对并存储为 Kubernetes secret:
TIP该密码将存储在
tekton-pipelines命名空间中的名为signing-secrets的 Kubernetes secret 中。 -
验证 secret 是否创建成功:
步骤 2:设置认证
更多详情请参阅 Authentication for Chains
配置镜像推送的仓库凭据:
-
创建凭据 secret:
-
设置
config.json键: -
修改服务账户以使用该 secret:
步骤 3:配置 Tekton Chains
更多详情请参阅 Chains Configuration
配置 Tekton Chains 以 OCI 格式存储产物:
步骤 4:创建示例流水线
以下是一个 Pipeline 资源,用于构建镜像并生成 SLSA Provenance 证明。
生产环境中,建议:
- 使用
git-clone任务从代码仓库拉取源代码 - 使用源代码中的 Containerfile 构建镜像
- 该方式确保版本控制的正确性,并保持代码与流水线配置的分离
YAML 字段说明
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 Type Hinting
workspaces:流水线工作空间source:源代码工作空间registryconfig:分发仓库配置工作空间
需要调整配置
params:generate-containerfiledefault:调整基础镜像地址
image:default:构建的目标镜像地址
保存为 chains.demo-1.pipeline.yaml 文件并应用:
步骤 5:运行示例流水线
以下是一个 PipelineRun 资源,用于运行该流水线。
YAML 字段说明
pipelineRef:要运行的流水线name:流水线名称
taskRunTemplate:任务运行模板serviceAccountName:流水线使用的服务账户
workspaces:流水线工作空间registryconfig:分发仓库配置工作空间source:源代码工作空间
需要调整配置
taskRunTemplate:serviceAccountName:前一步准备的服务账户,详见 ServiceAccount Configuration
workspaces:registryconfig:secret.secretName:前一步准备的仓库凭据,详见 Creating Registry Credentials
source:volumeClaimTemplate.spec.storageClassName:卷声明模板的存储类名称
保存为 chains.demo-1.pipelinerun.yaml 文件并应用:
等待 PipelineRun 完成:
步骤 6:等待 PipelineRun 被签名
等待 PipelineRun 带有 chains.tekton.dev/signed: "true" 注解。
当 PipelineRun 带有 chains.tekton.dev/signed: "true" 注解时,表示镜像已被签名。
步骤 7:从 PipelineRun 获取镜像信息
该镜像将用于验证签名。
步骤 8:验证镜像和证明
-
获取签名公钥
如果没有权限,可以联系管理员获取公钥。
-
验证签名
成功时,输出如下:
-
验证 SLSA provenance 证明
成功时,输出如下:
-
使用 jq 提取负载:
证明负载
预期结果
完成本指南后:
- 您已成功搭建 Tekton Chains 并拥有签名密钥
- PipelineRuns 完成后会自动签名,镜像带有 SLSA Provenance 证明
- 您可以验证签名和证明,确保构建的完整性
本指南为在 CI/CD 流水线中实现供应链安全提供了基础。在生产环境中,您应:
- 使用合适的源代码管理和版本控制
- 采用云端 KMS 实现安全密钥管理
- 在部署流程中设置自动验证
- 配置合理的访问控制和安全策略
- 定期轮换签名密钥并更新安全配置