Skip to main content

Применение аттестаций артефактов с помощью контроллера допуска Kubernetes

Используйте контроллер допуска для принудительного применения аттестаций артефактов в кластере Kubernetes.

Примечание.

Прежде чем продолжить, убедитесь, что вы включили провананс сборки для образов контейнеров, включая настройку атрибута push-to-registry в действии[, как описано в attest-build-provenance разделе "Создание провананса сборки для образов](/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds#generating-build-provenance-for-container-images) контейнеров". Это необходимо для проверки аттестации контроллера политики.

Начало работы с контроллером допуска Kubernetes

Чтобы настроить контроллер допуска для применения аттестаций артефактов GitHub, необходимо:

  1. Разверните контроллер политики Sigstore.
  2. Добавьте GitHub TrustRoot и кластерClusterImagePolicy.
  3. Включите политику в пространстве имен.

Развертывание контроллера политики Sigstore

Мы упаковали контроллер политики Sigstore в виде распределенной диаграммы Helm GitHub. Перед началом работы убедитесь, что у вас есть следующие предварительные требования:

  • Кластер Kubernetes с версией 1.27 или более поздней
  • Helm 3.0 или более поздней версии
  • kubectl

Сначала установите диаграмму Helm, которая развертывает контроллер политики Sigstore:

Bash
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

При этом контроллер политики устанавливается в artifact-attestations пространство имен. На этом этапе политики не были настроены, и она не будет применять какие-либо аттестации.

Добавление GitHub TrustRoot и a ClusterImagePolicy

После развертывания контроллера политики необходимо добавить GitHub TrustRoot и кластер ClusterImagePolicy . Используйте диаграмму Helm, предоставляемую для этого. Обязательно замените MY-ORGANIZATION имя организации GitHub (например, github или octocat-inc).

Bash
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 будет применяться в пространстве имен.

Кроме того, можно выполнить следующие действия:

Bash
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true

Сопоставление изображений

По умолчанию политика, установленная с диаграммой trust-policies Helm, проверяет аттестации для всех образов, прежде чем признать их в кластере. Если вы планируете применять аттестации только для подмножества изображений, можно использовать значения policy.images Helm и policy.exemptImages указать список изображений для сопоставления. Эти значения можно задать в списке шаблонов глобов, которые соответствуют именам изображений. Синтаксис globbing использует семантику filepath Go, а также дополнение ** к любой последовательности символов, включая косую черту.

Например, чтобы применить аттестацию для образов, которые соответствуют шаблону ghcr.io/MY-ORGANIZATION/* и допускаются busybox без допустимой аттестации, можно выполнить следующее:

Bash
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 Hub. В этом примере, если мы хотим исключить изображениеbusybox, необходимо указать полное имя, включая домен и двойную звездочку, чтобы соответствовать всем версиям образа: index.docker.io/library/busybox**

Обратите внимание, что любой образ, который вы планируете признать , должен иметь соответствующий шаблон глобов в списке policy.images . Если изображение не соответствует шаблону, оно будет отклонено. Кроме того, если изображение соответствует обоим policy.images и policy.exemptImages, оно будет отклонено.

Расширенное использование

Чтобы просмотреть полный набор параметров, которые можно настроить с помощью диаграммы Helm, можно выполнить любую из следующих команд. Для параметров контроллера политики:

Bash
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.12.0-github12

Для параметров политики доверия:

Bash
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2

Дополнительные сведения о контроллере политики Sigstore см. в документации по контроллеру политики Sigstore.