docker scout sbom 명령어를 사용하여 SBOM 생성 및 표시 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker scout sbom 명령을 사용하여 Docker 이미지에 대한 SBOM (Software Bill of Materials, 소프트웨어 자재 명세) 을 생성하고 표시하는 방법을 배우게 됩니다. 먼저 이미지 내의 소프트웨어 구성 요소에 대한 자세한 목록을 제공하는 JSON 형식의 기본 SBOM 을 생성하고 표시하는 것으로 시작합니다.

기본 SBOM 을 생성한 후, SBOM 에서 발견된 패키지의 보다 사람이 읽기 쉬운 목록을 표시하는 방법을 살펴보겠습니다. 또한 특정 범주의 구성 요소에 집중할 수 있도록 유형별로 이 패키지 목록을 필터링하는 방법도 배우게 됩니다. 마지막으로, 나중에 사용하거나 분석하기 위해 생성된 SBOM 을 파일에 쓰는 연습을 할 것입니다. 이 랩은 Docker 이미지의 구성을 이해하기 위해 docker scout sbom을 활용하는 데 필요한 기본적인 기술을 갖추도록 해줄 것입니다.

JSON 형식으로 기본 SBOM 생성 및 표시

이 단계에서는 Docker 이미지에 대한 기본 SBOM (Software Bill of Materials, 소프트웨어 자재 명세) 을 생성하고 JSON 형식으로 표시하는 방법을 배우겠습니다. SBOM 은 소프트웨어 구성 요소를 구성하는 재료의 공식 목록입니다. 이는 소프트웨어의 포장 목록과 같아서 사용된 모든 타사 구성 요소, 라이브러리 및 종속성을 자세히 설명합니다. SBOM 을 생성하는 것은 소프트웨어의 보안 상태 및 라이선스 준수를 이해하는 데 매우 중요합니다.

syft 도구를 사용하여 SBOM 을 생성합니다. syft는 컨테이너 이미지 및 파일 시스템에서 SBOM 을 생성하기 위한 명령줄 도구 및 라이브러리입니다.

먼저, 이 데모에 사용할 간단한 Docker 이미지를 가져오겠습니다. 가벼운 Linux 배포판인 alpine:latest 이미지를 사용합니다.

docker pull alpine:latest

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

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

이제 이미지가 있으므로 SBOM 을 생성할 수 있습니다. 이미지 이름과 함께 syft 명령을 사용하고 출력 형식을 JSON 으로 지정합니다.

syft alpine:latest -o json

이 명령은 alpine:latest 이미지를 분석하고 SBOM 을 JSON 형식으로 터미널에 직접 출력합니다. 출력은 이미지에서 발견된 패키지에 대한 정보 (이름, 버전, 라이선스 및 유형 포함) 를 포함하는 큰 JSON 객체입니다.

출력을 스크롤하여 SBOM 에 나열된 다양한 구성 요소를 볼 수 있습니다. 이 기본 JSON 출력은 이미지 내의 소프트웨어 구성 요소에 대한 포괄적인 보기를 제공합니다.

SBOM 내 패키지 목록 표시

이전 단계에서는 JSON 형식으로 자세한 SBOM 을 생성했습니다. 포괄적이긴 하지만 JSON 출력은 터미널에서 직접 읽기가 어려울 수 있습니다. 이 단계에서는 Docker 이미지에서 발견된 패키지의 보다 사람이 읽기 쉬운 목록을 표시하는 방법을 배우겠습니다.

syft는 스캔하고 이해하기 쉬운 간단한 테이블 형식을 제공합니다. -o table 옵션을 사용하여 이 형식으로 SBOM 을 생성할 수 있습니다.

syft alpine:latest -o table

이 명령은 alpine:latest 이미지를 다시 분석하지만 이번에는 SBOM 을 테이블로 출력합니다. 테이블에는 일반적으로 NAME, VERSION, TYPELOCATIONS와 같은 열이 포함됩니다.

다음과 유사한 출력을 볼 수 있습니다.

 ✔ Loaded image
 ✔ Analyzed image
 ├── apk
 │   ├── busybox
 │   ├── alpine-baselayout
 │   ├── alpine-keys
 │   ├── apk-tools
 │   ├── zlib
 │   ├── libcrypto1.1
 │   ├── libssl1.1
 │   ├── musl
 │   ├── musl-utils
 │   ├── scanelf
 │   ├── ssl_certs
 │   └── zlib
 └── filesystem
     └── etc/os-release

이 테이블 형식은 이미지에 설치된 패키지의 이름과 버전을 빠르게 확인하는 데 훨씬 더 유용합니다. 이는 이미지의 내용을 빠르게 개략적으로 파악하는 데 특히 유용합니다.

유형별 패키지 목록 필터링

이전 단계에서는 JSON 출력보다 읽기 쉬운 테이블 형식으로 SBOM 을 표시했습니다. 그러나 때로는 특정 유형의 패키지에만 관심이 있을 수 있습니다. 예를 들어 운영 체제 패키지 또는 애플리케이션 종속성만 보고 싶을 수 있습니다.

syft를 사용하면 --package-type 옵션을 사용하여 유형별로 패키지 목록을 필터링할 수 있습니다. 출력에 포함할 하나 이상의 패키지 유형을 지정할 수 있습니다. 일반적인 패키지 유형에는 apk, deb, rpm, gem, npm, pip, go-module 등이 있습니다. alpine:latest 이미지의 경우 기본 패키지 유형은 apk입니다.

SBOM 을 필터링하여 apk 유형의 패키지만 표시해 보겠습니다.

syft alpine:latest -o table --package-type apk

이 명령은 테이블 형식으로 SBOM 을 생성하지만 패키지 유형이 apk인 항목만 포함합니다.

이전 단계의 테이블과 유사한 출력을 볼 수 있지만 이미지에 다른 패키지 유형이 있는 경우 항목 수가 더 적을 수 있습니다 (alpine 과 같은 최소 이미지의 경우 apk가 주요 유형임).

 ✔ Loaded image
 ✔ Analyzed image
 ├── apk
 │   ├── busybox
 │   ├── alpine-baselayout
 │   ├── alpine-keys
 │   ├── apk-tools
 │   ├── zlib
 │   ├── libcrypto1.1
 │   ├── libssl1.1
 │   ├── musl
 │   ├── musl-utils
 │   ├── scanelf
 │   ├── ssl_certs
 │   └── zlib

이 필터링 기능은 컨테이너 이미지 내에서 특정 레이어 또는 종속성 유형에 집중해야 할 때 매우 유용합니다.

SBOM 을 파일로 저장

이전 단계에서는 다양한 형식으로 SBOM 을 터미널에 직접 표시했습니다. 빠른 검사에는 유용하지만, 추가 처리, 분석 또는 공유를 위해 SBOM 을 파일에 저장해야 하는 경우가 많습니다.

syft를 사용하면 원하는 형식과 파일로의 리디렉션을 사용하여 -o 옵션을 사용하여 SBOM 출력을 파일에 쓸 수 있습니다. JSON, SPDX 및 CycloneDX 를 포함한 다양한 형식으로 SBOM 을 출력할 수 있습니다. JSON 은 일반적이고 다재다능한 형식입니다.

JSON 형식으로 SBOM 을 생성하고 현재 디렉토리 (~/project) 에 alpine_sbom.json이라는 파일에 저장해 보겠습니다.

syft alpine:latest -o json > alpine_sbom.json

이 명령은 alpine:latest 이미지에 대한 SBOM 을 JSON 형식으로 생성하고 출력을 alpine_sbom.json 파일로 리디렉션합니다. 이번에는 터미널에서 JSON 출력을 볼 수 없습니다.

파일이 생성되었고 SBOM 데이터를 포함하는지 확인하려면 ls 명령을 사용하여 현재 디렉토리의 파일을 나열하고 cat 명령을 사용하여 파일의 내용을 표시할 수 있습니다.

ls

파일 목록에 alpine_sbom.json이 표시되어야 합니다.

alpine_sbom.json

이제 파일의 내용을 살펴보겠습니다.

cat alpine_sbom.json

첫 번째 단계에서 보았던 JSON 형식의 SBOM 출력을 볼 수 있지만 이제 alpine_sbom.json 파일에 저장됩니다.

SBOM 을 파일에 저장하는 것은 SBOM 생성을 CI/CD 파이프라인에 통합하거나 다른 사람과 SBOM 을 공유하기 위한 표준 관행입니다.

요약

이 랩에서는 syft 도구를 사용하여 Docker 이미지에 대한 기본 SBOM(Software Bill of Materials) 을 생성하고 표시하는 방법을 배웠습니다. 먼저 alpine:latest 이미지를 가져온 다음 syft alpine:latest -o json 명령을 사용하여 JSON 형식으로 SBOM 을 생성하고 표시하여 이미지 내의 소프트웨어 구성 요소에 대한 자세한 목록을 제공했습니다.

그런 다음 SBOM 에서 더 읽기 쉬운 패키지 목록을 표시하고, 이 목록을 패키지 유형별로 필터링하고, 마지막으로 생성된 SBOM 을 나중에 사용하거나 분석하기 위해 파일에 쓰는 방법을 살펴보았습니다. 이러한 단계는 Docker 이미지의 구성을 이해하기 위한 syft의 기본적인 기능을 보여줍니다.