Amazon Inspector SBOM 생성기 - Amazon Inspector

Amazon Inspector SBOM 생성기

소프트웨어 자재 명세서(SBOM)는 소프트웨어를 빌드하는 데 필요한 구성 요소, 라이브러리 및 모듈을 정식으로 구조화한 목록입니다. Amazon Inspector SBOM 생성기(Sbomgen)는 아카이브, 컨테이너 이미지, 디렉토리, 로컬 시스템, 컴파일된 Go 및 Rust 바이너리에 대한 SBOM을 생성하는 도구입니다. Sbomgen은 설치된 패키지에 대한 정보가 포함된 파일을 스캔합니다. Sbomgen에서 관련 파일을 찾으면 패키지 이름, 버전 및 기타 메타데이터를 추출합니다. 그런 다음 Sbomgen은 패키지 메타데이터를 CycloneDX SBOM으로 변환합니다. 사용자는 Sbomgen을 사용하여 CycloneDX SBOM을 파일 또는 STDOUT으로 생성하고 취약성 탐지를 위해 SBOM을 Amazon Inspector로 전송할 수 있습니다. 또한 배포 파이프라인의 일부로 컨테이너 이미지를 자동으로 스캔하는 CI/CD 통합의 일부로 Sbomgen을 사용할 수도 있습니다.

지원되는 패키지 유형

Sbomgen은 다음 패키지 유형에 대한 인벤토리를 수집합니다.

  • Alpine APK

  • Debian/Ubuntu DPKG

  • Red Hat RPM

  • C#

  • Go

  • Java

  • Node.js

  • PHP

  • Python

  • Ruby

  • Rust

지원되는 컨테이너 이미지 구성 검사

Sbomgen은 독립 실행형 Dockerfile과 기존 이미지의 빌드 이력을 스캔하여 보안 문제를 점검할 수 있습니다. 자세한 내용은 Amazon Inspector Dockerfile 검사를 참조하세요.

Sbomgen 설치

Sbomgen은 Linux 운영 체제에서만 사용할 수 있습니다.

Sbomgen이 로컬에 캐시된 이미지를 분석하려면 Docker가 설치되어 있어야 합니다. .tar 파일로 내보낸 이미지나 원격 컨테이너 레지스트리에서 호스팅된 이미지를 분석하는 데는 Docker가 필요하지 않습니다.

Amazon Inspector는 최소한 다음 하드웨어 사양을 갖춘 시스템에서 Sbomgen을 실행할 것을 권장합니다.

  • 4x 코어 CPU

  • 8GB RAM

Sbomgen을(를) 설치하려면
  1. 아키텍처에 맞는 올바른 URL에서 최신 Sbomgen zip 파일을 다운로드합니다.

    Linux AMD64: https://amazon-inspector-sbomgen.s3.amazonaws.com/latest/linux/amd64/inspector-sbomgen.zip

    Linux ARM64: https://amazon-inspector-sbomgen.s3.amazonaws.com/latest/linux/arm64/inspector-sbomgen.zip

    또는 Amazon Inspector SBOM 생성기 zip 파일의 이전 버전을 다운로드할 수 있습니다.

  2. 다음 명령을 사용하여 다운로드를 압축 해제합니다.

    unzip inspector-sbomgen.zip

  3. 추출된 디렉터리에서 다음 파일을 확인합니다.

    • inspector-sbomgen - SBOM을 생성하기 위해 실행하는 도구입니다.

    • README.txt - Sbomgen 사용 설명서입니다.

    • LICENSE.txt - 이 파일에는 Sbomgen에 대한 소프트웨어 라이선스가 들어 있습니다.

    • licenses - 이 폴더에는 Sbomgen에서 사용하는 서드 파티 패키지의 라이선스 정보가 들어 있습니다.

    • checksums.txt - 이 파일은 Sbomgen 도구의 해시를 제공합니다.

    • sbom.json - Sbomgen 도구용 CycloneDX SBOM입니다.

    • WhatsNew.txt - 이 파일에는 요약된 변경 로그가 포함되어 있으므로 Sbomgen 버전 간의 주요 변경 사항과 개선 사항을 빠르게 확인할 수 있습니다.

  4. (선택 사항) 다음 명령을 사용하여 도구의 신뢰성과 무결성을 확인합니다.

    sha256sum < inspector-sbomgen

    1. 결과를 checksums.txt 파일 콘텐츠와 비교하세요.

  5. 다음 명령을 사용하여 도구에 실행 권한을 부여합니다.

    chmod +x inspector-sbomgen

  6. 다음 명령을 실행하여 Sbomgen이 성공적으로 설치되었는지 확인합니다.

    ./inspector-sbomgen --version

    다음과 유사한 출력 화면이 표시되어야 합니다.

    Version: 1.X.X

Sbomgen 사용하기

이 단원에서는 Sbomgen을 사용할 수 있는 다양한 방법에 대해 설명합니다. 기본 제공 예제를 통해 Sbomgen 사용 방법에 대해 자세히 알아볼 수 있습니다. 이러한 예제를 보려면 list-examples 명령을 실행합니다.

./inspector-sbomgen list-examples

컨테이너 이미지에 대한 SBOM 생성 및 결과 출력

Sbomgen을 사용하여 컨테이너 이미지에 대한 SBOM을 생성하고 결과를 파일로 출력할 수 있습니다. 이 기능은 container 하위 명령을 사용하여 활성화할 수 있습니다.

명령 예:

다음 스니펫에서 image:tag는 이미지 ID로 바꾸고, output_path.json은 저장하려는 출력 경로로 바꿀 수 있습니다.

# generate SBOM for container image ./inspector-sbomgen container --image image:tag -o output_path.json
참고

스캔 시간과 성능은 이미지 크기와 계층 수에 따라 달라집니다. 이미지가 작을수록 Sbomgen 성능이 향상될 뿐만 아니라 잠재적인 공격 표면도 줄어듭니다. 이미지가 작을수록 이미지 빌드, 다운로드, 업로드 시간도 단축됩니다.

ScanSbom과 함께 Sbomgen을 사용하는 경우, Amazon Inspector 스캔 API는 패키지 수가 2,000개를 초과하는 SBOM을 처리하지 않습니다. 이 시나리오에서 Amazon Inspector 스캔 API는 HTTP 400 응답을 반환합니다.

이미지에 대용량 미디어 파일 또는 디렉터리가 포함된 경우 --skip-files 인수를 사용하여 Sbomgen에서 이를 제외하는 것이 좋습니다.

디렉터리 및 아카이브에서 SBOM 생성

Sbomgen을 사용하여 디렉터리 및 아카이브에서 SBOM을 생성할 수 있습니다. 이 기능은 directory 또는 archive 하위 명령을 사용하여 활성화할 수 있습니다. Amazon Inspector는 다운로드한 git 리포지토리와 같은 프로젝트 폴더에서 SBOM을 생성하려는 경우에 이 기능을 사용할 것을 권장합니다.

명령 예제 1

다음 스니펫은 디렉터리 파일에서 SBOM을 생성하는 하위 명령을 보여줍니다.

# generate SBOM from directory ./inspector-sbomgen directory --path /path/to/dir -o /tmp/sbom.json
명령 예제 2

다음 스니펫은 아카이브 파일에서 SBOM을 생성하는 하위 명령을 보여줍니다. .zip, .tar, .tar.gz 아카이브 형식만 지원됩니다.

# generate SBOM from archive file (tar, tar.gz, and zip formats only) ./inspector-sbomgen archive --path testData.zip -o /tmp/sbom.json

Go 또는 Rust 컴파일된 바이너리에서 SBOM 생성

Sbomgen을 사용하여 컴파일된 Go 및 Rust 바이너리에서 SBOM을 생성할 수 있습니다. 이 기능은 binary 하위 명령을 통해 활성화할 수 있습니다.

./inspector-sbomgen binary --path /path/to/your/binary

취약성 식별을 위해 Amazon Inspector로 SBOM 전송

SBOM을 생성하는 것 외에도 Amazon Inspector 스캔 API에서 한 번의 명령으로 스캔을 위해 SBOM을 전송할 수 있습니다. Amazon Inspector는 SBOM의 내용을 평가하여 취약성이 있는지 확인한 후 조사 결과를 Sbomgen에 반환합니다. 사용자의 입력에 따라 조사 결과를 표시하거나 파일에 기록할 수 있습니다.

참고

이 기능을 사용하려면 InspectorScan-ScanSbom에 대한 읽기 권한이 있는 활성 AWS 계정이 있어야 합니다.

이 기능을 활성화하려면 --scan-sbom 인수를 Sbomgen CLI에 전달합니다. --scan-sbom 인수를 Sbomgen 하위 명령 archive, binary, container, directory, localhost 중 하나에 전달할 수도 있습니다.

참고

Amazon Inspector 스캔 API는 패키지 수가 2,000개를 초과하는 SBOM을 처리하지 않습니다. 이 시나리오에서 Amazon Inspector 스캔 API는 HTTP 400 응답을 반환합니다.

다음 AWS CLI 인수를 사용하여 AWS 프로필 또는 IAM 역할을 통해 Amazon Inspector에 인증할 수 있습니다.

--aws-profile profile --aws-region region --aws-iam-role-arn role_arn

다음 환경 변수를 Sbomgen에 제공하여 Amazon Inspector에 인증할 수도 있습니다.

AWS_ACCESS_KEY_ID=$access_key \ AWS_SECRET_ACCESS_KEY=$secret_key \ AWS_DEFAULT_REGION=$region \ ./inspector-sbomgen arguments

응답 형식을 지정하려면 --scan-sbom-output-format cyclonedx 인수 또는 --scan-sbom-output-format inspector 인수를 사용합니다.

명령 예제 1

이 명령은 최신 Alpine Linux 릴리스에 대한 SBOM을 생성하고, SBOM을 스캔하고, 취약성 결과를 JSON 파일에 기록합니다.

./inspector-sbomgen container --image alpine:latest \ --scan-sbom \ --aws-profile your_profile \ --aws-region your_region \ --scan-sbom-output-format cyclonedx \ --outfile /tmp/inspector_scan.json
명령 예제 2

이 명령은 AWS 자격 증명을 환경 변수로 사용하여 Amazon Inspector에 인증합니다.

AWS_ACCESS_KEY_ID=$your_access_key \ AWS_SECRET_ACCESS_KEY=$your_secret_key \ AWS_DEFAULT_REGION=$your_region \ ./inspector-sbomgen container --image alpine:latest \ -o /tmp/sbom.json \ --scan-sbom \ --scan-sbom-output-format inspector
명령 예제 3

이 명령은 IAM 역할에 대한 ARN을 사용하여 Amazon Inspector에 인증합니다.

./inspector-sbomgen container --image alpine:latest \ --scan-sbom \ --aws-profile your_profile \ --aws-region your_region \ --outfile /tmp/inspector_scan.json --aws-iam-role-arn arn:aws:iam::123456789012:role/your_role

특정 파일을 제외하도록 스캔 사용자 지정

컨테이너 이미지를 분석하고 처리할 때 Sbomgen은 해당 컨테이너 이미지에 있는 모든 파일의 크기를 스캔합니다. 특정 파일을 제외하거나 특정 패키지를 대상으로 지정하도록 스캔을 사용자 지정할 수 있습니다.

디스크 사용량, RAM 사용량, 경과된 런타임을 줄이고 제공된 임곗값을 초과하는 파일을 건너뛰려면 --max-file-size 인수를 container 하위 명령과 함께 사용합니다.

./inspector-sbomgen container --image alpine:latest \ --outfile /tmp/sbom.json \ --max-file-size 300000000

진행률 표시기 비활성화

Sbomgen은 CI/CD 환경에서 과도한 슬래시 문자를 초래할 수 있는 회전 진행률 표시기를 표시합니다.

INFO[2024-02-01 14:58:46]coreV1.go:53: analyzing artifact | \ / | \ / INFO[2024-02-01 14:58:46]coreV1.go:62: executing post-processors

--disable-progress-bar 인수를 사용하여 진행률 표시기를 비활성화할 수 있습니다.

./inspector-sbomgen container --image alpine:latest \ --outfile /tmp/sbom.json \ --disable-progress-bar

Sbomgen을 사용하여 프라이빗 레지스트리에 인증

프라이빗 레지스트리 인증 자격 증명을 제공하면 프라이빗 레지스트리에서 호스팅되는 컨테이너에서 SBOM을 생성할 수 있습니다. 이러한 자격 증명은 다음 방법을 통해 제공할 수 있습니다.

캐시된 자격 증명을 사용하여 인증(권장)

이 방법을 사용하려면 컨테이너 레지스트리에 인증해야 합니다. 예를 들어 Docker를 사용하는 경우 Docker loging 명령 docker login을 사용하여 컨테이너 레지스트리에 인증할 수 있습니다.

  1. 컨테이너 레지스트리에 인증합니다. 예를 들어 Docker를 사용하는 경우 Docker login 명령을 사용하여 레지스트리에 인증할 수 있습니다.

  2. 컨테이너 레지스트리에 인증한 후 레지스트리에 있는 컨테이너 이미지에 Sbomgen을 사용합니다. 다음 예를 사용하려면 image:tag를 스캔할 이미지의 이름으로 바꾸세요.

./inspector-sbomgen container --image image:tag

대화형 방법을 사용한 인증

이 방법의 경우 사용자 이름을 파라미터로 제공하면 Sbomgen에서 필요할 때 보안 암호 입력을 요구하는 메시지를 표시합니다.

다음 예를 사용하려면 image:tag는 스캔할 이미지의 이름으로 바꾸고, your_username은 해당 이미지에 액세스할 수 사용자 이름으로 바꿉니다.

./inspector-sbomgen container --image image:tag --username your_username

비대화형 방법을 사용한 인증

이 방법의 경우 암호 또는 레지스트리 토큰을 .txt 파일에 저장합니다.

참고

현재 사용자는 이 파일을 읽을 수만 있어야 합니다. 파일에는 암호 또는 토큰이 한 줄에 포함되어야 합니다.

다음 예를 사용하려면 your_username은 사용자 이름으로, password.txt는 암호 또는 토큰이 한 줄에 포함된 .txt 파일로, image:tag는 스캔할 이미지의 이름으로 바꿉니다.

INSPECTOR_SBOMGEN_USERNAME=your_username \ INSPECTOR_SBOMGEN_PASSWORD=`cat password.txt` \ ./inspector-sbomgen container --image image:tag

Sbomgen의 예시 출력

다음은 Sbomgen을 사용하여 인벤토리에 추가된 컨테이너 이미지에 대한 SBOM의 예입니다.

{ "bomFormat": "CycloneDX", "specVersion": "1.5", "serialNumber": "urn:uuid:828875ef-8c32-4777-b688-0af96f3cf619", "version": 1, "metadata": { "timestamp": "2023-11-17T21:36:38Z", "tools": [ { "vendor": "Amazon Web Services, Inc. (AWS)", "name": "Amazon Inspector SBOM Generator", "version": "1.0.0", "hashes": [ { "alg": "SHA-256", "content": "10ab669cfc99774786301a745165b5957c92ed9562d19972fbf344d4393b5eb1" } ] } ], "component": { "bom-ref": "comp-1", "type": "container", "name": "fedora:latest", "properties": [ { "name": "amazon:inspector:sbom_generator:image_id", "value": "sha256:c81c8ae4dda7dedc0711daefe4076d33a88a69a28c398688090c1141eff17e50" }, { "name": "amazon:inspector:sbom_generator:layer_diff_id", "value": "sha256:eddd0d48c295dc168d0710f70364581bd84b1dda6bb386c4a4de0b61de2f2119" } ] } }, "components": [ { "bom-ref": "comp-2", "type": "library", "name": "dnf", "version": "4.18.0", "purl": "pkg:pypi/dnf@4.18.0", "properties": [ { "name": "amazon:inspector:sbom_generator:source_file_scanner", "value": "python-pkg" }, { "name": "amazon:inspector:sbom_generator:source_package_collector", "value": "python-pkg" }, { "name": "amazon:inspector:sbom_generator:source_path", "value": "/usr/lib/python3.12/site-packages/dnf-4.18.0.dist-info/METADATA" }, { "name": "amazon:inspector:sbom_generator:is_duplicate_package", "value": "true" }, { "name": "amazon:inspector:sbom_generator:duplicate_purl", "value": "pkg:rpm/fedora/python3-dnf@4.18.0-2.fc39?arch=noarch&distro=39&epoch=0" } ] }, { "bom-ref": "comp-3", "type": "library", "name": "libcomps", "version": "0.1.20", "purl": "pkg:pypi/libcomps@0.1.20", "properties": [ { "name": "amazon:inspector:sbom_generator:source_file_scanner", "value": "python-pkg" }, { "name": "amazon:inspector:sbom_generator:source_package_collector", "value": "python-pkg" }, { "name": "amazon:inspector:sbom_generator:source_path", "value": "/usr/lib64/python3.12/site-packages/libcomps-0.1.20-py3.12.egg-info/PKG-INFO" }, { "name": "amazon:inspector:sbom_generator:is_duplicate_package", "value": "true" }, { "name": "amazon:inspector:sbom_generator:duplicate_purl", "value": "pkg:rpm/fedora/python3-libcomps@0.1.20-1.fc39?arch=x86_64&distro=39&epoch=0" } ] } ] }