Поиск по сайту:

Как подписание образов Docker будет развиваться с Notary v2


Подписанные образы Docker повышают доверие и безопасность экосистемы, позволяя пользователям проверять, действительно ли загруженные образы созданы вами. Несмотря на явные преимущества подписи, ее распространение среди пользователей Docker было медленным, и она не включена по умолчанию.

Теперь новая версия системы нотариального подписания стремится изменить это. В декабре 2019 года была создана рабочая группа с участием нескольких поставщиков, чтобы улучшить процесс подписи изображений и решить несколько проблем с исходной реализацией. Notary v2 запущен в альфа-версии в октябре 2021 года. Вот как он делает подпись более совместимой с современными моделями использования контейнеров.

Что такое нотариус?

Notary — это проект, который Docker начал в 2015 году, прежде чем передать его в дар Cloud Native Computing Foundation (CNCF). Над выпуском v2 работает межотраслевая группа, в которую входят Docker, Microsoft, Google и Amazon.

Notary, также известный как Docker Content Trust, предоставляет механизмы, которые подписывают и проверяют ваши образы контейнеров. Текущая итерация работает путем добавления вашего открытого ключа в ваш реестр, подписания вашего образа закрытым аналогом ключа, а затем отправки подписанного образа в реестр. Другие пользователи могут проверить образ, попросив реестр сопоставить его открытый ключ с данными, которые они извлекли. Все эти функции встроены в существующий интерфейс командной строки Docker в группе команд docker trust.

Проблемы с v1

Первоначальная версия Notary была разработана до наблюдаемого сегодня распространения реестров Docker. Он разработан в первую очередь для Docker Hub, тогда как сегодня вы можете использовать реестры от разных поставщиков. GitHub, GitLab и популярные платформы облачного развертывания начали предлагать интегрированные реестры.

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

v1 также не работает между реестрами. Данные подписи теряются, когда вы извлекаете общедоступный образ, а затем отправляете его в частный реестр без сопутствующего нотариального сервера. Вы не можете проверить, остается ли частная версия такой же, как оригинал, пока она находится в состоянии покоя в вашем реестре. Точно так же текущая архитектура Notary не предлагает поддержку частных сетей и изолированных сред, которые необходимо физически изолировать от внешнего мира.

Новая архитектура v2

Следующее поколение Notary возвращает дизайн к чертежной доске, чтобы создать более простой и универсальный интерфейс. Одна из целей проекта — в конечном итоге достичь состояния, при котором проверка подписи изображения включена по умолчанию, что поможет защитить гораздо больше пользователей от возможного подделки изображения.

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

Notary v2 также не ограничивается подписанием образов контейнеров. Он работает с любым артефактом, хранящимся в реестре, совместимом с OCI. Теперь вы можете подписывать активы, которые сопровождают ваши изображения, такие как списки зависимостей в спецификациях программного обеспечения (SBOM) и результаты сканирования изображений. Это обеспечивает доверие ко всему конвейеру развертывания, выделяя несанкционированные попытки изменить аудиты и сопроводительную документацию.

Несколько подписантов и продвижение подписи

Еще одна область, в которой Notary v1 терпит неудачу, — это утверждение образа для использования в вашей собственной среде. Он поддерживает только одну подпись на изображение; если образ Docker Hub подписан его поставщиком, вы не можете добавить собственную подпись, чтобы пометить образ как подходящий для вашей организации.

Notary v2 также поддерживает этот рабочий процесс. Как нижестоящий пользователь изображения, вы можете добавлять к изображению (или любому другому артефакту) новые подписи, которые смогут проверить другие нижестоящие по цепочке. Например, это означает, что вы сможете проверить следующие утверждения об изображении, определяемом как ubuntu:latest:

  • Изображение было опубликовано в Docker Hub компанией Canonical, и с тех пор его никто не подделывал.
  • Изображение было подписано для использования вашей организацией.
  • Изображение не изменилось с тех пор, как оно было кэшировано в частном реестре Docker вашего CI-сервера.

Notary v2 способен поддерживать доверие во всей экосистеме, вместо того, чтобы в основном ограничиваться немедленным получением образов из Docker Hub. Это побуждает вас бросить вызов традиционному представлению о том, что образы «безопасны», поскольку они извлекаются непосредственно из Docker Hub. Использование нескольких подписей позволяет вам подтвердить это заявление, а затем записать его как собственную печать одобрения.

Использование нотариуса v2 сегодня

Notary v2 еще не готов для общего использования. Тем не менее, первая альфа-версия доступна для скачивания. Компонент подписи и проверки называется notation. В настоящее время эта функция не завершена и предлагается в виде отдельного двоичного файла, который работает независимо от интерфейса командной строки Docker.

Загрузите Notation со страницы релизов GitHub, извлеките исполняемый файл и поместите его куда-нибудь по пути. Начните с создания тестового сертификата подписи для собственного использования:

notation cert generate-test --default "my-certificate"

Теперь вы можете подписывать изображения. Нотариус в настоящее время работает только с изображениями в реестре. Вы можете использовать Docker для быстрого запуска совместимого реестра на локальном хосте: 5000:

docker run -d -p 5000:5000 ghcr.io/oras-project/registry:v0.0.3-alpha

Создайте образ и загрузите его в реестр, а затем подпишите его с помощью нотации:

docker build -t localhost:5000/my-image:latest .
docker push localhost:5000/my-image:latest
notation sign --plain-http localhost:5000/my-image:latest

Теперь вы добавили свою подпись к изображению. Попробуйте проверить это с помощью команды verify:

notation verify --plain-http localhost:5000/my-image:latest

Это приведет к ошибке, поскольку команда cert generate-test не регистрирует автоматически открытый ключ сгенерированного сертификата. Поскольку Notation не будет знать ключ, используемый для подписи изображения, проверка завершится ошибкой. Вы можете исправить это, добавив открытый ключ вашего сертификата в Notation, а затем снова попытавшись проверить свое изображение:

notation cert add --name "my-certificate" ~/.config/notation/certificate/my-certificate.crt
notation verify --plain-http localhost:5000/my-image:latest

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

Флаг --plain-http в приведенных выше командах позволяет Notation использовать HTTP для подключения к реестру. Это необходимо для этих примеров, где реестр Docker был создан локально для целей тестирования. Вы должны опустить этот флаг при подключении к реальному реестру, защищенному TLS.

Что дальше для нотариуса и нотариуса?

Notary v2 все еще находится в стадии разработки, и новые возможности появятся в будущих сборках Notation. Отзыв сертификатов, политики проверки для конкретных сред и поддержка реестров без поддержки ORAS — все это находится в планах.

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

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