许可证合规性验证
在 ACP (Alauda Container Platform) 中,你可以在 Tekton Pipeline 中使用 trivy 或 syft task 生成镜像的 SBOM。
SBOM 包含镜像中每个组件的许可证信息。 我们可以使用 Kyverno policies 拒绝包含特定许可证的镜像。
由于 SBOM 已在 Base Image and SBOM Verification 中为镜像生成过,这里我们不会再创建 pipeline,而是直接使用现有镜像来验证该能力。
本章节基于 Base Image and SBOM Verification,仅增加了用于校验镜像许可证信息的逻辑。
目录
功能概述使用场景前提条件流程概览分步说明步骤 1:验证镜像的许可证信息步骤 1.1:创建用于验证基础镜像信息的 Kyverno policy步骤 1.2:验证 policy步骤 2:(可选)验证 Image Check CVE-2022-42889步骤 3:清理资源预期结果参考资料功能概述
该方法与 Base Image and SBOM Verification 类似,只是更改 kyverno 规则以验证许可证合规性。
- 配置 Kyverno 规则以验证 SBOM。
- 使用镜像创建 Pod 来验证许可证合规性。
使用场景
以下场景需要参考本文档中的指导:
- 在 Kubernetes 集群中使用 Kyverno 实现许可证合规性验证
- 强制执行安全策略,阻止包含特定许可证(例如 GPL)的镜像
- 在 CI/CD pipelines 中设置自动化许可证验证
- 确保生产环境中的许可证合规性
- 通过验证容器镜像的组件许可证来实现供应链安全控制
前提条件
流程概览
分步说明
步骤 1:验证镜像的许可证信息
步骤 1.1:创建用于验证基础镜像信息的 Kyverno policy
此步骤需要集群管理员权限。
有关 Kyverno ClusterPolicy 的更多详细信息,请参考 Kyverno ClusterPolicy
policy 如下:
YAML 字段说明
- 该 policy 与 Image Signature Verification 中的 policy 基本一致
spec.rules[0].verifyImages[].attestations[0].conditionstype:cyclonedx SBOM attestation 类型为https://cyclonedx.org/bomattestors:与上文相同。conditions:需要验证的条件。any:满足任一条件即可。key: "{{ components[].licenses[].license.id }}":镜像包含不允许的 GPL 许可证。key: "{{ components[].licenses[].license.name }}":镜像包含不允许的 Expat 许可证。
将 policy 保存为名为 kyverno.verify-component-licenses.yaml 的 yaml 文件,并执行:
步骤 1.2:验证 policy
在定义了 policy 的 policy namespace 中,创建一个 Pod 来验证 policy。
使用已构建的镜像创建 Pod。
如果你的镜像包含 GPL 许可证,则 Pod 创建会失败。
你会收到如下输出:
将 ClusterPolicy 中的许可证限制改为允许 GPL 许可证。
然后创建一个 Pod 来验证该 policy。
Pod 将会成功创建。
步骤 2:(可选)验证 Image Check CVE-2022-42889
- 如果你希望在 policy 中添加更多条件,可以继续阅读以下内容。
- 这是一个简单示例,你可以使用相同的方法检查其他漏洞。
CVE-2022-42889 是 Apache Commons Text 库中的一个严重漏洞,可能导致任意代码执行,影响版本为 1.5 到 1.9。可以通过在 SBOM 中识别版本在受影响范围内的 "commons-text" 包来检测受影响的组件。此 policy 会检查 imageReferences 下指定镜像的、CycloneDX 格式的已验证 SBOM,如果其中包含 commons-text 包的 1.5-1.9 版本,则拒绝该镜像。
我们只需要在 ClusterPolicy 中添加一个条件来检查镜像中是否包含 commons-text 包。
这里不再演示,有兴趣的读者可以自行尝试。
步骤 3:清理资源
删除前面步骤中创建的 Pods。
删除 policy。
预期结果
完成本指南后:
- 你已经使用 Kyverno 建立了可工作的许可证合规性验证方案
- 你的容器镜像会在其 attestations 中自动包含 SBOM 信息
- 只有包含可接受许可证的镜像才能在指定 namespace 中部署
- 不符合规范的镜像会被 Kyverno policies 自动阻止
- 你已经通过验证容器镜像中组件的许可证信息,实现了基础的供应链安全控制
本指南为在 CI/CD pipelines 中实现许可证合规性验证提供了基础。在生产环境中,你应该:
- 配置适当的 namespace 隔离和访问控制
- 为签名密钥实施安全的密钥管理
- 为 policy 违规设置监控和告警
- 根据许可证需求定期更新安全 policy