О контроллере допуска 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, необходимо:
- Разверните контроллер политики Sigstore.
- Добавьте GitHub
TrustRoot
и кластерClusterImagePolicy
. - Включите политику в пространстве имен.
Развертывание контроллера политики Sigstore
Мы упаковали контроллер политики Sigstore в виде распределенной диаграммы Helm GitHub. Перед началом работы убедитесь, что у вас есть следующие предварительные требования:
Сначала установите диаграмму Helm, которая развертывает контроллер политики Sigstore:
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-github9
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-github9
При этом контроллер политики устанавливается в artifact-attestations
пространство имен. На этом этапе политики не были настроены, и она не будет применять какие-либо аттестации.
Добавление GitHub TrustRoot
и a 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.
Включение политики в пространстве имен
Warning
Эта политика не будет применяться, пока не укажите, к каким пространствам имен он должен применяться.
Каждое пространство имен в кластере может независимо применять политики. Чтобы включить принудительное применение в пространстве имен, можно добавить в пространство имен следующую метку:
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, проверяет аттестации для всех образов, прежде чем признать их в кластере. Если вы планируете применять аттестации только для подмножества изображений, можно использовать значения policy.images
Helm и policy.exemptImages
указать список изображений для сопоставления. Эти значения можно задать в списке шаблонов глобов, которые соответствуют именам изображений. Синтаксис globbing использует семантику filepath Go, а также дополнение **
к любой последовательности символов, включая косую черту.
Например, чтобы применить аттестацию для образов, которые соответствуют шаблону 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 Hub. В этом примере, если мы хотим исключить изображениеbusybox
, необходимо указать полное имя, включая домен и двойную звездочку, чтобы соответствовать всем версиям образа: index.docker.io/library/busybox**
Обратите внимание, что любой образ, который вы планируете признать , должен иметь соответствующий шаблон глобов в списке policy.images
. Если изображение не соответствует шаблону, оно будет отклонено. Кроме того, если изображение соответствует обоим policy.images
и policy.exemptImages
, оно будет отклонено.
Расширенное использование
Чтобы просмотреть полный набор параметров, которые можно настроить с помощью диаграммы Helm, можно выполнить любую из следующих команд. Для параметров контроллера политики:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github9
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github9
Для параметров политики доверия:
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.