注意
在继续操作之前,请确保已为容器映像启用生成证明,包括在 attest-build-provenance
操作中设置 push-to-registry
属性,如“生成容器映像的生成证明”中所述。 这是策略控制器验证证明所必需的。
Kubernetes 准入控制器入门
若要设置准入控制器以强制实施 GitHub 项目证明,需要:
部署 Sigstore Policy Controller
我们已将 Sigstore Policy Controller 打包为 GitHub 分布式 Helm 图表。 开始之前,请确保具备以下先决条件:
首先,安装部署 Sigstore Policy Controller 的 Helm 图表:
helm upgrade policy-controller --install --atomic \ --create-namespace --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \ --version v0.12.0-github12
helm upgrade policy-controller --install --atomic \
--create-namespace --namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \
--version v0.12.0-github12
这会将 Policy Controller 安装到 artifact-attestations
命名空间中。 目前,尚未配置任何策略,也不会强制实施任何证明。
添加 GitHub TrustRoot
和 ClusterImagePolicy
部署策略控制器后,需要将 GitHub TrustRoot
和 ClusterImagePolicy
添加到群集。 使用我们提供的 Helm 图表来完成此操作。 确保将 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.2 \ --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.2 \
--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
匹配的图像
默认情况下,在允许图像进入群集之前,随 Helm 图表一起 trust-policies
安装的策略会验证所有图像的证明。 如果只想对图像子集强制执行证明,则可以使用 Helm 值 policy.images
和 policy.exemptImages
来指定作为匹配标准的图像列表。 这些值可以设置为一个与图像名称匹配的 glob 模式列表。 Glob 语法使用 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.2 \ --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.2 \
--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 中心,所有模式也必须使用完全限定的名称。 在此示例中,如果要豁免映像 busybox
,则必须提供完整名称(包括域名和双星号 glob)以匹配所有映像版本:index.docker.io/library/busybox**
。
请注意,要接受的任何图像都必须在 policy.images
列表中具有匹配的 glob 模式。__ 如果图像与任何模式都不匹配,则将被拒绝。 此外,如果映像同时与 policy.images
和 policy.exemptImages
匹配,将会被拒绝。
高级用法
若要查看可以使用 Helm 图表配置的完整选项集,可以运行以下任一命令。 对于策略控制器选项:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.12.0-github12
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.12.0-github12
对于信任策略选项:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2
有关 Sigstore 策略控制器的详细信息,请参阅 Sigstore 策略控制器文档。