Skip to main content

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

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

О контроллере допуска Kubernetes

Аттестации артефактов позволяют создавать нефиксируемые проверки подлинности и гарантии целостности создаваемого программного обеспечения. В свою очередь, пользователи, использующие программное обеспечение, могут проверить, где и как было создано ваше программное обеспечение.

Контроллеры допуска Kubernetes — это подключаемые модули, которые управляют поведением сервера API Kubernetes. Они обычно используются для применения политик безопасности и рекомендаций в кластере Kubernetes.

С помощью проекта контроллера политики Sigstore открытый код можно добавить контроллер допуска в кластер Kubernetes, который может применять аттестации артефактов. Таким образом, можно обеспечить развертывание только артефактов с допустимыми аттестациями.

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

Сведения о корнях доверия и политиках

Контроллер политики Sigstore в основном настраивается с корнем доверия и политиками, представленными пользовательскими ресурсами TrustRoot и ClusterImagePolicy. A TrustRoot представляет доверенный канал распространения для материала открытого ключа, используемого для проверки аттестаций. Представляет ClusterImagePolicy политику для применения аттестаций на изображениях.

Также TrustRoot может содержать корневой каталог репозитория TUF , что позволяет кластеру непрерывно и безопасно получать обновления для его доверенного материала открытого ключа. Если не указано, по умолчанию используется ClusterImagePolicy ключевой материал открытый код Sigstore Public Good Instance. При проверке аттестаций, созданных для частных репозиториев, ClusterImagePolicy необходимо ссылаться на GitHub TrustRoot.

Начало работы с контроллером допуска 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.10.0-github8

При этом контроллер политики устанавливается в 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.1 \
 --set policy.enabled=true \
 --set policy.organization=MY-ORGANIZATION

Теперь вы установили корневой каталог доверия GitHub и политику аттестации артефактов в кластере. Эта политика отклонит артефакты, которые не были получены из вашей организации GitHub.

Включение политики в пространстве имен

Warning

Эта политика не будет применяться, пока не укажите, к каким пространствам имен он должен применяться.

Каждое пространство имен в кластере может независимо применять политики. Чтобы включить принудительное применение в пространстве имен, можно добавить в пространство имен следующую метку:

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

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

Если у учетной записи GitHub Enterprise есть поддомен GHE.com, необходимо указать значение для домена доверия GitHub. Это значение используется для получения доверенных материалов, связанных с регионом расположения данных, на котором размещена учетная запись GitHub Enterprise. Это значение можно найти, войдите в учетную запись предприятия с gh помощью средства CLI и выполните следующую команду:

Bash
gh api meta --jq .domains.artifact_attestations.trust_domain

Это значение необходимо добавить при установке диаграммы trust-policies , например:

Bash
--set-json 'policy.trust.githubTrustDomain="YOUR-GHEC-TRUST-DOMAIN"'

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

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

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

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

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

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