Подписывать контейнеры стало не модой, а необходимостью. В этой статье разберём, как работает инструмент cosign, какие у него подходы к подписи и верификации образов, и как встроить этот процесс в реальный CI/CD.

Почему подпись контейнеров важна

Контейнерный образ — это артефакт, который может пройти через множество окружений и людей перед развертыванием. Подпись даёт гарантию, что содержимое не изменилось с момента подписания и что автор образа — именно тот, кто заявил права.

Без подписи команды вынуждены полагаться на доверие к регистри и проверкам хэшей, что оставляет бреши в цепочке поставок. Добавление подписи повышает уровень безопасности и облегчает автоматическую политику приёмки образов в production.

Что такое cosign и какие у него ключевые идеи

Cosign — это утилита из проекта sigstore, созданная для подписывания OCI-образов и хранения подписей в регистри как OCI-артефактов. Основные элементы: подпись, публичный ключ и прозрачный лог, куда записывается информация о подписании.

Инструмент поддерживает как работу с локальными ключами, так и «keyless» подпись через поставщиков идентификации, что упрощает работу в CI. Также cosign умеет подписывать не только образы, но и произвольные аттестации и SBOM.

Как это работает технически

При подписании создаётся криптографическая подпись над артефактом; затем подпись заносится в OCI-реестр как отдельный артефакт, связанный с основным образом. Это позволяет хранить подписи рядом с образами и извлекать их при проверке без дополнительных сервисов.

Для keyless-подписей sigstore использует Fulcio — CA, который выдаёт короткоживущие сертификаты на основе OIDC-токена, и Rekor — прозрачный лог. Это даёт видимый след о том, кто и когда подписал образ, что полезно для аудита.

Практика: базовые команды и пример использования

Установить cosign можно из бинарников или через пакетный менеджер. После установки типичный сценарий — сгенерировать ключи или использовать keyless, затем подписать образ и проверить подпись.

Примеры команд в простом виде: cosign generate-key-pair, cosign sign —key cosign.key , cosign verify —key cosign.pub , cosign sign —keyless , cosign verify —keyless . Эти команды покрывают основные рабочие потоки.

Небольшая таблица соответствий команд и задач

Действие Команда
Генерация пары ключей cosign generate-key-pair
Подпись с ключом cosign sign —key image:tag
Проверка подписи cosign verify —key image:tag
Keyless подпись cosign sign —keyless image:tag

Подходы к подписи: ключи против keyless

Классический вариант — управление приватными ключами. Вы храните приватный ключ в защищённом хранилище и используете его для подписи. Это даёт контроль, но требует надёжного KMS и процедур ротации.

Keyless-подпись избавляет от необходимости держать приватные ключи локально: Fulcio выдаёт сертификат, привязанный к идентичности разработчика, на основе OIDC. Подпись при этом записывается в Rekor, что обеспечивает доказуемость.

Сравнение основных характеристик

  • Контроль: локальные ключи дают полный контроль над подписью, keyless опирается на провайдера идентификации.
  • Операции: keyless проще в CI, не требует сложной интеграции с KMS.
  • Аудит: Rekor делает keyless-подписи прозрачными и доступными для проверки.

Аттестации и расширенные возможности

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

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

Интеграция в CI/CD

Практический сценарий: вы подписываете образ в конце пайплайна сборки, а на этапе деплоя выполняете автоматическую проверку подписи и аттестаций. Такая цепочка предотвращает запуск неподписанных или изменённых образов в production.

Для CI cosign часто используют в связке с OIDC-провайдерами и секретными менеджерами. Это снижает количество секретов в пайплайне и упрощает ротацию ключей.

Хранение ключей и KMS

Если выбран режим работы с ключами, хранение в KMS — обязательная практика. Cosign поддерживает интеграцию с AWS KMS, GCP KMS, Azure Key Vault и HashiCorp Vault. Это уменьшает риск утечки приватных ключей и упрощает управление доступом.

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

Политики проверки и автоматизация

Организации обычно формулируют политики, которые описывают, что считать допустимым для деплоя. Это может включать требование подписи определённым ключом, наличие конкретных аттестаций или отсутствие открытых уязвимостей.

Эти правила можно автоматизировать с помощью admission-контроллеров в Kubernetes, которые вызывают cosign verify при попытке создать Pod с определённым образом. Автоматизация облегчает соблюдение правил и уменьшает человеческий фактор.

Типичные ошибки при внедрении

Первая ошибка — отсутствие чёткого управления ключами и процедур ротации. Хранилище ключей без мониторинга или резервного плана приводит к простоям или компрометации.

Вторая ошибка — попытка подписывать всё, но не проверять подписи на этапе деплоя. Подписи бесполезны, если их не использовать для принятия решений. Третья ошибка — полагаться только на локальные проверки без прозрачных логов.

Кейс из практики

В одном проекте мне пришлось настраивать подпись образов для микросервисной платформы. Команда выбрала keyless-подпись, чтобы упростить CI и избежать распределения приватных ключей среди нескольких команд.

Пару недель ушло на интеграцию OIDC, настройку Rekor и внедрение проверки в пайплайн деплоя. Результат — уменьшение числа инцидентов с развёртыванием неподписанных образов и упрощение аудита.

Советы по началу работы

  • Начните с простого сценария: подпись одного образа и его верификация вручную.
  • Параллельно решите вопрос с хранением публичных ключей и доступом к ним для автоматических проверок.
  • Подумайте о том, какие аттестации нужны вашей организации и как их формализовать.

Совместимость и экосистема

Cosign хорошо вписывается в экосистему OCI и работает с популярными регистрами. Многие инструменты для сканирования и управления безопасностью поддерживают или интегрируются с cosign.

Также доступно множество плагинов и библиотек для разных языков, что позволяет встроить подпись и проверку в кастомные процессы без переписывания логики приложения.

К чему готовиться при переходе на подписывание

Технически это не самая сложная задача, но организационно потребуется согласовать процессы. Необходимо определить владельцев ключей, ответственных за процедуры ротации и правила приёмки артефактов.

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

Заключительные мысли и дальнейшие шаги

Подпись образов с помощью cosign превращает контейнеры в проверяемые артефакты, уменьшая риски при доставке ПО. Выбор между ключами и keyless зависит от требований к контролю и удобству интеграции в CI/CD.

Практическая рекомендация: начните с простого сценария, отработайте ключевые операции вручную, затем постепенно автоматизируйте проверку в пайплайнах и в окружениях развертывания. Так вы получите надёжную и прозрачную цепочку поставки.