nav-img
Evolution

Подписать Docker-образ в Artifact Registry и настроить проверку подписи с помощью Connaisseur

В инструкции описано, как подписать Docker-образ в Artifact-Registry и настроить проверку подписи в Managed Kubernetes. Подпись и проверка Docker-образов необходимы для обеспечения подлинности и целостности образов.

Перед началом работы

  1. Создайте кластер и хотя бы одну группу узлов.

    На сервисный аккаунт, с которым создается кластер, необходимо назначить роль ar.registry.viewer.

  2. Установите в созданный кластер плагин Connaisseur.

  3. Установите Cosign на ваше устройство.

  4. Загрузите Docker-образ в репозиторий Artifact Registry.

  5. Подключитесь к кластеру.

Шаг 1. Подпишите образ

  1. Создайте пару ключей с помощью Cosign:

    cosign generate-key-pair

    Задайте и введите пароль для закрытого ключа.

  2. Чтобы подписать Docker-образ в Artifact Registry, выполните команду:

    cosign sign --key cosign.key --tlog-upload=false <registry_URI>/<docker_image_name>:<tag>
  3. Чтобы проверить корректность подписи Docker-образа, выполните команду:

    cosign verify --key cosign.pub --insecure-ignore-tlog=true <registry_URI>/<docker_image_name>:<tag>

Шаг 2. Добавьте публичный ключ Cosign в конфигурацию Connaisseur


  1. В созданном кластере Managed Kubernetes перейдите на вкладку Плагины.

  2. В разделе Доступные для установки выберите Connaisseur.

  3. Нажмите Обновить.

  4. В разделе Расширенная конфигурация → YAML укажите параметры:

    application:
    validators:
    - approve: true
    name: allow
    type: static
    - approve: false
    name: deny
    type: static
    - name: dockerhub
    type: notaryv1
    trustRoots:
    - 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.ru
    auth:
    secretName: cloud-registry-secret
    type: cosign
    trustRoots:
    - name: default
    key: |
    -----BEGIN PUBLIC KEY-----
    <public_key_cosign>
    -----END PUBLIC KEY-----
    policy:
    - pattern: '*:*'
    validator: deny
    - pattern: docker.io/library/*:*
    validator: dockerhub
    - pattern: docker.io/securesystemsengineering/*:*
    validator: dockerhub
    with:
    trustRoot: sse
    - pattern: registry.k8s.io/*:*
    validator: allow
    - pattern: mk8s.registry.smk.sbercloud.dev/*:*
    validator: allow
    - pattern: <registry_URI>/*:*
    validator: cloud.ru
    with:
    verifyInTransparencyLog: false

    Где:

    • <public_key_cosign> — публичная часть ключа, с помощью которого подписан образ.

    • <public_key_dockerhub> — публичная часть ключа для dockerhub. Параметр можно посмотреть в ConfigMap пространства имен connaisseur.

    • <public_key_see> — публичная часть ключа для see. Параметр можно посмотреть в ConfigMap пространства имен connaisseur.

    Чтобы избежать потери других настроек при обновлении, важно передавать полную конфигурацию application, а не только параметры для Cosign.

  5. Нажмите Обновить.

Шаг 3. Создайте под с подписанным образом

В терминале или PowerShell выполните команду:

kubectl run pod --image=<registry_URI>/<docker_image_name>:<tag>

Результат:

pod/pod created

Шаг 4. Удалите ресурсы

Если вы закончили работать с примером, удалите созданные ресурсы:

  1. Кластер.

  2. Образ из Artifact Registry.

  3. Реестр Artifact Registry.