本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Inspector SBOM 生成
軟體材料清單 (SBOM) 是建置軟體所需的元件、程式庫和模組的正式結構清單。Amazon Inspector 產生SBOM器 (Sbomgen) 是一種工具,可SBOM為存檔、容器映像、目錄、本機系統以及編譯Go和Rust二進位檔產生。 Sbomgen掃瞄包含已安裝套件相關資訊的檔案。Sbomgen找到相關檔案時,會擷取套件名稱、版本和其他中繼資料。 Sbomgen然後將包元數據轉換為 CycloneDXSBOM. 您可以使用Sbomgen以檔案CycloneDXSBOM形式產生或在中產生,STDOUT然後傳送SBOMs至 Amazon Inspector 進行弱點偵測。您也可以用Sbomgen作 CI/CD 整合的一部分,它會自動掃描容器映像作為部署管線的一部分。
支援的套件類型
Sbomgen收集下列封裝類型的庫存:
-
Alpine APK
-
Debian/Ubuntu DPKG
-
Red Hat RPM
-
C#
-
Go
-
Java
-
Node.js
-
PHP
-
Python
-
Ruby
-
Rust
支援的容器映像設定檢查
Sbomgen可以掃描獨立的 Docker 文件並從現有映像中構建歷史記錄以查找安全問題。如需詳細資訊,請參閱 Amazon Inspector 查器碼頭檔案檢查。
安裝 Sbomgen
Sbomgen僅適用於 Linux 作業系統。
如果要Sbomgen分析本機快取的影像,則必須已Docker安裝。 Docker不需要分析匯出為.tar
檔案或遠端容器登錄中託管的影像的影像。
Amazon Inspector 建議您Sbomgen從至少具有下列硬體規格的系統執行:
-
4 個核心 CPU
-
8 GB RAM
安裝 Sbomgen
-
從URL適合您的架構的正確位置下載最新的 Sbomgen zip 檔案:
LinuxAMD64: https://amazon-inspector-sbomgen.s3.amazonaws.com/latest/linux/amd64/inspector-sbomgen.zip
LinuxARM64: https://amazon-inspector-sbomgen.s3.amazonaws.com/latest/linux/arm64/inspector-sbomgen.zip
或者,您可以下載 Amazon Inspector SBOM 器生成器 zip 文件的以前版本。
-
使用以下命令解壓縮下載:
unzip inspector-sbomgen.zip
-
檢查解壓縮目錄中的下列檔案:
-
inspector-sbomgen
— 這是您將執行生成的工具SBOMs。 -
README.txt
-這是使用的文檔Sbomgen。 -
LICENSE.txt
— 此檔案包含的軟體授權Sbomgen。 -
licenses
— 此資料夾包含使用的協力廠商套件的授權資訊Sbomgen。 -
checksums.txt
— 此檔案提供Sbomgen工具的雜湊。 -
sbom.json
— 這是一CycloneDXSBOM個工Sbomgen具。 -
WhatsNew.txt
— 此文件包含摘要的更改日誌,因此您可以快速查看Sbomgen版本之間的重大更改和改進。
-
-
(選擇性) 使用下列指令驗證工具的真實性與完整性:
sha256sum < inspector-sbomgen
-
將結果與
checksums.txt
檔案的內容進行比較。
-
-
使用以下命令將可執行權限授予工具:
chmod +x inspector-sbomgen
-
使用Sbomgen下列命令確認已成功安裝:
./inspector-sbomgen --version
您應該會看到類似下列內容的輸出:
Version: 1.X.X
使用 Sbomgen
本節說明您可以使用的不同方式Sbomgen。您可以Sbomgen通過內置示例了解有關如何使用的更多信息。若要檢視這些範例,請執行下list-examples
列命令:
./inspector-sbomgen list-examples
SBOM為容器圖像生成一個並輸出結果
您可以使Sbomgen用產生容SBOMs器影像,並將結果輸出至檔案。您可以使用container
子指令啟用此功能。
範例 命令
在下面的代碼片段中,您可以替換
使用您的圖像的 ID 和 影像:標籤
與您要保存的輸出的路徑。輸出路徑
# generate SBOM for container image ./inspector-sbomgen container
--image image:tag
-ooutput_path.json
注意
掃描時間和效能取決於影像大小以及圖層數目有多少。較小的圖像不僅可以提高Sbomgen性能,還可以減少潛在的攻擊面。較小的圖像還可以改善圖像的構建,下載和上傳時間。
Sbomgen搭配使用時 ScanSbom
,Amazon Inspector 掃描API將不會處理包SBOMs含 2,000 個以上的套件。在這個案例中,Amazon Inspector 掃描會API傳回 HTTP 400 個回應。
如果影像包含大量媒體檔案或目錄,請考慮將它們排除在Sbomgen使用--skip-files
引數之外。
SBOM從目錄和檔案生成
您可以使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
SBOM從Go或Rust編譯的二進製文件生成
您可以使用SbomgenSBOMs從編譯Go和Rust二進製文件生成。您可以通過子命令啟用此功能:binary
./inspector-sbomgen binary --path /path/to/your/binary
發送SBOM給 Amazon Inspector 以識別漏洞
除了產生之外SBOM,您還可以從 Amazon Inspector 掃描使用單一命令傳送掃描API。SBOMAmazon Inspector 會先評估漏洞的內容,然後再將發現項目傳回SBOM給。Sbomgen根據您的輸入,發現項目可以顯示或寫入檔案。
注意
您必須擁有具有讀取權限 AWS 帳戶 的作用中,才InspectorScan:ScanSbom
能使用此功能。
若要啟用此功能,請將引--scan-sbom
數傳遞給 SbomgenCLI. 您也可以將--scan-sbom
引數傳遞給下列任何一個Sbomgen子命令:archive
、binary
、container
、directory
、localhost
。
注意
Amazon Inspector 掃描API不會處SBOMs理超過 2,000 個包裹。在這個案例中,Amazon Inspector 掃描會API傳回 HTTP 400 個回應。
您可以透過 AWS 設定檔或使用下列 AWS CLI 引數的IAM角色向 Amazon Inspector 驗證:
--aws-profile
profile
--aws-regionregion
--aws-iam-role-arnrole_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
此命令會SBOM為最新AlpineLinux版本建立一個、掃瞄弱點結果SBOM,然後將弱點結果寫入JSON檔案。
./inspector-sbomgen container --image alpine:latest \ --scan-sbom \ --aws-profile
your_profile
\ --aws-regionyour_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
此命令會使用角色對 Amazon Inspector 進ARN行驗證。IAM
./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耗用、經過執行階段,以及略過超過提供臨界值的檔案,請搭配container
子指令使用--max-file-size
引數:
./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 loging 命令對容器登錄進行驗證:docker login
。
-
驗證您的容器註冊表。例如,如果使用Docker,您可以使用以下Docker
login
命令向註冊表進行身份驗證: -
驗證容器登錄後,請Sbomgen在登錄中的容器映像上使用。若要使用下列範例,請取代
使用要掃描的影像名稱:影像:標籤
./inspector-sbomgen container --image
image:tag
使用慣性方法進行驗證
對於此方法,請提供您的用戶名作為參數,並Sbomgen在需要時提示您輸入安全密碼。
若要使用下列範例,請取代
使用您要掃描的圖像的名稱 影像:標籤
使用可以訪問圖像的用戶名:您的使用者名稱
./inspector-sbomgen container --image
image:tag
--usernameyour_username
使用非互動式方法進行驗證
對於此方法,請將您的密碼或註冊表令牌存儲在.txt
文件中。
注意
目前的使用者應該只能讀取此檔案。該文件還應該在一行中包含您的密碼或令牌。
若要使用下列範例,請取代
使用您的用戶名,您的使用者名稱
將包含您的密碼或令牌的password.txt
.txt
文件放在一行中,以及
使用要掃描的影像名稱:影像:標籤
INSPECTOR_SBOMGEN_USERNAME=
your_username
\ INSPECTOR_SBOMGEN_PASSWORD=`catpassword.txt
` \ ./inspector-sbomgen container --imageimage: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" } ] } ] }