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