Amazon Inspector SBOM 產生器 - Amazon Inspector

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

Amazon Inspector SBOM 產生器

軟體物料清單 (SBOM) 是建置軟體所需的元件、程式庫和模組的正式結構清單。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

支援的套件類型

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安裝 。 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

    Linux ARM64:https://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 – 這是您將執行以產生 SBOMs的工具。

    • 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 為容器映像產生 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 搭配 使用 時ScanSbom,Amazon Inspector Scan API 不會處理包含超過 5,000 個套件SBOMs。在此案例中,Amazon Inspector Scan API 會傳回 HTTP 400 回應。

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

範例:常見錯誤案例

由於下列錯誤,容器映像掃描可能會失敗:

  • InvalidImageFormat – 使用損毀的 TAR 標頭、資訊清單檔案或組態檔案掃描格式不正確的容器映像時發生。

  • ImageValidationFailure – 當容器映像元件的檢查總和或內容長度驗證失敗,例如不相符的內容長度標頭、不正確的資訊清單摘要或失敗的 SHA256 檢查總和驗證時,便會發生。

  • ErrUnsupportedMediaType – 當映像元件包含不支援的媒體類型時發生。如需有關支援的媒體類型的資訊,請參閱支援的作業系統和媒體類型

Amazon Inspector 不支援application/vnd.docker.distribution.manifest.list.v2+json媒體類型。不過,Amazon Inspector 支援資訊清單清單。掃描使用資訊清單清單的映像時,您可以明確指定要搭配 --platform 引數使用的平台。如果未指定--platform引數,Amazon Inspector SBOM Generator 會根據其執行所在的平台自動選取資訊清單。

從目錄和封存產生 SBOM

您可以使用 從目錄和封存Sbomgen產生 SBOMs。您可以使用 directoryarchive子命令來啟用此功能。當您想要從專案資料夾產生 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

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

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

從掛載磁碟區產生 SBOM

您可以使用 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 Elastic Block Store 使用者指南》中的什麼是 Amazon EBS?

範例 命令

下列程式碼片段顯示從掛載磁碟區產生 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 以識別漏洞

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

注意

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

若要啟用此功能,請將 --scan-sbom引數傳遞給 Sbomgen CLI。您也可以將--scan-sbom引數傳遞至下列任何Sbomgen子命令:archivebinarycontainerdirectorylocalhost

注意

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

使用其他掃描器來增強偵測功能

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

透過調整要掃描的檔案大小上限來最佳化容器掃描

當您分析和處理容器映像時, 預設會Sbomgen掃描 200 MB 或更少的檔案。大於 200 MB 的檔案很少包含套件中繼資料。當您清查超過 Rust 200MB 的 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

調整此設定有助於控制磁碟用量、記憶體使用量和整體掃描持續時間。

停用進度指示器

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

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

使用快取的登入資料進行驗證 (建議)

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

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

  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

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

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