docker scout attestation add 명령을 사용하여 이미지에 증명 첨부하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker scout attestation add 명령을 사용하여 Docker 이미지에 증명 (attestation) 을 첨부하는 방법을 배우게 됩니다. 증명은 이미지의 출처, 빌드 프로세스, 보안 스캔 결과 등에 대한 중요한 정보를 제공할 수 있는 가치 있는 메타데이터입니다.

먼저 Docker 이미지와 간단한 증명 파일을 준비하는 것으로 시작합니다. 그런 다음 --file 플래그와 함께 docker scout attestation add 명령을 사용하여 증명을 이미지에 첨부합니다. 또한 --predicate-type 플래그를 사용하여 증명에 특정 술어 유형 (predicate type) 을 지정하는 방법도 살펴봅니다. 마지막으로, 증명이 이미지에 성공적으로 추가되었는지 확인합니다.

이미지와 증명 파일 준비

이 단계에서는 Docker 이미지와 증명 파일을 준비합니다. 증명은 이미지에 대한 정보를 제공하는 메타데이터 조각으로, 이미지의 빌드 방식, 취약점 검사 여부 또는 서명 여부 등을 포함합니다. 이 예제에서는 간단한 텍스트 파일을 증명 파일로 사용합니다.

먼저 사용할 기본 Docker 이미지를 가져옵니다. 가벼운 Linux 배포판인 alpine 이미지를 사용합니다.

docker pull alpine:latest

이미지가 풀링되고 다운로드되고 있음을 나타내는 출력을 볼 수 있습니다.

latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

다음으로, 간단한 증명 파일을 생성합니다. 이 파일에는 임의의 JSON 데이터가 포함됩니다. 실제 시나리오에서는 이 파일에 빌드 정보, 스캔 결과 또는 서명 세부 정보와 같은 이미지에 대한 구조화된 데이터가 포함됩니다.

~/project 디렉토리에 attestation.json이라는 파일을 생성합니다.

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 이미지에 추가합니다. --attestation-file 플래그와 함께 docker buildx imagetools create 명령을 사용합니다. 이 명령을 사용하면 증명을 포함한 추가 메타데이터로 새 이미지 매니페스트를 생성할 수 있습니다.

증명 파일을 추가하기 위한 기본 구문은 다음과 같습니다.

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

이 명령은 ~/project/attestation.json의 증명 데이터를 포함하는 alpine:attested 태그가 있는 새 이미지 매니페스트를 생성합니다. 원래의 alpine:latest 이미지는 변경되지 않습니다.

이제 Docker 이미지를 나열하여 새로 생성된 alpine:attested 이미지를 볼 수 있습니다.

docker images

목록에 alpine:latestalpine:attested가 모두 표시되어야 합니다.

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
alpine       attested  <image_id>     ...            ...
alpine       latest    <image_id>     ...            ...
...

imagetools create는 종종 기본 이미지 레이어를 재사용하고 새 매니페스트만 생성하므로 IMAGE ID가 두 이미지에 대해 동일할 수 있습니다.

--predicate-type 옵션을 사용하여 특정 predicate type 으로 증명 추가

이전 단계에서는 --attestation-file 플래그를 사용하여 증명을 추가했습니다. Docker 는 JSON 파일 내의 predicateType 필드에서 predicate type 을 자동으로 추론했습니다. 그러나 --predicate-type 플래그를 사용하여 명시적으로 predicate type 을 지정할 수도 있습니다. 이는 증명 데이터에 predicateType 필드가 포함되어 있지 않거나 파일의 필드를 재정의하려는 경우에 유용합니다.

특정 predicate type 으로 증명을 추가하기 위한 기본 구문은 다음과 같습니다.

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 이미지에 추가해 보지만, 이번에는 predicate type 을 명시적으로 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 predicate type 을 갖게 됩니다.

새 태그를 확인하기 위해 이미지를 다시 나열해 보겠습니다.

docker images

이제 alpine:latest, alpine:attestedalpine: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>

먼저 --attestation-file 플래그를 사용하여 생성한 alpine:attested 이미지를 검사해 보겠습니다.

docker buildx imagetools inspect alpine:attested

이미지 매니페스트에 대한 자세한 출력을 볼 수 있습니다. "attestations"와 관련된 섹션을 찾으십시오. https://example.com/attestation/v1 predicate type 과 attestation.json 파일의 데이터가 있는 항목을 찾아야 합니다.

...
  "attestations": [
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "payload": "...",
      "predicateType": "https://example.com/attestation/v1"
    }
  ],
...

이제 --predicate-type 플래그를 사용하여 predicate type 을 재정의하여 생성한 alpine:attested-v2 이미지를 검사해 보겠습니다.

docker buildx imagetools inspect alpine:attested-v2

다시 "attestations" 섹션을 찾으십시오. 이번에는 증명 데이터의 내용이 이전과 동일하더라도 https://example.com/another-attestation/v2 predicate type 이 있는 항목을 볼 수 있습니다.

...
  "attestations": [
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "payload": "...",
      "predicateType": "https://example.com/another-attestation/v2"
    }
  ],
...

이를 통해 Docker 이미지에 증명을 성공적으로 추가했으며 --predicate-type 플래그를 사용하여 predicate type 을 명시적으로 설정할 수 있음을 확인할 수 있습니다.

이제 이미지와 증명 파일을 준비하고, --attestation-file--predicate-type 플래그를 모두 사용하여 이미지에 증명을 추가하고, docker buildx imagetools inspect를 사용하여 추가된 증명을 확인하는 방법을 배웠습니다.

요약

이 랩에서는 docker scout attestation add 명령을 사용하여 Docker 이미지에 증명을 첨부하는 방법을 배웠습니다. 먼저 Docker 이미지 (alpine:latest) 를 준비하고 간단한 JSON 증명 파일을 만들었습니다. 그런 다음 --file 플래그와 함께 docker scout attestation add 명령을 사용하여 증명 파일을 이미지에 첨부했습니다. 또한 --predicate-type 플래그를 사용하여 증명에 대한 사용자 지정 predicate type 을 지정하는 방법도 살펴보았습니다. 마지막으로, 증명이 이미지에 성공적으로 추가되었는지 확인했습니다.