

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Inspector SBOM 생성기
<a name="sbom-generator"></a>

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

## 지원되는 패키지 유형
<a name="sbomgen-supported"></a>

 Sbomgen은 다음 패키지 유형에 대한 인벤토리를 수집합니다.
+  Alpine APK 
+  Debian/Ubuntu DPKG 
+  Red Hat RPM 
+  C\$1 
+  Go 
+  Java 
+  Node.js 
+  PHP 
+  Python 
+  Ruby 
+  Rust 

## 지원되는 컨테이너 이미지 구성 검사
<a name="sbomgen-supported-configuration"></a>

 Sbomgen은 독립 실행형 Dockerfile과 기존 이미지의 빌드 이력을 스캔하여 보안 문제를 점검할 수 있습니다. 자세한 내용은 [Amazon Inspector Dockerfile 검사](https://docs.aws.amazon.com/inspector/latest/user/dockerfile-checks.html)를 참조하세요.

## Sbomgen 설치하기
<a name="install-sbomgen"></a>

 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](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](https://amazon-inspector-sbomgen.s3.amazonaws.com/latest/linux/arm64/inspector-sbomgen.zip) 

    또는 [Amazon Inspector SBOM 생성기 zip 파일의 이전 버전](https://docs.aws.amazon.com/inspector/latest/user/sbom-generator-versions.html)을 다운로드할 수 있습니다.

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

    `unzip inspector-sbomgen.zip` 

1.  추출된 디렉터리에서 다음 파일을 확인합니다.
   +  `inspector-sbomgen` - SBOM을 생성하기 위해 실행하는 도구입니다.
   +  `README.txt` - Sbomgen 사용 설명서입니다.
   +  `LICENSE.txt` - 이 파일에는 Sbomgen에 대한 소프트웨어 라이선스가 들어 있습니다.
   +  `licenses` - 이 폴더에는 Sbomgen에서 사용하는 서드 파티 패키지의 라이선스 정보가 들어 있습니다.
   +  `checksums.txt` - 이 파일은 Sbomgen 도구의 해시를 제공합니다.
   +  `sbom.json` - Sbomgen 도구용 CycloneDX SBOM입니다.
   +  `WhatsNew.txt` - 이 파일에는 요약된 변경 로그가 포함되어 있으므로 Sbomgen 버전 간의 주요 변경 사항과 개선 사항을 빠르게 확인할 수 있습니다.

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

    `sha256sum < inspector-sbomgen` 

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

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

    `chmod +x inspector-sbomgen` 

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

    `./inspector-sbomgen --version` 

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

    `Version: 1.X.X ` 

## Sbomgen 사용하기
<a name="using-sbomgen"></a>

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

```
./inspector-sbomgen list-examples
```

### 컨테이너 이미지에 대한 SBOM 생성 및 결과 출력
<a name="w2aac37c11b7"></a>

 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 성능이 향상될 뿐만 아니라 잠재적인 공격 표면도 줄어듭니다. 이미지가 작을수록 이미지 빌드, 다운로드, 업로드 시간도 단축됩니다.

 와 Sbomgen 함께 [https://docs.aws.amazon.com/inspector/v2/APIReference/API_scan_ScanSbom.html](https://docs.aws.amazon.com/inspector/v2/APIReference/API_scan_ScanSbom.html)를 사용하는 경우 Amazon Inspector 스캔 API는 5,000개 이상의 패키지가 포함된 SBOMs 처리하지 않습니다. 이 시나리오에서 Amazon Inspector 스캔 API는 HTTP 400 응답을 반환합니다.

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

**예: 일반적인 오류 사례**  
 컨테이너 이미지 스캔은 다음 오류로 인해 실패할 수 있습니다.
+  `InvalidImageFormat` - 잘못된 형식의 컨테이너 이미지를 손상된 TAR 헤더, 매니페스트 파일 또는 구성 파일로 스캔할 때 발생합니다.
+  `ImageValidationFailure` - 일치하지 않는 Content-Length 헤더, 잘못된 매니페스트 다이제스트 또는 실패한 SHA256 체크섬 확인과 같은 컨테이너 이미지 구성 요소에 대해 체크섬 또는 콘텐츠 길이 검증이 실패할 때 발생합니다.
+  `ErrUnsupportedMediaType` - 이미지 구성 요소에 지원되지 않는 미디어 유형이 포함된 경우 발생합니다. 지원되는 미디어 유형에 대한 자세한 내용은 [지원되는 운영 체제 및 미디어 유형](https://docs.aws.amazon.com/inspector/latest/user/scanning-ecr.html#ecr-supported-media)을 참조하세요.

 Amazon Inspector는 `application/vnd.docker.distribution.manifest.list.v2+json` 미디어 유형을 지원하지 않습니다. 그러나 Amazon Inspector는 매니페스트 목록을 지원합니다. 매니페스트 목록을 사용하는 이미지를 스캔할 때 `--platform` 인수와 함께 사용할 플랫폼을 명시적으로 지정할 수 있습니다. `--platform` 인수를 지정하지 않으면 Amazon Inspector SBOM 생성기가 실행 중인 플랫폼을 기반으로 매니페스트를 자동으로 선택합니다.

### 디렉터리 및 아카이브에서 SBOM 생성
<a name="w2aac37c11b9"></a>

 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 생성
<a name="w2aac37c11c11"></a>

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

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

### 탑재된 볼륨에서 SBOM 생성
<a name="w2aac37c11c13"></a>

 Amazon Inspector SBOM 생성기를 사용하여 탑재된 볼륨에서 SBOM을 생성할 수 있습니다. 이 기능은 `volume` 하위 명령을 사용하여 활성화할 수 있습니다. 시스템에 탑재된 Amazon EBS 볼륨과 같은 스토리지 볼륨을 분석하려는 경우이 특성을 사용하는 것이 좋습니다. 디렉터리 하위 명령과 달리 탑재 볼륨 스캔은 OS 패키지 및 OS 정보를 감지합니다.

 Amazon EBS 볼륨을 Amazon Inspector SBOM 생성기가 설치된 Amazon EC2 인스턴스에 연결하고 해당 인스턴스에 탑재하여 스캔할 수 있습니다. 현재 다른 Amazon EC2 인스턴스에서 사용 중인 Amazon EBS 볼륨의 경우 볼륨의 Amazon EBS 스냅샷을 생성한 다음 스캔 목적으로 해당 스냅샷에서 새 Amazon EBS 볼륨을 생성할 수 있습니다. Amazon EBS에 대한 자세한 내용은 *Amazon Elastic Block Store 사용 설명서*에서 [Amazon EBS란?](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html) 섹션을 참조하세요.

**명령 예제:**  
 다음 코드 조각은 탑재된 볼륨에서 SBOM을 생성하는 하위 명령을 보여줍니다. `--path` 인수는 볼륨이 탑재되는 루트 디렉터리를 지정해야 합니다.

```
# generate SBOM from mounted volume
./inspector-sbomgen volume --path /mount/point/of/volume/root
```

**명령 예제:**  
 다음 코드 조각은 `--exclude-suffix` 인수가 있는 특정 파일 경로를 제외하면서 탑재된 볼륨에서 SBOM을 생성하는 하위 명령을 보여줍니다. `--exclude-suffix` 인수는 볼륨에 대량 파일(예: 로그 파일 또는 미디어 파일)이 포함된 경우 특히 유용합니다. 경로가 지정된 접미사로 끝나는 파일 및 디렉터리는 스캔에서 제외되므로 스캔 시간과 메모리 사용량을 줄일 수 있습니다.

```
# generate SBOM from mounted volume with exclusions
./inspector-sbomgen volume --path /mount/point/of/volume/root \
--exclude-suffix .log \
--exclude-suffix cache
```

 대상 볼륨의 모든 파일 경로는 원래 경로로 정규화됩니다. 예를 들어, 파일이 포함된 `/mnt/volume`에 탑재된 볼륨을 `/mnt/volume/var/lib/rpm/rpmdb.sqlite`에서 스캔할 때 경로는 생성된 SBOM에서 `/var/lib/rpm/rpmdb.sqlite`로 정규화됩니다.

### 취약성 식별을 위해 Amazon Inspector로 SBOM 전송
<a name="w2aac37c11c15"></a>

 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는 5,000개 이상의 패키지가 있는 SBOMs 처리하지 않습니다. 이 시나리오에서 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
```

### 추가 스캐너를 사용하여 탐지 기능 향상
<a name="w2aac37c11c17"></a>

 Amazon Inspector SBOM 생성기는 사용 중인 명령을 기반으로 사전 정의된 스캐너를 적용합니다.

**기본 스캐너 그룹**  
 각 Amazon Inspector SBOM 생성기 하위 명령은 다음과 같은 기본 스캐너 그룹을 자동으로 적용합니다.
+  `directory` 하위 명령의 경우: 바이너리, 프로그래밍 언어 패키지, dockerfile 스캐너 그룹 
+  `localhost` 하위 명령의 경우: os, 프로그래밍 언어 패키지, 추가 에코시스템 스캐너 그룹 
+  `container` 하위 명령의 경우: os, 프로그래밍 언어 패키지, 추가 에코시스템, dockerfile, 바이너리 스캐너 그룹 

**특수 스캐너**  
 기본 스캐너 그룹 이외의 스캐너를 포함하려면 `--additional-scanners` 옵션과 추가할 스캐너 이름을 차례로 사용합니다. 다음은 이를 수행하는 방법을 보여주는 예제입니다.

```
# Add WordPress installation scanner to directory scan
./inspector-sbomgen directory --path /path/to/directory/ --additional-scanners wordpress-installation -o output.json
```

 다음은 쉼표로 구분된 목록으로 여러 스캐너를 추가하는 방법을 보여주는 예제 명령입니다.

```
./inspector-sbomgen container --image image:tag --additional-scanners scanner1,scanner2 -o output.json
```

### 스캔할 최대 파일 크기를 조정하여 컨테이너 스캔 최적화
<a name="w2aac37c11c19"></a>

 컨테이너 이미지를 분석하고 처리할 때 Sbomgen는 기본적으로 200MB 이하의 파일을 스캔합니다. 200MB보다 큰 파일에는 패키지 메타데이터가 거의 포함되지 않습니다. 200MB를 초과하는 Go 또는 Rust 바이너리를 인벤토리할 때 누락이 발생할 수 있습니다. 크기 제한을 조정하려면 `--max-file-size` 인수를 사용합니다. 이렇게 하면 대용량 파일을 포함하도록 제한을 늘리고 대용량 파일을 제외하여 리소스 사용량을 줄이기 위해 제한을 줄일 수 있습니다.

**예제**  
 다음 예제에서는 `--max-file-size` 인수를 사용하여 파일 크기를 늘리는 방법을 보여줍니다.

```
# Increase the file size limit to scan files up to 300 MB
./inspector-sbomgen container --image alpine:latest \
--outfile /tmp/sbom.json \
--max-file-size 300000000
```

 이 설정을 조정하면 디스크 사용량, 메모리 사용량 및 전체 스캔 기간을 제어하는 데 도움이 됩니다.

### 진행률 표시기 비활성화
<a name="w2aac37c11c21"></a>

 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을 사용하여 프라이빗 레지스트리에 인증
<a name="authenticating-private-registry"></a>

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

### 캐시된 자격 증명을 사용하여 인증(권장)
<a name="w2aac37c13b5"></a>

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

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

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

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

### 대화형 방법을 사용한 인증
<a name="w2aac37c13b7"></a>

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

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

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

### 비대화형 방법을 사용한 인증
<a name="w2aac37c13b9"></a>

 이 방법의 경우 암호 또는 레지스트리 토큰을 `.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의 예시 출력
<a name="sbom-examples"></a>

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

### 컨테이너 이미지 SBOM
<a name="container-sbom-example"></a>

```
{
  "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"
        }
      ]
    }
  ]
}
```