Как использовать команду docker scout attestation add для прикрепления аттестаций к образу

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

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь прикреплять аттестации к Docker-образу с помощью команды docker scout attestation add. Аттестации представляют собой ценную метаданные, которые могут предоставить важную информацию о происхождении образа, процессе сборки, результатах сканирования безопасности и многом другом.

Вы начнете с подготовки Docker-образа и простого файла аттестации. Затем вы используете команду docker scout attestation add с флагом --file для прикрепления аттестации к образу. Также вы узнаете, как указать определенный тип предиката для аттестации с помощью флага --predicate-type. Наконец, вы убедитесь, что аттестации были успешно добавлены к образу.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/ls -.-> lab-555197{{"Как использовать команду docker scout attestation add для прикрепления аттестаций к образу"}} docker/inspect -.-> lab-555197{{"Как использовать команду docker scout attestation add для прикрепления аттестаций к образу"}} docker/pull -.-> lab-555197{{"Как использовать команду docker scout attestation add для прикрепления аттестаций к образу"}} docker/images -.-> lab-555197{{"Как использовать команду docker scout attestation add для прикрепления аттестаций к образу"}} docker/build -.-> lab-555197{{"Как использовать команду docker scout attestation add для прикрепления аттестаций к образу"}} end

Подготовка образа и файла аттестации

На этом этапе мы подготовим 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. Наконец, мы проверили, что аттестации были успешно добавлены к образу.