Подписать Docker-образ в Artifact Registry и настроить проверку подписи с помощью Connaisseur
В инструкции описано, как подписать Docker-образ в Artifact-Registry и настроить проверку подписи в Managed Kubernetes. Подпись и проверка Docker-образов необходимы для обеспечения подлинности и целостности образов.
Перед началом работы
-
На сервисный аккаунт, с которым создается кластер, необходимо назначить роль ar.registry.viewer.
Шаг 1. Подпишите образ
Создайте пару ключей с помощью Cosign:
cosign generate-key-pairЗадайте и введите пароль для закрытого ключа.
Чтобы подписать Docker-образ в Artifact Registry, выполните команду:
cosign sign --key cosign.key --tlog-upload=false <registry_URI>/<docker_image_name>:<tag>Чтобы проверить корректность подписи Docker-образа, выполните команду:
cosign verify --key cosign.pub --insecure-ignore-tlog=true <registry_URI>/<docker_image_name>:<tag>
Шаг 2. Добавьте публичный ключ Cosign в конфигурацию Connaisseur
В созданном кластере Managed Kubernetes перейдите на вкладку Плагины.
В разделе Доступные для установки выберите Connaisseur.
Нажмите Обновить.
В разделе Расширенная конфигурация → YAML укажите параметры:
application:validators:- approve: truename: allowtype: static- approve: falsename: denytype: static- name: dockerhubtype: notaryv1trustRoots:- key: |-----BEGIN PUBLIC KEY-----<public_key_dockerhub>-----END PUBLIC KEY-----name: default- key: |-----BEGIN PUBLIC KEY-----<public_key_see>-----END PUBLIC KEY-----name: sse- name: cloud.ruauth:secretName: cloud-registry-secrettype: cosigntrustRoots:- name: defaultkey: |-----BEGIN PUBLIC KEY-----<public_key_cosign>-----END PUBLIC KEY-----policy:- pattern: '*:*'validator: deny- pattern: docker.io/library/*:*validator: dockerhub- pattern: docker.io/securesystemsengineering/*:*validator: dockerhubwith:trustRoot: sse- pattern: registry.k8s.io/*:*validator: allow- pattern: mk8s.registry.smk.sbercloud.dev/*:*validator: allow- pattern: <registry_URI>/*:*validator: cloud.ruwith:verifyInTransparencyLog: falseГде:
<public_key_cosign> — публичная часть ключа, с помощью которого подписан образ.
<public_key_dockerhub> — публичная часть ключа для dockerhub. Параметр можно посмотреть в ConfigMap пространства имен connaisseur.
<public_key_see> — публичная часть ключа для see. Параметр можно посмотреть в ConfigMap пространства имен connaisseur.
Чтобы избежать потери других настроек при обновлении, важно передавать полную конфигурацию application, а не только параметры для Cosign.
Нажмите Обновить.
Шаг 3. Создайте под с подписанным образом
В терминале или PowerShell выполните команду:
kubectl run pod --image=<registry_URI>/<docker_image_name>:<tag>
Результат:
pod/pod created
Шаг 4. Удалите ресурсы
Если вы закончили работать с примером, удалите созданные ресурсы: