本指南帮助新用户快速设置 Tekton Chains,通过为 Tekton PipelineRuns 生成和验证 SLSA 证明,保障其 CI/CD 流水线的安全。
Tekton Chains 通过自动为构建产物生成 SLSA 证明,帮助您保障软件供应链安全。本指南演示如何设置 Tekton Chains、生成签名密钥、运行示例流水线并验证其 SLSA 证明。
15-20 分钟
tekton-pipelines
命名空间kubectl
CLIcosign
CLI 工具jq
CLI 工具步骤 | 操作 | 说明 |
---|---|---|
1 | 生成签名密钥 | 使用 cosign 创建用于签名产物的密钥对 |
2 | 设置认证 | 配置镜像推送的仓库凭据 |
3 | 配置 Tekton Chains | 设置 Chains 使用 OCI 存储并配置签名 |
4 | 创建示例流水线 | 创建包含必要任务和工作区的流水线定义 |
5 | 运行示例流水线 | 创建并运行配置正确的 PipelineRun |
6 | 等待签名完成 | 等待 PipelineRun 被 Chains 签名 |
7 | 获取镜像信息 | 从 PipelineRun 中提取镜像 URI 和摘要 |
8 | 验证签名 | 验证镜像签名和 SLSA 证明 |
更多详情请参阅 Signing Key Configuration
Tekton Chains 使用加密密钥对产物进行签名。默认情况下,它会在 Chains 命名空间中查找名为 signing-secrets
的 secret。
如果尚未安装,请安装 cosign
生成密钥对并以 Kubernetes secret 形式存储:
该密码将存储在 tekton-pipelines
命名空间中的名为 signing-secrets
的 Kubernetes secret 中。
验证 secret 是否创建成功:
更多详情请参阅 Authentication for Chains
配置镜像推送的仓库凭据:
创建凭据 secret:
设置 config.json
键:
修改服务账户以使用该 secret:
更多详情请参阅 Chains Configuration
配置 Tekton Chains 以 OCI 格式存储产物:
以下是一个 Pipeline 资源,用于构建镜像并生成 SLSA 证明。
生产环境中,您应当:
git-clone
任务从代码仓库拉取源代码params
:流水线参数。
generate-dockerfile
:用于生成 Dockerfile 的脚本。image
:构建的目标镜像地址。tasks
:流水线任务。
generate-dockerfile
:生成 Dockerfile 的任务。build-image
:构建并推送镜像的任务。
params.TLS_VERIFY
:是否验证仓库的 TLS 证书。results
:流水线结果。
first_image_ARTIFACT_OUTPUTS
:第一个镜像产物输出结果。
digest
:镜像摘要。uri
:镜像 URI。workspaces
:流水线工作区。
source
:源代码工作区。dockerconfig
:Docker 配置工作区。需要调整配置
params
:
generate-dockerfile
default
:调整基础镜像地址。image
:
default
:构建的目标镜像地址。保存为 chains.demo-1.pipeline.yaml
文件,并执行:
以下是一个 PipelineRun 资源,用于运行流水线。
pipelineRef
:要运行的流水线。
name
:流水线名称。taskRunTemplate
:任务运行模板。
serviceAccountName
:流水线使用的服务账户。workspaces
:流水线工作区。
dockerconfig
:Docker 配置工作区。source
:源代码工作区。需要调整配置
taskRunTemplate
:
serviceAccountName
:前一步准备的服务账户,详见 ServiceAccount Configuration。workspaces
:
dockerconfig
:
secret.secretName
:前一步创建的仓库凭据,详见 Creating Registry Credentials。source
:
volumeClaimTemplate.spec.storageClassName
:卷声明模板的存储类名称。保存为 chains.demo-1.pipelinerun.yaml
文件,并执行:
等待 PipelineRun 完成。
等待 PipelineRun 带有 chains.tekton.dev/signed: "true"
注解。
当 PipelineRun 带有 chains.tekton.dev/signed: "true"
注解时,表示镜像已被签名。
该镜像将用于验证签名。
获取签名公钥
如果您没有权限,可以联系管理员获取公钥。
验证签名
成功时,您将看到如下输出:
验证 SLSA 证明
成功时,您将看到如下输出:
使用 jq 提取负载:
完成本指南后:
本指南为在 CI/CD 流水线中实现供应链安全提供基础。生产环境中,您应当: