Как использовать команду docker trust sign для подписи образа

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете, как использовать команду docker trust sign для обеспечения безопасности своих Docker-образов. Сначала мы рассмотрим неподписанный образ, чтобы понять его характеристики до подписи. Затем вы попрактикуетесь в подписи тега образа в качестве администратора репозитория, подтверждая его подлинность, а затем проверите подпись. Наконец, вы изучите процесс подписи и проверки тега в качестве назначенного подписанта, демонстрируя совместный характер Docker Content Trust (Доверенности контента Docker).


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") subgraph Lab Skills docker/inspect -.-> lab-555255{{"Как использовать команду docker trust sign для подписи образа"}} docker/pull -.-> lab-555255{{"Как использовать команду docker trust sign для подписи образа"}} docker/tag -.-> lab-555255{{"Как использовать команду docker trust sign для подписи образа"}} docker/push -.-> lab-555255{{"Как использовать команду docker trust sign для подписи образа"}} end

Проверка неподписанного образа

На этом этапе мы узнаем, как проверить Docker-образ, который не был подписан. Docker Content Trust (Доверенность контента Docker) предоставляет способ проверить целостность и подлинность Docker-образов. Однако не все образы подписаны. Проверка неподписанного образа помогает нам понять основную информацию об образе, прежде чем мы углубимся в концепции подписи и проверки.

Сначала нам нужно скачать неподписанный образ из Docker-реестра. Мы будем использовать образ hello-world, который обычно не подписан по умолчанию.

docker pull hello-world

Эта команда загружает образ hello-world из реестра Docker Hub на вашу локальную машину. Вы должны увидеть вывод, показывающий ход и завершение загрузки.

Далее мы проверим загруженный образ с помощью команды docker inspect. Эта команда предоставляет подробную информацию о Docker-объекте, включая образы, контейнеры, тома и сети.

docker inspect hello-world

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

Поскольку этот образ не подписан, вы не найдете никакой информации, связанной с подписями или доверием, в выводе команды docker inspect. Это ключевая характеристика неподписанного образа с точки зрения Docker Content Trust.

Подпись тега в качестве администратора репозитория

На этом этапе мы узнаем, как подписать тег Docker-образа в качестве администратора репозитория. Docker Content Trust (Доверенность контента Docker) использует цифровые подписи, чтобы убедиться, что образы, которые вы скачиваете, точно соответствуют тому, что задумал издатель. В качестве администратора репозитория у вас есть право подписывать теги образов, подтверждая их подлинность.

Перед тем, как мы сможем подписать образ, нам нужно включить Docker Content Trust. Это делается путем установки переменной окружения DOCKER_CONTENT_TRUST в значение 1.

export DOCKER_CONTENT_TRUST=1

Эта команда включает доверие к контенту для последующих Docker-команд в текущей сессии терминала.

Теперь давайте пометим образ hello-world, который мы загрузили на предыдущем этапе, новым тегом, включающим имя репозитория. Мы будем использовать заполнитель для имени репозитория your_docker_username/my-signed-image. Замените your_docker_username на свое фактическое имя пользователя в Docker Hub, если у вас есть оно, или просто используйте labexuser для этой практической работы (лабораторной работы).

docker tag hello-world labexuser/my-signed-image:latest

Эта команда создает новый тег labexuser/my-signed-image:latest, который ссылается на тот же образ, что и hello-world.

Теперь мы отправим этот помеченный образ в реестр. Когда Docker Content Trust включен, отправка не подписанного тега образа вызовет запрос на его подпись.

docker push labexuser/my-signed-image:latest

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

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

Проверка подписи в качестве администратора репозитория

На этом этапе мы проверим подпись тега образа, который мы подписали на предыдущем этапе. В качестве администратора репозитория вы можете использовать Docker Content Trust (Доверенность контента Docker), чтобы убедиться, что образ, который вы скачиваете, является тем, который вы подписали.

Сначала убедимся, что Docker Content Trust по-прежнему включен. Если вы открыли новую сессию терминала, вам, возможно, придется снова установить переменную окружения.

export DOCKER_CONTENT_TRUST=1

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

docker pull labexuser/my-signed-image:latest

При выполнении этой команды Docker проверит наличие действительной подписи для тега labexuser/my-signed-image:latest. Если подпись действительна и доверенная, образ будет скачан. Вы должны увидеть вывод, показывающий, что образ скачивается и что подпись проверяется. В выводе явно будет упоминаться "Verifying trust data for" (Проверка данных доверия для).

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

Для дальнейшего изучения информации о доверии, связанной с образом, вы можете использовать команду docker trust inspect.

docker trust inspect labexuser/my-signed-image:latest

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

Подпись тега в качестве подписчика

На этом этапе мы узнаем, как назначенный "подписчик" может подписать тег Docker-образа. В реальной ситуации в репозитории может быть несколько подписчиков, каждый из которых отвечает за подпись определенных тегов или выпусков. Это позволяет создать более распределенный и безопасный процесс подписи.

Сначала убедитесь, что Docker Content Trust (Доверенность контента Docker) включен:

export DOCKER_CONTENT_TRUST=1

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

docker tag labexuser/my-signed-image:latest labexuser/my-signed-image:v1.0.0

Эта команда создает новый тег labexuser/my-signed-image:v1.0.0, который ссылается на тот же образ.

Для подписи этого нового тега в качестве другого "подписчика" мы используем команду docker trust sign. Эта команда позволяет явно подписать определенный тег с помощью определенного ключа.

docker trust sign labexuser/my-signed-image:v1.0.0

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

После успешного ввода парольной фразы Docker подписывает тег labexuser/my-signed-image:v1.0.0. Вы должны увидеть вывод, подтверждающий процесс подписи.

Наконец, нам нужно отправить обновленные данные о доверии в реестр. Команда docker push для подписанного тега будет включать новую информацию о подписи.

docker push labexuser/my-signed-image:v1.0.0

Эта команда отправляет тег v1.0.0 вместе с его связанной подписью в реестр.

Проверка подписи в качестве подписчика

На этом последнем этапе мы проверим подпись тега образа v1.0.0, который мы подписали в качестве "подписчика" на предыдущем этапе. Это показывает, как любой пользователь с включенной функцией Docker Content Trust (Доверенность контента Docker) может проверить подлинность образа, подписанного доверенным подписчиком.

Сначала убедитесь, что Docker Content Trust включен.

export DOCKER_CONTENT_TRUST=1

Теперь попробуем скачать тег образа v1.0.0. Поскольку доверие к контенту включено, Docker проверит подпись, связанную с этим тегом.

docker pull labexuser/my-signed-image:v1.0.0

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

Для дальнейшего подтверждения информации о подписи вы можете снова использовать команду docker trust inspect.

docker trust inspect labexuser/my-signed-image:v1.0.0

Вывод этой команды покажет подписчиков для тега v1.0.0. Здесь должны быть указаны данные о ключе подписчика, которого вы использовали на предыдущем этапе. Это дает конкретные доказательства того, что тег был подписан доверенной стороной.

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

Резюме

В этом практическом занятии мы научились работать с Docker Content Trust (Доверенностью контента Docker). Сначала мы проверили не подписанный образ, чтобы понять его основную информацию и отсутствие деталей о подписи. Затем мы изучили процесс подписи тега Docker-образа в качестве администратора репозитория, который включает в себя включение доверия к контенту и использование команды docker trust sign для подтверждения подлинности образа.

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