Как использовать команду docker trust signer remove для удаления подписантов

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

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь управлять подписантами (signers) для Docker-репозиториев с помощью команды docker trust signer remove. Мы начнем с проверки текущих подписантов репозитория, чтобы понять существующие отношения доверия.

После проверки вы попрактикуетесь в удалении подписанта из одного репозитория, а затем проверите, что удаление прошло успешно. Наконец, вы научитесь удалять подписанта из нескольких репозиториев одновременно и подтвердить внесенные изменения. В этом практическом занятии вы получите практический опыт по управлению доверием к контенту в 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") subgraph Lab Skills docker/inspect -.-> lab-555257{{"Как использовать команду docker trust signer remove для удаления подписантов"}} docker/pull -.-> lab-555257{{"Как использовать команду docker trust signer remove для удаления подписантов"}} docker/tag -.-> lab-555257{{"Как использовать команду docker trust signer remove для удаления подписантов"}} end

Проверка текущих подписантов репозитория

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

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

export DOCKER_CONTENT_TRUST=1

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

Проверим подписантов репозитория ubuntu.

docker trust inspect ubuntu

Вы должны увидеть вывод, похожий на следующий, показывающий подписантов и их ключи:

No signatures for ubuntu

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

Попробуем проверить репозиторий, который, как известно, имеет подписи, например docker/trusttest. Сначала нам нужно скачать образ, чтобы убедиться, что у нас есть необходимые метаданные.

docker pull docker/trusttest

Теперь проверим подписантов репозитория docker/trusttest.

docker trust inspect docker/trusttest

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

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Releases     0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Этот вывод подтверждает, что репозиторий docker/trusttest подписан и перечисляет ключи, связанные с подписантами.

Удаление подписанта из одного репозитория

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

Для удаления подписанта мы используем команду docker trust signer remove. Эта команда требует указания имени подписанта, которого нужно удалить, и репозитория, из которого его нужно удалить.

Удалим подписанта Releases из репозитория docker/trusttest. Напомним, что на предыдущем этапе мы узнали, что в репозитории docker/trusttest есть подписант Releases.

docker trust signer remove Releases docker/trusttest

При выполнении этой команды вас попросят подтвердить удаление. Введите y и нажмите Enter, чтобы продолжить.

Removing signer "Releases" from docker/trusttest. Are you sure you want to continue? (y/n): y

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

Successfully removed signer "Releases" from docker/trusttest

Эта команда удаляет связь между публичным ключом подписанта Releases и репозиторием docker/trusttest в данных о доверии, хранящихся на сервере Notary. Она не удаляет сам ключ подписанта, а только его разрешение на подпись для этого конкретного репозитория.

Проверка удаления подписанта

На этом этапе мы проверим, что подписант был успешно удален из репозитория. Мы можем сделать это, снова используя команду docker trust inspect, как мы делали на первом этапе.

Мы ожидаем, что после удаления подписанта Releases из репозитория docker/trusttest на предыдущем этапе выполнение команды docker trust inspect docker/trusttest больше не должно показывать Releases в качестве подписанта.

Проверим подписантов репозитория docker/trusttest еще раз.

docker trust inspect docker/trusttest

Внимательно посмотрите на вывод. Теперь вы должны увидеть, что подписант Releases больше не перечислен в разделе Signers для репозитория docker/trusttest.

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Targets      0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Обратите внимание, что хотя подписант Releases удален из списка авторизованных подписантов (Signers), раздел Signatures может по-прежнему показывать подписи, сделанные Releases. Это происходит потому, что команда remove удаляет разрешение подписанта на подпись будущих образов, но не обязательно сразу удаляет существующие подписи с сервера Notary. Однако для проверки удаления роли подписанта для репозитория достаточно проверить список Signers.

Отсутствие Releases в разделе Signers of docker/trusttest подтверждает, что подписант был успешно удален из этого конкретного репозитория.

Удаление подписанта из нескольких репозиториев

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

Команда docker trust signer remove позволяет указать несколько репозиториев после имени подписанта.

Предположим, что у нас есть еще один репозиторий, например docker/another - trusttest, который также имеет подписанта Releases. Чтобы удалить подписанта Releases из репозиториев docker/trusttest и docker/another - trusttest одной командой, нужно перечислить имена обоих репозиториев.

Сначала давайте загрузим образ hello - world, чтобы использовать его в качестве второго репозитория для демонстрации. Затем мы создадим тег для него, чтобы имитировать другой репозиторий.

docker pull hello-world
docker tag hello-world docker/another-trusttest

Теперь удалим подписанта Releases из репозиториев docker/trusttest и docker/another - trusttest. Обратите внимание, что в реальной ситуации в репозитории docker/another - trusttest может не быть подписанта Releases, но эта команда демонстрирует синтаксис удаления подписанта из нескольких репозиториев.

docker trust signer remove Releases docker/trusttest docker/another-trusttest

Вам будет предложено подтвердить удаление для каждого репозитория. Введите y и нажмите Enter для каждого подтверждения.

Removing signer "Releases" from docker/trusttest. Are you sure you want to continue? (y/n): y
Successfully removed signer "Releases" from docker/trusttest
Removing signer "Releases" from docker/another-trusttest. Are you sure you want to continue? (y/n): y
Successfully removed signer "Releases" from docker/another-trusttest

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

Проверка удаления подписанта из нескольких репозиториев

На этом этапе мы проверим, что подписант был успешно удален из обоих репозиториев, указанных на предыдущем этапе. Мы снова будем использовать команду docker trust inspect для каждого репозитория.

Сначала проверим подписантов репозитория docker/trusttest. Мы ожидаем, что подписант Releases по-прежнему не будет присутствовать в списке Signers, так как мы удалили его на предыдущем этапе и подтвердили удаление.

docker trust inspect docker/trusttest

В выводе должно быть показано, что Releases не перечислен в разделе Signers of docker/trusttest.

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Targets      0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Теперь проверим подписантов репозитория docker/another-trusttest. Поскольку мы также попытались удалить подписанта Releases из этого репозитория, мы ожидаем, что он также будет отсутствовать в списке Signers для этого репозитория.

docker trust inspect docker/another-trusttest

В выводе для docker/another-trusttest должно быть указано, что нет подписантов, так как образ hello-world (который мы пометили как docker/another-trusttest) по умолчанию не подписан, и мы попытались удалить подписанта Releases (которого изначально не было для этого конкретного тега).

No signatures for docker/another-trusttest

Это подтверждает, что команда docker trust signer remove, когда используется с несколькими именами репозиториев, пытается удалить указанного подписанта из каждого перечисленного репозитория. Проверка для docker/trusttest показывает успешное удаление из репозитория, в котором ранее был этот подписант, а проверка для docker/another-trusttest показывает состояние репозитория, в котором этого подписанта не было (и, таким образом, попытка удаления его не привела к его добавлению).

Резюме

В этом практическом занятии (lab) мы научились управлять подписантами (signers) для Docker-репозиториев с использованием команды docker trust. Мы начали с включения функции Docker Content Trust и проверки текущих подписантов репозитория с помощью команды docker trust inspect. Это позволило нам увидеть, какие ключи связаны с подписыванием образов в данном репозитории.

Затем мы практиковали удаление подписанта из одного репозитория и снова проверили удаление с помощью команды docker trust inspect. Наконец, мы расширили свои знания и удалили подписанта из нескольких репозиториев одновременно, а также подтвердили успешное удаление в рамках всех указанных репозиториев. Этот практический опыт продемонстрировал практическое применение команды docker trust signer remove для управления доверием к контенту в Docker-окружении.