

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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) 是一種產生 SBOM 的工具，用於封存、容器映像、目錄、本機系統，以及編譯Go和二進位檔。 Rust 會Sbomgen掃描包含已安裝套件相關資訊的檔案。當 Sbomgen找到相關檔案時，它會擷取套件名稱、版本和其他中繼資料。 Sbomgen 然後將套件中繼資料轉換為 CycloneDX SBOM。您可以使用 Sbomgen將 CycloneDX SBOM 產生為檔案或在 STDOUT 中產生，並將 SBOMs傳送至 Amazon Inspector 進行漏洞偵測。您也可以使用 Sbomgen做為 CI/CD 整合的一部分，以自動掃描容器映像做為部署管道的一部分。 [https://docs.aws.amazon.com/inspector/latest/user/scanning-cicd.html](https://docs.aws.amazon.com/inspector/latest/user/scanning-cicd.html)

 Amazon Inspector 使用 Sbomgen進行數個受管掃描功能。當 Amazon Inspector 透過 [Amazon EBS 磁碟區分析執行 Amazon ECR 容器映像掃描](https://docs.aws.amazon.com/inspector/latest/user/scanning-ecr.html)、[AWS Lambda 函數掃描](https://docs.aws.amazon.com/inspector/latest/user/scanning-lambda.html)和 Amazon Elastic Compute Cloud 執行個體的[無代理程式掃描](https://docs.aws.amazon.com/inspector/latest/user/scanning-ec2.html#agentless)時，它會在Sbomgen幕後調用以產生用於漏洞評估的軟體庫存。此頁面所述的獨立Sbomgen工具提供相同的基礎技術，可讓您將 SBOM 產生直接整合到您的工作流程。

## 支援的套件類型
<a name="sbomgen-supported"></a>

 Sbomgen 收集下列套件類型的庫存：
+  Alpine APK 
+  Debian/Ubuntu DPKG 
+  Red Hat RPM 
+  C\# 
+  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安裝 。 Docker 不需要分析匯出為遠端容器登錄檔中託管`.tar`檔案或映像的映像。

 Amazon Inspector 建議您Sbomgen從至少具有下列硬體規格的系統執行 ：
+ 4 倍核心 CPU
+ 8 GB RAM

**安裝 Sbomgen**

1.  從架構的正確 URL 下載最新的 Sbomgen zip 檔案：

    Linux AMD64：https：//[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：//[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` – 這是您將執行以產生 SBOMs的工具。
   +  `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="w2aac37c13b7"></a>

 您可以使用 Sbomgen為容器映像產生 SBOMs，並將結果輸出至檔案。您可以使用 `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 Scan API 不會處理包含超過 5，000 個套件SBOMs。在此案例中，Amazon Inspector Scan API 會傳回 HTTP 400 回應。

 如果映像包含大量媒體檔案或目錄，請考慮不使用 Sbomgen `--skip-files`引數。

**範例：常見錯誤案例**  
 由於下列錯誤，容器映像掃描可能會失敗：
+  `InvalidImageFormat` – 使用損毀的 TAR 標頭、資訊清單檔案或組態檔案掃描格式不正確的容器映像時發生。
+  `ImageValidationFailure` – 當容器映像元件的檢查總和或內容長度驗證失敗，例如不相符的內容長度標頭、不正確的資訊清單摘要或失敗的 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="w2aac37c13b9"></a>

 您可以使用 從目錄和封存Sbomgen產生 SBOMs。您可以使用 `directory`或 `archive`子命令啟用此功能。當您想要從專案資料夾產生 SBOM，例如下載的 git 儲存庫時，Amazon Inspector 建議使用此功能。

**範例命令 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="w2aac37c13c11"></a>

 您可以使用 從編譯的 Rust Go和二進位檔Sbomgen產生 SBOMs。您可以透過 `binary`子命令啟用此靈活性：

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

### 從掛載磁碟區產生 SBOM
<a name="w2aac37c13c13"></a>

 您可以使用 Amazon Inspector SBOM 產生器從掛載磁碟區產生 SBOMs。您可以使用 `volume`子命令啟用此功能。當您想要分析儲存磁碟區時，建議您使用此功能，例如已掛載至系統的 Amazon EBS 磁碟區。與目錄子命令不同，掛載的磁碟區掃描會偵測作業系統套件和作業系統資訊。

 您可以掃描 Amazon EBS 磁碟區，方法是將其連接至已安裝 Amazon Inspector SBOM 產生器的 Amazon EC2 執行個體，並將其掛載在該執行個體上。對於其他 Amazon EC2 執行個體目前正在使用的 Amazon EBS 磁碟區，您可以建立磁碟區的 Amazon EBS 快照，然後從該快照建立新的 Amazon EBS 磁碟區以進行掃描。如需 Amazon EBS 的詳細資訊，請參閱[什麼是 Amazon EBS？](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html) *Amazon Elastic Block Store 使用者指南*中的 。

**範例 命令**  
 下列程式碼片段顯示從掛載磁碟區產生 SBOM 的子命令。`--path` 引數應指定掛載磁碟區的根目錄。

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

**範例 命令**  
 下列程式碼片段顯示從掛載磁碟區產生 SBOM 的子命令，同時排除具有 `--exclude-suffix`引數的特定檔案路徑。當磁碟區包含大量檔案 （例如日誌檔案或媒體檔案） 時，`--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`中標準化為 。

### 將 SBOM 傳送至 Amazon Inspector 以識別漏洞
<a name="w2aac37c13c15"></a>

 除了產生 SBOM 之外，您還可以使用來自 Amazon Inspector Scan API 的單一命令傳送 SBOM 以進行掃描。Amazon Inspector 會先評估 SBOM 的內容是否有漏洞，再將問題清單傳回 Sbomgen。根據您的輸入，問題清單可以顯示或寫入檔案。

**注意**  
 您必須具有具備 讀取許可 AWS 帳戶 的作用中 `InspectorScan-ScanSbom`，才能使用此功能。

 若要啟用此功能，請將 `--scan-sbom`引數傳遞給 Sbomgen CLI。您也可以將`--scan-sbom`引數傳遞至下列任何Sbomgen子命令：`archive`、`binary`、`container`、`directory`、`localhost`。

**注意**  
 Amazon Inspector Scan API 不會處理超過 5，000 個套件SBOMs。在此案例中，Amazon Inspector Scan API 會傳回 HTTP 400 回應。

 您可以使用下列 AWS CLI 引數，透過 AWS 設定檔或 IAM 角色向 Amazon Inspector 進行身分驗證：

```
--aws-profile {{profile}}
--aws-region {{region}}
--aws-iam-role-arn {{role_arn}}
```

 您也可以向 提供下列環境變數，向 Amazon Inspector 進行身分驗證Sbomgen。

```
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**  
 此命令會為AlpineLinux最新版本建立 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="w2aac37c13c17"></a>

 Amazon Inspector SBOM 產生器會根據使用的命令套用預先定義的掃描器。

**預設掃描器群組**  
 每個 Amazon Inspector SBOM 產生器子命令會自動套用下列預設掃描器群組。
+  對於 `directory`子命令：二進位、programming-language-packages、Dockerfile 掃描器群組 
+  對於 `localhost`子命令：os、programming-language-packages、extra-ecosystems 掃描器群組 
+  對於 `container`子命令：os、programming-language-packages、extra-ecosystems、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="w2aac37c13c19"></a>

 當您分析和處理容器映像時， 預設會Sbomgen掃描 200 MB 或更少的檔案。大於 200 MB 的檔案很少包含套件中繼資料。當您清點超過 200MB 的 Rust Go或二進位時，可能會遇到遺漏。若要調整大小限制，請使用 `--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="w2aac37c13c21"></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>

 透過提供私有登錄檔身分驗證憑證，您可以從私有登錄檔中託管的容器產生 SBOMs。您可以透過下列方法提供這些登入資料：

### 使用快取的登入資料進行驗證 （建議）
<a name="w2aac37c15b5"></a>

 對於此方法，您會向容器登錄檔進行身分驗證。例如，如果使用 Docker，您可以使用 Docker記錄命令向容器登錄檔進行身分驗證：`docker login`。

1.  驗證至您的容器登錄檔。例如，如果使用 Docker，您可以使用 Docker`login`命令向登錄檔進行身分驗證：

1.  驗證容器登錄檔之後，請在登錄檔中的容器映像Sbomgen上使用 。若要使用下列範例，請將 {{`image:tag`}}取代為要掃描的影像名稱：

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

### 使用互動式方法進行驗證
<a name="w2aac37c15b7"></a>

 對於此方法，請提供您的使用者名稱做為參數，並在需要時Sbomgen提示您輸入安全的密碼。

 若要使用下列範例，請將 {{`image:tag`}}取代為您要掃描的映像名稱，並將 {{`your_username`}} 取代為可存取映像的使用者名稱：

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

### 使用非互動式方法進行驗證
<a name="w2aac37c15b9"></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>

以下是使用 庫存之容器映像的 SBOM 範例Sbomgen。

### 容器映像 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"
        }
      ]
    }
  ]
}
```