关于 Kubernetes 准入控制器
工件证明 使您能够为构建的软件创建不可伪造的来源和完整性保证。反过来,使用您软件的人员可以验证软件的构建位置和方式。
Kubernetes 准入控制器是管理 Kubernetes API 服务器行为的插件。它们通常用于在 Kubernetes 集群中实施安全策略和最佳实践。
使用开源的 Sigstore 策略控制器 项目,您可以将准入控制器添加到 Kubernetes 集群中,以强制执行工件证明。这样,您可以确保只有具有有效证明的工件才能部署。
要安装控制器,我们提供了两个 Helm Chart:一个用于部署 Sigstore 策略控制器,另一个用于加载 GitHub 信任根和默认策略。
关于信任根和策略
Sigstore 策略控制器主要通过信任根和策略进行配置,它们由自定义资源 TrustRoot
和 ClusterImagePolicy
表示。TrustRoot
表示用于验证声明的公钥材料的可信分发渠道。ClusterImagePolicy
表示用于对镜像上的声明进行强制执行的策略。
TrustRoot
也可能包含一个TUF 存储库根,使您的集群能够持续安全地接收其可信公钥材料的更新。如果未指定,ClusterImagePolicy
将默认使用开源 Sigstore 公共实例的密钥材料。在验证为私有存储库生成的声明时,ClusterImagePolicy
必须引用 GitHub TrustRoot
。
Kubernetes 准入控制器入门
要设置用于强制执行 GitHub 工件声明的准入控制器,您需要
部署 Sigstore 策略控制器
我们将 Sigstore 策略控制器打包为GitHub 分发的 Helm Chart。在开始之前,请确保您具备以下先决条件
首先,安装部署 Sigstore 策略控制器的 Helm Chart
helm upgrade policy-controller --install --atomic \ --create-namespace --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \ --version v0.10.0-github8
helm upgrade policy-controller --install --atomic \
--create-namespace --namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \
--version v0.10.0-github8
这会将策略控制器安装到 artifact-attestations
命名空间中。此时,尚未配置任何策略,它不会强制执行任何声明。
添加 GitHub TrustRoot
和 ClusterImagePolicy
部署策略控制器后,您需要将 GitHub TrustRoot
和 ClusterImagePolicy
添加到您的集群中。使用我们提供的 Helm Chart 执行此操作。确保将 MY-ORGANIZATION
替换为您的 GitHub 组织名称(例如,github
或 octocat-inc
)。
helm upgrade trust-policies --install --atomic \ --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \ --version v0.6.1 \ --set policy.enabled=true \ --set policy.organization=MY-ORGANIZATION
helm upgrade trust-policies --install --atomic \
--namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
--version v0.6.1 \
--set policy.enabled=true \
--set policy.organization=MY-ORGANIZATION
您现在已将 GitHub 信任根和工件声明策略安装到您的集群中。此策略将拒绝未源自您的 GitHub 组织内的工件。
在您的命名空间中启用策略
警告
除非您指定此策略应应用于哪些命名空间,否则不会强制执行此策略。
集群中的每个命名空间都可以独立强制执行策略。要在命名空间中启用强制执行,您可以向命名空间添加以下标签
metadata:
labels:
policy.sigstore.dev/include: "true"
添加标签后,GitHub 工件声明策略将在命名空间中强制执行。
或者,您可以运行
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
匹配镜像
默认情况下,使用 trust-policies
Helm Chart 安装的策略将在将镜像接纳到集群之前验证所有镜像的声明。如果您只想对一部分镜像强制执行声明,则可以使用 Helm 值 policy.images
和 policy.exemptImages
指定要匹配的镜像列表。这些值可以设置为与镜像名称匹配的 glob 模式列表。globbing 语法使用 Go filepath 语义,并添加 **
以匹配任何字符序列,包括斜杠。
例如,要对与模式 ghcr.io/MY-ORGANIZATION/*
匹配的镜像强制执行声明,并接纳没有有效声明的 busybox
,您可以运行
helm upgrade trust-policies --install --atomic \ --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \ --version v0.6.1 \ --set policy.enabled=true \ --set policy.organization=MY-ORGANIZATION \ --set-json 'policy.exemptImages=["index.docker.io/library/busybox**"]' \ --set-json 'policy.images=["ghcr.io/MY-ORGANIZATION/**"]'
helm upgrade trust-policies --install --atomic \
--namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
--version v0.6.1 \
--set policy.enabled=true \
--set policy.organization=MY-ORGANIZATION \
--set-json 'policy.exemptImages=["index.docker.io/library/busybox**"]' \
--set-json 'policy.images=["ghcr.io/MY-ORGANIZATION/**"]'
所有模式都必须使用完全限定名称,即使镜像源自 Docker Hub 也是如此。在此示例中,如果我们要排除 busybox
镜像,则必须提供包含域和双星号 glob 的完整名称以匹配所有镜像版本:index.docker.io/library/busybox**
。
请注意,您打算接纳的任何镜像都必须在 policy.images
列表中具有匹配的 glob 模式。如果镜像与任何模式都不匹配,则将被拒绝。此外,如果镜像同时匹配 policy.images
和 policy.exemptImages
,则将被拒绝。
高级用法
要查看您可以使用 Helm Chart 配置的完整选项集,您可以运行以下命令之一。对于策略控制器选项
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github8
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github8
对于信任策略选项
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.1
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.1
有关 Sigstore 策略控制器的更多信息,请参阅Sigstore 策略控制器文档。