(可选)无密钥签名验证
TIP
- 如果你对无密钥签名验证感兴趣,可以继续阅读以下内容。
- 本章内容需要能够访问公网。
- 但如果你已经部署了私有 Rekor 服务,也可以使用它们。
虽然 ACP(Alauda Container Platform)目前不提供部署私有 Rekor 实例的能力,但它支持与 Rekor 服务集成。
这里我们以集成公共 Rekor 为例,介绍如何使用这些服务。 如果你已经部署了私有 Rekor 服务,请参考相关文档进行配置。
目录
功能概述使用场景前提条件流程概览分步说明步骤 1-3:基础设置步骤 4:重新运行 pipeline 以生成镜像步骤 5:获取 rekor 日志索引步骤 6:通过 curl 获取 rekor 签名步骤 7:通过 rekor-cli 获取 rekor 签名步骤 8:在 Kyverno 中验证 rekor预期结果参考资料功能概述
此方法通过透明日志增强安全性,从而消除密钥管理的需求:
- 配置 Tekton Chains 使用无密钥签名。
- 使用
buildahTekton Task 构建镜像。 - 配置 Kyverno 规则以验证无密钥签名。
- 使用该镜像创建 Pod 来验证无密钥签名。
使用场景
以下场景需要参考本文档中的指导:
- 在 Kubernetes 集群中为容器镜像实现无密钥签名和验证
- 强制执行安全策略,在不管理签名密钥的情况下验证镜像签名
- 在 CI/CD 流水线中设置自动化透明日志验证
- 通过 Rekor 透明日志确保镜像来源和完整性
- 通过对公共 Rekor 服务验证镜像签名,实现供应链安全控制
前提条件
- 已安装 Tekton Pipelines、Tekton Chains 和 Kyverno 的 Kubernetes 集群
- 已启用镜像推送的 registry
- 已安装并配置好可访问集群的
kubectlCLI - 已安装
cosignCLI 工具 - 已安装
jqCLI 工具 - 已安装
curl - 已安装 rekor-cli
- 用于验证并与存储在 Rekor 透明日志服务器中的 attestations 进行交互。
流程概览
分步说明
步骤 1-3:基础设置
这些步骤与 快速开始:已签名来源证明 指南完全相同。请按照该指南中的说明完成以下内容:
-
配置 Tekton Chains 的透明日志
TIP
- 如果你使用私有 Rekor 服务,可以将
transparency.url设置为你的 Rekor server 的 URL。transparency.url: "<https://rekor.sigstore.dev>"
有关该配置的更多详细信息,请参阅 Transparency Log
步骤 4:重新运行 pipeline 以生成镜像
TIP
- 由于我们修改了透明日志配置,需要在 快速开始:已签名来源证明 中触发一次新的 pipeline 运行。
- 这样 Tekton Chains 就会为新的镜像和 PipelineRun 生成透明日志条目。
步骤 5:获取 rekor 日志索引
从 PipelineRun 的注解中获取 rekor 日志索引。
步骤 6:通过 curl 获取 rekor 签名
如果你需要查看 rekor 签名的内容,可以执行以下命令:
此内容与镜像中的 attestation 相同,用于验证镜像内容的真实性和完整性。 可以直接从 Rekor 获取 attestation 信息,而无需镜像 registry 的凭据,这使得验证过程更加便捷且易于访问。
步骤 7:通过 rekor-cli 获取 rekor 签名
根据日志索引获取签名
根据镜像 digest 获取签名
步骤 8:在 Kyverno 中验证 rekor
修改 ClusterPolicy 的 keys 部分以添加 rekor 验证。
YAML 字段说明
rekor:rekor 验证配置。ignoreTlog:是否忽略透明日志。- 如果为
false,将验证 rekor server。
- 如果为
url:rekor server 的 URL。- 如果未设置,将使用默认的 rekor server
https://rekor.sigstore.dev。
- 如果未设置,将使用默认的 rekor server
pubkey:签名者的公钥。- 如果未设置,将从 rekor server 获取公钥。
- 如果 rekor server 是私有的,你需要从 rekor server 获取公钥。
curl <https://rekor.sigstore.dev>/api/v1/log/publicKey
如果你的镜像未签名,Pod 将被阻止。
预期结果
完成本指南后:
- 你已经拥有一个可工作的 Tekton Chains 无密钥签名和 Rekor 集成环境
- 你的容器镜像会自动签名,并且其签名会存储在 Rekor 透明日志中
- 无需管理签名密钥即可验证镜像签名
- 只有在 Rekor 中具有有效签名的镜像才能部署到指定 namespace
- 你已经通过 Rekor 验证镜像签名,实现了无密钥供应链安全控制
本指南为在 CI/CD 流水线中实现无密钥签名和验证提供了基础。在生产环境中,你应该:
- 配置适当的 namespace 隔离和访问控制
- 为签名验证失败设置监控和告警
- 定期审查并更新安全策略
- 考虑部署私有 Rekor 实例以增强安全性