1.6. 使用 Tekton 链来签名和验证镜像并证明
集群管理员可以通过执行以下任务来使用 Tekton 链来签名和验证镜像和验证镜像:
- 创建加密的 x509 密钥对,并将它保存为 Kubernetes secret。
- 为 OCI registry 设置身份验证,以在测试过程中存储镜像、镜像签名和签名的镜像。
- 配置 Tekton 链以生成和签署认可。
- 在任务运行中,使用 Kaniko 创建镜像。
- 验证已签名的镜像及已签名证明。
先决条件
确保在集群中安装了以下内容:
流程
创建加密的 x509 密钥对,并将它保存为 Kubernetes secret:
$ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
提示时提供密码。Cosign 将生成的私钥作为 openshift-pipelines 命名空间中的
signing-secrets
Kubernetes secret 的一部分存储在openshift-pipelines
命名空间中,并将公钥写入cosign.pub
本地文件。为镜像 registry 配置身份验证。
- 要将 Tekton Chains 控制器配置为将签名推送到 OCI registry,请使用与任务运行服务帐户关联的凭证。如需更多信息,请参阅"授权到 OCI registry"部分。
要为构建并推送到 registry 的 Kaniko 任务配置身份验证,请创建一个包含所需凭证的 docker
config.json
文件的 Kubernetes secret。$ oc create secret generic <docker_config_secret_name> \ 1 --from-file <path_to_config.json> 2
通过在
chains-config
对象中设置artifacts.taskrun.format
、artifacts.taskrun.storage
和transparency.enabled
参数来配置 Tekton 链 :$ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.format": "in-toto"}}' $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.storage": "oci"}}' $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"transparency.enabled": "true"}}'
启动 Kaniko 任务。
将 Kaniko 任务应用到集群。
$ oc apply -f examples/kaniko/kaniko.yaml 1
- 1
- 使用 Kaniko 任务的 URI 或文件路径替换。
设置适当的环境变量。
$ export REGISTRY=<url_of_registry> 1 $ export DOCKERCONFIG_SECRET_NAME=<name_of_the_secret_in_docker_config_json> 2
启动 Kaniko 任务。
$ tkn task start --param IMAGE=$REGISTRY/kaniko-chains --use-param-defaults --workspace name=source,emptyDir="" --workspace name=dockerconfig,secret=$DOCKERCONFIG_SECRET_NAME kaniko-chains
观察此任务的日志,直到所有步骤都完成。身份验证成功后,最终镜像将推送到
$REGISTRY/kaniko-chains
。
等待一分钟,以允许 Tekton 链生成证据并对其进行签名,然后在任务运行时检查
chains.tekton.dev/signed=true
注解的可用性。$ oc get tr <task_run_name> \ 1 -o json | jq -r .metadata.annotations { "chains.tekton.dev/signed": "true", ... }
- 1
- 使用任务运行的名称替换。
验证镜像和 attestation。
$ cosign verify --key cosign.pub $REGISTRY/kaniko-chains $ cosign verify-attestation --key cosign.pub $REGISTRY/kaniko-chains
在 Rekor 中找到镜像的验证情况。
- 获取 $REGISTRY/kaniko-chains 镜像摘要。您可以搜索任务运行或拉取镜像以提取摘要。
搜索 Rekor 以查找与镜像
sha256
摘要匹配的所有条目。$ rekor-cli search --sha <image_digest> 1 <uuid_1> 2 <uuid_2> 3 ...
搜索结果显示匹配条目的 UUID。其中其中一个 UUID 包含 attestation。
检查 attestation。
$ rekor-cli get --uuid <uuid> --format json | jq -r .Attestation | base64 --decode | jq