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