Введение
В этом практическом занятии (лабораторной работе) вы научитесь прикреплять аттестации к Docker-образу с помощью команды docker scout attestation add. Аттестации представляют собой ценную метаданные, которые могут предоставить важную информацию о происхождении образа, процессе сборки, результатах сканирования безопасности и многом другом.
Вы начнете с подготовки Docker-образа и простого файла аттестации. Затем вы используете команду docker scout attestation add с флагом --file для прикрепления аттестации к образу. Также вы узнаете, как указать определенный тип предиката для аттестации с помощью флага --predicate-type. Наконец, вы убедитесь, что аттестации были успешно добавлены к образу.
Подготовить образ и файл аттестации
На этом этапе мы подготовим Docker-образ и файл аттестации. Аттестация представляет собой фрагмент метаданных, который предоставляет информацию об образе, например, о том, как он был создан, проверен на наличие уязвимостей или подписан. В этом примере в качестве файла аттестации мы будем использовать простой текстовый файл.
Сначала давайте загрузим базовый Docker-образ, который мы будем использовать. Мы будем использовать образ alpine, который представляет собой легковесное дистрибутив Linux.
docker pull alpine:latest
Вы должны увидеть вывод, указывающий на то, что образ загружается.
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
Далее мы создадим простой файл аттестации. Этот файл будет содержать произвольные JSON-данные. В реальной ситуации этот файл содержал бы структурированные данные об образе, такие как информация о сборке, результаты сканирования или детали подписи.
Мы создадим файл с именем attestation.json в каталоге ~/project.
nano ~/project/attestation.json
Внутри редактора nano вставьте следующее JSON-содержимое:
{
"predicateType": "https://example.com/attestation/v1",
"data": {
"key": "value",
"another_key": 123
}
}
Нажмите Ctrl + X, затем Y и Enter, чтобы сохранить файл.
Вы можете проверить содержимое файла с помощью команды cat:
cat ~/project/attestation.json
Вывод должен соответствовать JSON-содержимому, которое вы только что вставили.
Теперь у вас есть как Docker-образ (alpine:latest), так и файл аттестации (~/project/attestation.json), готовые для следующих этапов.
Добавить аттестацию к образу с использованием флага --file
На этом этапе мы добавим файл аттестации, который мы создали на предыдущем этапе, к образу alpine:latest. Мы будем использовать команду docker buildx imagetools create с флагом --attestation-file. Эта команда позволяет создать новый манифест образа с дополнительными метаданными, включая аттестации.
Базовый синтаксис добавления файла аттестации выглядит следующим образом:
docker buildx imagetools create <source_image> --attestation-file <attestation_file_path> --tag <new_image_tag>
Здесь <source_image> - это образ, к которому вы хотите добавить аттестацию, <attestation_file_path> - это путь к файлу аттестации, а <new_image_tag> - это тег для нового манифеста образа, который будет включать аттестацию.
Давайте добавим файл ~/project/attestation.json к образу alpine:latest и пометим новый образ как alpine:attested.
docker buildx imagetools create alpine:latest --attestation-file ~/project/attestation.json --tag alpine:attested
Вы должны увидеть вывод, указывающий на то, что новый манифест образа создается и отправляется.
...
unpacking to docker.io/library/alpine:attested done
Эта команда создает новый манифест образа с тегом alpine:attested, который включает данные аттестации из файла ~/project/attestation.json. Исходный образ alpine:latest остается без изменений.
Теперь вы можете вывести список своих Docker-образов, чтобы увидеть недавно созданный образ alpine:attested.
docker images
В списке должны быть как alpine:latest, так и alpine:attested.
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine attested <image_id> ... ...
alpine latest <image_id> ... ...
...
Обратите внимание, что IMAGE ID может быть одинаковым для обоих образов, так как команда imagetools create часто переиспользует базовые слои образа и создает только новый манифест.
Добавить аттестацию с определенным типом предиката с использованием флага --predicate-type
На предыдущем этапе мы добавили аттестацию с использованием флага --attestation-file. Docker автоматически определил тип предиката из поля predicateType в JSON-файле. Однако вы также можете явно указать тип предиката с помощью флага --predicate-type. Это полезно, если ваши данные аттестации не содержат поле predicateType или если вы хотите переопределить значение, указанное в файле.
Базовый синтаксис добавления аттестации с определенным типом предиката выглядит следующим образом:
docker buildx imagetools create <source_image> --attestation-file <attestation_file_path> --predicate-type <predicate_type_url> --tag <new_image_tag>
Здесь <predicate_type_url> - это URL, представляющий тип аттестации.
Давайте снова добавим тот же файл ~/project/attestation.json к образу alpine:latest, но на этот раз мы явно укажем тип предиката как https://example.com/another-attestation/v2 и пометим новый образ как alpine:attested-v2.
docker buildx imagetools create alpine:latest --attestation-file ~/project/attestation.json --predicate-type https://example.com/another-attestation/v2 --tag alpine:attested-v2
Вы должны увидеть вывод, аналогичный предыдущему этапу, указывающий на создание нового манифеста образа.
...
unpacking to docker.io/library/alpine:attested-v2 done
Эта команда создает новый манифест образа с тегом alpine:attested-v2. Несмотря на то, что файл attestation.json содержит "predicateType": "https://example.com/attestation/v1", флаг --predicate-type переопределяет это значение, и аттестация в новом манифесте будет иметь тип предиката https://example.com/another-attestation/v2.
Давайте снова выведем список образов, чтобы увидеть новый тег.
docker images
Теперь вы должны увидеть alpine:latest, alpine:attested и alpine:attested-v2.
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine attested-v2 <image_id> ... ...
alpine attested <image_id> ... ...
alpine latest <image_id> ... ...
...
На следующем этапе мы проверим, что аттестации были добавлены правильно, и рассмотрим их содержимое.
Проверить добавленные аттестации
На этом последнем этапе мы проверим, что аттестации были успешно добавлены к образам, и рассмотрим их содержимое. Мы можем использовать команду docker buildx imagetools inspect для просмотра манифеста образа, который включает информацию о всех связанных с ним аттестациях.
Базовый синтаксис просмотра манифеста образа выглядит следующим образом:
docker buildx imagetools inspect <image_tag>
Сначала давайте рассмотрим образ alpine:attested, который мы создали с использованием флага --attestation-file.
docker buildx imagetools inspect alpine:attested
Вы должны увидеть подробный вывод о манифесте образа. Найдите раздел, связанный с "attestations" (аттестациями). Вы должны найти запись с типом предиката https://example.com/attestation/v1 и данными из вашего файла attestation.json.
...
"attestations": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"payload": "...",
"predicateType": "https://example.com/attestation/v1"
}
],
...
Теперь давайте рассмотрим образ alpine:attested-v2, который мы создали с использованием флага --predicate-type для переопределения типа предиката.
docker buildx imagetools inspect alpine:attested-v2
Снова найдите раздел "attestations". На этот раз вы должны увидеть запись с типом предиката https://example.com/another-attestation/v2, даже если содержимое данных аттестации такое же, как и раньше.
...
"attestations": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"payload": "...",
"predicateType": "https://example.com/another-attestation/v2"
}
],
...
Это подтверждает, что мы успешно добавили аттестации к Docker-образам и что флаг --predicate-type можно использовать для явного указания типа предиката.
Теперь вы узнали, как подготовить образ и файл аттестации, добавить аттестации к образу с использованием флагов --attestation-file и --predicate-type и проверить добавленные аттестации с помощью команды docker buildx imagetools inspect.
Резюме
В этом практическом занятии мы научились прикреплять аттестации к Docker-образу с помощью команды docker scout attestation add. Мы начали с подготовки Docker-образа (alpine:latest) и создания простого JSON-файла аттестации. Затем мы использовали команду docker scout attestation add с флагом --file для прикрепления файла аттестации к образу. Мы также изучили, как указать пользовательский тип предиката для аттестации с помощью флага --predicate-type. Наконец, мы проверили, что аттестации были успешно добавлены к образу.



