Cosign#

Cosign - утилита для подписи образов контейнеров.

Утилита поддерживает:

  • «бесключевую подпись», используя публичный Центр Сертификации Fulcio и публичный сервис Rekor (настройки по умолчанию);

  • подпись с использованием аппаратных и KMS-ключей;

  • подпись с помощью Cosign, сгенерированного зашифрованной парой частных/открытых ключей;

  • подпись и проверку образов контейнеров, сохранение подписи в OCI-совместимом реестре (OCI - Open Container Initiative);

  • приватную PKI-инфраструктуру.

Сценарий подписи образов#

Для подписи образов используется утилита Cosign и пара ключей: закрытый и открытый.

  1. Сгенерируйте ключи:

    ./cosign  generate-key-pair
    

    Вывод:

    # Enter password for private key:
    # Enter password for private key again:
    # Private key written to cosign.key
    # Public key written to cosign.pub
    
  2. Подпишите образ командой:

    cosign sign --key cosign.key <IMAGE DIGEST>
    

    При выполнении команды в реестре образа будет загружена подпись.

    Пример:

    ./cosign sign  --tlog-upload=false --key cosign.key <path>/dapp-runc-2/runc@sha256:<hash>
    Enter password for private key:
    Pushing signature to: <path>/dapp-runc-2/runc
    

Сценарий проверки образов#

Для проверки образов выполните команду:

IMAGE_URI="dapp-runc-2/runc@sha256:<hash>"
  
./cosign verify --private-infrastructure --key cosign.pub $IMAGE_URI

Вывод будет следующим:

Verification for <path>/dapp-runc-2/runc@sha256:<hash>
The following checks were performed on each of these signatures:
  - The cosign claims were validated
  - The signatures were verified against the specified public key
  
[{"critical":{"identity":{"docker-reference":"<path>/dapp-runc-2/runc"},"image":{"docker-manifest-digest":"sha256:<hash>"},"type":"cosign container image signature"},"optional":null}]

В результате, если подпись, соответствующая открытому ключу, найдена, будет получен файл JSON с объектом подписи.