Docker Content Trust (DCT) предоставляет возможность использовать цифровые подписи для данных, отправляемых и получаемых из удаленных реестров Docker. Эти подписи позволяют проверять целостность и издателя определенных тегов изображений на стороне клиента или во время выполнения.
Содержание
- Необходимые условия
- Развертывание
- Создайте репозиторий docker для ваших образов
- Выполните вход в Docker в CLI с помощью команды
- Чтобы подписать образ docker, мы должны сначала сгенерировать ключ…
- Подписание и отправка образов в репозиторий
- Настройка доверительной среды и извлечение подписанных и неподписанных изображений
Необходимые условия
- Последняя версия рабочего стола Docker
- Учетная запись хаба Docker
- Образ Docker contrainer## ДокументацияСсылка на документацию DCT здесь
Развертывание
Создайте репозиторий docker для ваших образов
- Перейдите на Docker Hub и войдите под своей учетной записью docker hub.
- Нажмите на Create repository и назовите его «test».
- Он должен выглядеть примерно так.
Выполните вход в Docker в CLI с помощью команды
Docker login
- Введите свои учетные данные, и вы готовы к работе.
Чтобы подписать образ docker, мы должны сначала сгенерировать ключ…
Чтобы сгенерировать ключ, выполните эту команду в CLI
docker trust key generate signature
- Эта «Подпись» — имя, которое вы дадите ключу, и оно будет сохранено в рабочем каталоге с расширением .pub.
- После выполнения этой команды вам будет предложено ввести и повторить кодовую фразу.
Для создания подписи и добавления ее в репозиторий выполните эту команду
docker trust signer add --key signature.pub [signer's name] [your repository's name]
- Имя репозитория будет выглядеть примерно так —> example/test
- Вы должны ввести и повторить парольную фразу для корневого ключа и репозитория.
Подписание и отправка образов в репозиторий
- Сначала зафиксируем наш образ контейнера.
docker commit [Image ID] [Repository Name]
- Идентификатор образа можно узнать из
docker ps
- Давайте вставим неподписанное изображение для справки — сначала пометьте изображение как unsigned-image
docker image tag [Image ID] [Repository Name]:unsigned-image
- Теперь переместите изображение с помощью
docker push [Repository Name]:unsigned-image
- Теперь подпишите метку и подпишите то же изображение.Метка изображения с
docker image tag [Image ID] [Repository Name]:signed-image
Подпишите изображение с помощью
docker trust sign [Repository Name]:signed-image
- Снова введите кодовую фразу.
Для получения дальнейшей информации о подписанном изображении запустите
docker trust inspect --pretty [Repository Name]:signed-image
Нажмите на подписанное изображение с помощью
docker push [Repository Name]:signed-image
The push refers to repository [docker.io/shakunt/test]
059ff50d778b: Layer already exists
c4e64d78638e: Layer already exists
5f70bf18a086: Layer already exists
0cd0f4e90e0c: Layer already exists
e4a7f8c5002b: Layer already exists
7cc0623bd7a8: Layer already exists
f1859b30ca6b: Layer already exists
6a35d52a66fd: Layer already exists
fbd7d5451c69: Layer already exists
4fc242d58285: Layer already exists
trust-image-signed: digest: sha256:f6274d55e7ae079737180c7cb5----7387fb6a87297ef486edbc1bb16f4d0 size: 2409
Настройка доверительной среды и извлечение подписанных и неподписанных изображений
Чтобы настроить доверительную среду, выполните следующие действия
export DOCKER_CONTENT_TRUST=1
Давайте извлечем изображения
- неподписанное изображение
docker pull [Repository Name]:unsigned-image
No valid trust data for unsigned-image
- подписанное изображение
docker pull [Repository Name]:signed-image
Pull (1 of 1): shakunt/test:signed-image@sha256:f6274d55e7ae079737180c7cb5b02f386edbc1bb16f4d0
docker.io/shakunt/test@sha256:f6274d55e7ae079737180c7cb5b02f3767387fb6a87bb16f4d0: Pulling from shakunt/test
Digest: sha256:f6274d55e7ae079737180c77fb6a87297ef486edbc1bb16f4d0
Status: Image is up to date for shakunt/test@sha256:f6274d551bb16f4d0
Tagging shakunt/test@sha256:f6274d55e7ae079732f3767387fb6a87297ef486edbc1bb16f4d0 as shakunt/test:signed-image
docker.io/shakunt/test:signed-image
Спасибо, надеюсь, этот пост помог вам!