{"meta":{"title":"使用 Kubernetes 准入控制器强制实施项目证明","intro":"使用准入控制器在 Kubernetes 群集中强制实施项目证明。","product":"GitHub Actions","breadcrumbs":[{"href":"/zh/actions","title":"GitHub Actions"},{"href":"/zh/actions/how-tos","title":"操作方法"},{"href":"/zh/actions/how-tos/secure-your-work","title":"保护工作安全"},{"href":"/zh/actions/how-tos/secure-your-work/use-artifact-attestations","title":"使用项目证明"},{"href":"/zh/actions/how-tos/secure-your-work/use-artifact-attestations/enforce-artifact-attestations","title":"强制工件声明"}],"documentType":"article"},"body":"# 使用 Kubernetes 准入控制器强制实施项目证明\n\n使用准入控制器在 Kubernetes 群集中强制实施项目证明。\n\n> [!NOTE] 在继续操作之前，请确保已为容器映像启用生成证明，包括在 `push-to-registry`中设置 `attest` 属性，如“[生成容器映像的生成证明](https://github.com/actions/attest)”中所述。 这是策略控制器验证证明所必需的。\n\n## Kubernetes 准入控制器入门\n\n若要设置准入控制器以强制实施 GitHub 项目证明，需要：\n\n1. [部署 Sigstore Policy Controller](#deploy-the-sigstore-policy-controller)。\n1. [将 GitHub `TrustRoot` 和 `ClusterImagePolicy` 添加到群集](#add-the-github-trustroot-and-a-clusterimagepolicy)。\n1. [在命名空间中启用策略](#enable-the-policy-in-your-namespace)。\n\n### 部署 Sigstore Policy Controller\n\nSigstore 策略控制器已打包，并通过 [Helm 图表](https://github.com/sigstore/helm-charts)提供。 开始之前，请确保具备以下先决条件：\n\n* 具有版本 1.27 或更高版本的 Kubernetes 群集\n* [Helm](https://helm.sh/docs/intro/install/) 3.0 或更高版本\n* [kubectl](https://kubernetes.io/docs/tasks/tools/)\n\n首先，安装部署 Sigstore Policy Controller 的 Helm 图表：\n\n```bash copy\nhelm upgrade policy-controller --install --atomic \\\n  --create-namespace --namespace artifact-attestations \\\n  oci://ghcr.io/sigstore/helm-charts/policy-controller \\\n  --version 0.10.5\n```\n\n这会将 Policy Controller 安装到 `artifact-attestations` 命名空间中。 目前，尚未配置任何策略，也不会强制实施任何证明。\n\n### 添加 GitHub `TrustRoot` 和 `ClusterImagePolicy`\n\n部署策略控制器后，需要将 GitHub `TrustRoot` 和 `ClusterImagePolicy` 添加到群集。 请使用我们提供的 Helm 图表来完成此操作。 确保将 `MY-ORGANIZATION` 替换为 GitHub 组织的名称（例如 `github` 或 `octocat-inc`）。\n\n```bash copy\nhelm upgrade trust-policies --install --atomic \\\n --namespace artifact-attestations \\\n oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \\\n --version v0.7.0 \\\n --set policy.enabled=true \\\n --set policy.organization=MY-ORGANIZATION\n```\n\n现在，你已经在群集中安装了 GitHub 信任根和项目证明策略。 此策略将拒绝非来自 GitHub 组织的项目。\n\n### 在命名空间中启用策略\n\n> [!WARNING]\n> 在指定应将此策略应用于哪些命名空间之前，不会强制实施此策略。\n\n群集中的每个命名空间都可以独立地强制实施策略。 若要在命名空间中启用强制措施，可以将以下标签添加到命名空间：\n\n```yaml\nmetadata:\n  labels:\n    policy.sigstore.dev/include: \"true\"\n```\n\n添加标签后，将在命名空间中强制实施 GitHub 项目证明策略。\n\n或者，您可以运行：\n\n```bash copy\nkubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true\n```\n\n### 匹配的图像\n\n默认情况下，通过 `trust-policies` Helm 图表安装的策略会在将镜像准入到群集之前验证所有镜像的证明。 如果只想对图像子集强制执行验证，则可以使用 Helm 值 `policy.images` 和 `policy.exemptImages` 来指定用于匹配的图像列表。 这些值可以设置为与镜像名称匹配的通配模式列表。 该通配语法使用 Go [文件路径](https://pkg.go.dev/path/filepath#Match)语义，并增加了 `**` 用于匹配包括斜杠在内的任意字符序列。\n\n例如，要对匹配模式 `ghcr.io/MY-ORGANIZATION/*` 的镜像强制执行证明，并在没有有效证明的情况下允许 `busybox`，可以运行：\n\n```bash copy\nhelm upgrade trust-policies --install --atomic \\\n --namespace artifact-attestations \\\n oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \\\n --version v0.7.0 \\\n --set policy.enabled=true \\\n --set policy.organization=MY-ORGANIZATION \\\n --set-json 'policy.exemptImages=[\"index.docker.io/library/busybox**\"]' \\\n --set-json 'policy.images=[\"ghcr.io/MY-ORGANIZATION/**\"]'\n ```\n\n所有模式都必须使用完全限定名称，即使镜像源自 Docker Hub。 在此示例中，如果要排除镜像 `busybox`，必须提供包含域名和双星号通配以匹配所有镜像版本的完整名称：`index.docker.io/library/busybox**`。\n\n请注意，任何打算准入的镜像都_必须_在 `policy.images` 列表中具有匹配的通配模式。 如果图像与任何模式都不匹配，则将被拒绝。 此外，如果映像同时与 `policy.images` 和 `policy.exemptImages` 匹配，将会被拒绝。\n\n### 高级用法\n\n若要查看可以使用 Helm 图表配置的完整选项集，可以运行以下任一命令。\n对于策略控制器选项：\n\n```bash copy\nhelm show values oci://ghcr.io/sigstore/helm-charts/policy-controller --version 0.10.5\n```\n\n对于信任策略选项：\n\n```bash copy\nhelm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.7.0\n```\n\n有关 Sigstore 策略控制器的详细信息，请参阅 [Sigstore 策略控制器文档](https://docs.sigstore.dev/policy-controller/overview/)。"}