Как защитить контейнеры с помощью Docker Content Trust

Как защитить контейнеры с помощью Docker Content Trust

23 ноября 2022 г.

Доверие — ключевой вопрос при обмене данными между сетевыми системами. Особенно важно обеспечить целостность и публикацию всех данных, на которые опирается система при взаимодействии через ненадежную среду, такую ​​как Интернет. Для защиты данных необходимы надежные криптографические гарантии. Именно здесь на помощь приходит Docker Content Trust (DCT).

Docker Content Trust (DCT) предоставляет надежные криптографические гарантии в отношении типов программного обеспечения и версий, используемых в вашей инфраструктуре. В версии 1.8 Docker Engine дебютировал Docker Content Trust.

Меры безопасности, добавленные Docker Content Trust, проверяют непротиворечивость образов контейнеров, файлов контейнеров, в которых размещаются компоненты приложений, и контента, который хранится в реестрах, таких как Docker Hub.

С реестрами Docker Content Trust решает две проблемы:

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

Как работает DCT?

Docker Content Trust довольно прост. Docker Content Trust основан на инструменте Docker Notary для публикации доверенного контента и управления им, а также на The Update Framework (TUF), которая представляет собой платформу для защиты систем обновления программного обеспечения. Проект Notary обеспечивает клиент-серверную основу для установления доверия для проверки и работы с коллекциями контента.

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

docker content trust

Ключи доверия к содержимому Docker:

Доверие к тегу изображения управляется с помощью ключей подписи. DCT связан с частью TAG изображения. При первоначальном использовании операции DCT создается набор ключей.

Следующие ключевые классы составляют набор ключей:

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

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

Чтобы включить DCT, выполните следующую команду на узле докера Linux:

$ export DOCKER_CONTENT_TRUST=1

DOCKER_CONTENT_TRUST=0 для отключения DCT.

Действия по включению доверия к содержимому Docker:

  • Создать ключ
  • Добавьте подписывающую сторону в репозиторий Docker.
  • Подписать изображение

Я собираюсь использовать Docker Hub для шагов по включению доверия к содержимому Docker для иллюстрации.

Шаг 1. Войдите в Docker Hub.

dev@srini:~$ docker login
Username: srinukolaparthi
Password: ******
Login Succeeded

Шаг 2: Создайте ключ доверия. Доверенный ключ в основном устанавливает вашу личность пользователя и предоставляет вам доступ к изображениям подписи для репозитория.

ключ доверия docker генерирует

dev@raghu:~$ docker trust key generate srinidev
Generating key for srinidev...
Enter passphrase for new srinidev key with ID 5259740: 
Repeat passphrase for new srinidev key with ID 5259740:
Successfully generated and loaded private key. Corresponding public key available: /Users/docker/srinidev.pub

Шаг 3: Добавьте Signer в репозиторий Docker. n docker trust signer add –key

dev@srini:~$ docker trust signer add --key srinidev.pub srinidev srinidev/springboot-test
Adding signer "srinidev" to srinidev/springboot...
Initializing signed repository for srinidev/springboot...
You are about to create a new root signing key passphrase. This passphrase
will be used to protect the most sensitive key in your signing system. Please
choose a long, complex passphrase and be careful to keep the password and the
key file itself secure and backed up. It is highly recommended that you use a
password manager to generate the passphrase and keep it safe. There will be no
way to recover this key. You can find the key in your config directory.
Enter passphrase for new root key with ID 443ffc9:
Repeat passphrase for new root key with ID 443ffc9:
Enter passphrase for new repository key with ID d6ef6dd:
Repeat passphrase for new repository key with ID d6ef6dd:
Successfully initialized "srinidev/springboot"
Successfully added signer: srinidev to srinidev/springboot

Шаг 4:

dev@srini:~$ docker build -t srinidev/springboot:unsigned
Sending build context to Docker daemon  3.072kB
Step 1/2 : FROM busybox:latest
latest: Pulling from library/busybox
05669b0daf1fb: Pull complete
Digest: sha256:e26cd013274a657b86e706210ddd5cc1f82f50155791199d29b9e86e935ce135
Status: Downloaded newer image for busybox:latest
 ---> 93aa35aa1c79
Step 2/2 : CMD Hello this is busybox!
 ---> Running in g8ea53541c3f
Removing intermediate container k8ea53541c3f
 ---> 827bac2bb535
Successfully built 827bac2bb535
Successfully tagged srinidev/springboot:unsigned

Шаг 5. Загрузите образ в реестр Docker.

dev@srini:~$ docker push srinidev/springboot:unsigned

Шаг 6: введите команду: $ export DOCKER_CONTENT_TRUST=1

Шаг 7. Запустите образ Docker и проверьте, работает ли доверие к содержимому Docker.

dev@srini:~$ docker run srinidev/springboot:unsigned
docker: No valid trust data for unsigned.
See 'docker run --help'.

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

Шаг 8. Теперь давайте проверим и создадим новый подписанный образ.

dev@srini:~$ docker build -t srinidev/springboot:signed

Шаг 9: Подпишите образ Docker с помощью следующей команды.

dev@srini:~$ docker trust sign srinidev/springboot:signed
Signing and pushing trust data for local image srinidev/springboot:signed, may overwrite remote trust data
The push refers to repository [docker.io/srinidev/springboot:signed]
a6d503001157: Layer already exists
signed: digest: sha256:e8d2db0f9cc124273e5f3bbbd2006bf2f3629953983df859e3aa8092134fa373 size: 567
Signing and pushing trust metadata
Enter passphrase for srinidev key with ID 5239740:
Successfully signed docker.io/srinidev/springboot:signed

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

Шаг 10. Запустите новый подписанный образ Docker.

dev@srini:~$ docker run srinidev/springboot:signed

Вывод:

Если вышеуказанные шаги выполняются успешно, это означает, что доверие к содержимому Docker работает. Чтобы использовать удаленные репозитории с подписанными и сертифицированными образами, пользователи должны активировать функцию Docker Content Trust.

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE