1.5. 创建和验证任务运行签名而无需任何其他身份验证
要验证使用 Tekton 链与任何其他身份验证一起运行的任务的签名,请执行以下任务:
- 创建加密的 x509 密钥对,并将它保存为 Kubernetes secret。
- 配置 Tekton Chains 后端存储。
- 创建任务运行,为它签名并将签名和有效负载存储为任务运行自身时的注解。
- 从已签名任务运行中检索签名和有效负载。
- 验证任务运行的签名。
先决条件
确保在集群中安装了以下组件:
- Red Hat OpenShift Pipelines Operator
- Tekton Chains
- Cosign
流程
- 创建加密的 x509 密钥对,并将它保存为 Kubernetes secret。有关创建密钥对并将其保存为 secret 的更多信息,请参阅 "Signing secrets in Tekton Chains"。
在 Tekton Chains 配置中,禁用 OCI 存储,并将任务运行存储和格式设置为
tekton
。在TektonConfig
自定义资源中设置以下值:apiVersion: operator.tekton.dev/v1alpha1 kind: TektonConfig metadata: name: config spec: # ... chain: artifacts.oci.storage: "" artifacts.taskrun.format: tekton artifacts.taskrun.storage: tekton # ...
有关使用
TektonConfig
自定义资源配置 Tekton 链的更多信息,请参阅"配置 Tekton 链"。要重启 Tekton Chains 控制器以确保应用了修改后的配置,请输入以下命令:
$ oc delete po -n openshift-pipelines -l app=tekton-chains-controller
输入以下命令来创建任务运行:
$ oc create -f https://raw.githubusercontent.com/tektoncd/chains/main/examples/taskruns/task-output-image.yaml 1
- 1
- 将示例 URI 替换为指向任务运行的 URI 或文件路径。
输出示例
taskrun.tekton.dev/build-push-run-output-image-qbjvh created
输入以下命令来检查步骤的状态。等待进程完成。
$ tkn tr describe --last
输出示例
[...truncated output...] NAME STATUS ∙ create-dir-builtimage-9467f Completed ∙ git-source-sourcerepo-p2sk8 Completed ∙ build-and-push Completed ∙ echo Completed ∙ image-digest-exporter-xlkn7 Completed
要从存储为
base64
编码注解的对象检索签名,请输入以下命令:$ tkn tr describe --last -o jsonpath="{.metadata.annotations.chains\.tekton\.dev/signature-taskrun-$TASKRUN_UID}" | base64 -d > sig
$ export TASKRUN_UID=$(tkn tr describe --last -o jsonpath='{.metadata.uid}')
- 要使用您创建的公钥验证签名,请输入以下命令:
$ cosign verify-blob-attestation --insecure-ignore-tlog --key path/to/cosign.pub --signature sig --type slsaprovenance --check-claims=false /dev/null 1
- 1
- 将
path/to/cosign.pub
替换为公钥文件的路径名。输出示例
Verified OK