翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Inspector SBOM Generator
ソフトウェア部品表 (SBOM) は、ソフトウェアの構築に必要なコンポーネント、ライブラリ、モジュールの正式に構造化されたリストです。Amazon Inspector SBOM Generator (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 Core CPU
-
8 GB RAM
Sbomgen をインストールするには
-
使用しているアーキテクチャの正しい 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 Generator の zip ファイルをダウンロードすることもできます。
-
次のコマンドを使用して、ダウンロードした zip ファイルを解凍します。
unzip inspector-sbomgen.zip
-
抽出されたディレクトリで次のファイルを確認します。
-
inspector-sbomgen
– SBOM を生成するために実行するツールです。 -
README.txt
— Sbomgen の使用に関するドキュメントです。 -
LICENSE.txt
— このファイルには、Sbomgen のソフトウェアライセンスが含まれています。 -
licenses
— このフォルダには、Sbomgen が使用するサードパーティパッケージのライセンス情報が含まれています。 -
checksums.txt
– このファイルは Sbomgen ツールのハッシュを提供します。 -
sbom.json
– Sbomgen ツールの CycloneDX SBOM です。 -
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 の生成と結果の出力
コンテナイメージの SBOM を生成し、結果をファイルに出力するには、Sbomgen を使用できます。この機能は、container
サブコマンドを使用して有効にできます。
コマンドの例
次のスニペットでは、
をイメージの ID に、image:tag
を保存する出力へのパスに置き換えることができます。output_path.json
# generate SBOM for container image ./inspector-sbomgen container
--image image:tag
-ooutput_path.json
注記
スキャン時間とパフォーマンスは、イメージサイズと、レイヤーの数の少なさによって異なります。イメージを小さくすると、Sbomgen のパフォーマンスが向上するだけでなく、潜在的なアタックサーフェスも減少します。イメージを小さくすると、イメージの構築、ダウンロード、アップロードの時間も短縮されます。
Sbomgen で を使用する場合ScanSbom
、Amazon Inspector スキャン API は 5,000 個を超えるパッケージを含む SBOMs を処理しません。このシナリオでは、Amazon Inspector スキャン API は HTTP 400 レスポンスを返します。
イメージにバルクメディアファイルまたはディレクトリが含まれている場合は、--skip-files
引数を使用して Sbomgen からそれらを除外することを検討してください。
例: 一般的なエラーケース
コンテナイメージのスキャンは、次のエラーが原因で失敗することがあります。
-
InvalidImageFormat
– 不正な TAR ヘッダー、マニフェストファイル、または設定ファイルを使用して不正な形式のコンテナイメージをスキャンするときに発生します。 -
ImageValidationFailure
– Content-Length ヘッダーの不一致、マニフェストダイジェストの誤り、SHA256 チェックサムの検証の失敗など、コンテナイメージコンポーネントのチェックサムまたはコンテンツの長さの検証が失敗した場合に発生します。 -
ErrUnsupportedMediaType
– イメージコンポーネントにサポートされていないメディアタイプが含まれている場合に発生します。サポートされているメディアタイプの詳細については、「サポートされているオペレーティングシステムとメディアタイプ」を参照してください。
Amazon Inspector はapplication/vnd.docker.distribution.manifest.list.v2+json
メディアタイプをサポートしていません。ただし、Amazon Inspector はマニフェストリストをサポートしています。マニフェストリストを使用するイメージをスキャンする場合、 --platform
引数で使用するプラットフォームを明示的に指定できます。--platform
引数を指定しない場合、Amazon Inspector SBOM Generator は実行中のプラットフォームに基づいてマニフェストを自動的に選択します。
ディレクトリとアーカイブからの 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
マウントされたボリュームから SBOM を生成する
Amazon Inspector SBOM Generator を使用して、マウントされたボリュームから SBOMs を生成できます。この機能は、volume
サブコマンドを使用して有効にできます。システムにマウントされている Amazon EBS ボリュームなどのストレージボリュームを分析する場合は、この機能を使用することをお勧めします。ディレクトリサブコマンドとは異なり、マウントされたボリュームスキャンは OS パッケージと OS 情報を検出します。
Amazon EBS ボリュームをスキャンするには、Amazon Inspector SBOM Generator がインストールされている Amazon EC2 インスタンスにアタッチし、そのインスタンスにマウントします。 Amazon Inspector 他の 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
コマンドの例
次のスニペットは、 --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
で に正規化されます。
脆弱性特定のための SBOM の Amazon Inspector への送信
SBOM の生成に加えて、Amazon Inspector スキャン API から 1 つのコマンドを使用してスキャンのために SBOM を送信できます。Amazon Inspector は、検出結果を Sbomgen に返す前に、SBOM の内容を評価して脆弱性がないかを確認します。入力に応じて、検出結果を表示またはファイルに書き込むことができます。
注記
この機能を使用するには、 InspectorScan-ScanSbom
への読み取りアクセス許可 AWS アカウント を持つアクティブな が必要です。
この機能を有効にするには、--scan-sbom
引数を Sbomgen CLI に渡します。--scan-sbom
引数は、archive
、binary
、container
、directory
、localhost
のいずれかの Sbomgen サブコマンドに渡すこともできます。
注記
Amazon Inspector スキャン API は、5,000 個を超えるパッケージを含む SBOMs を処理しません。このシナリオでは、Amazon Inspector スキャン API は HTTP 400 レスポンスを返します。
AWS プロファイルまたは IAM ロールを使用して、次の AWS CLI 引数を使用して Amazon Inspector を認証できます。
--aws-profile
profile
--aws-regionregion
--aws-iam-role-arnrole_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-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
このコマンドは、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 Generator は、使用されているコマンドに基づいて事前定義されたスキャナーを適用します。
デフォルトのスキャナーグループ
各 Amazon Inspector SBOM Generator サブコマンドは、次のデフォルトのスキャナーグループを自動的に適用します。
-
directory
サブコマンドの場合: binary、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
スキャンする最大ファイルサイズを調整してコンテナスキャンを最適化する
コンテナイメージを分析して処理すると、 はデフォルトで 200 MB 以下のファイルをSbomgenスキャンします。200 MB を超えるファイルには、パッケージメタデータはほとんど含まれません。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
この設定を調整すると、ディスク使用量、メモリ消費量、全体的なスキャン期間を制御できます。
進行状況インジケータの無効化
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 ログ記録コマンドを使用してコンテナレジストリに対して認証を行うことができます: docker login
。
-
コンテナレジストリに対して認証を行います。例えば、Docker を使用している場合は、以下の Docker
login
コマンドを使用してレジストリに対して認証を行うことができます。 -
コンテナレジストリに対して認証を行ったら、レジストリにあるコンテナイメージで Sbomgen を使用します。以下の例を使用するには、
を、スキャンするイメージの名前に置き換えてください。image:tag
./inspector-sbomgen container --image
image:tag
インタラクティブメソッドを使用した認証
この方法では、ユーザー名をパラメータとして指定すると、Sbomgen から必要に応じて安全なパスワードの入力を求められます。
以下の例を使用するには、
をスキャンするイメージの名前に置き換え、image:tag
をその画像にアクセスできるユーザー名に置き換えます。your_username
./inspector-sbomgen container --image
image:tag
--usernameyour_username
非インタラクティブなメソッドを使用した認証
このメソッドでは、パスワードまたはレジストリトークンを .txt
ファイルに保存します。
注記
現在のユーザーは、このファイルの読み取りのみが可能です。また、ファイルには、パスワードまたはトークンが 1 行にまとめられます。
以下の例を使用するには、
をユーザー名に置き換え、your_username
をパスワードまたはトークンを 1 行に含む password.txt
.txt
ファイルに置き換え、
をスキャンするイメージの名前に置き換えます。image:tag
INSPECTOR_SBOMGEN_USERNAME=
your_username
\ INSPECTOR_SBOMGEN_PASSWORD=`catpassword.txt
` \ ./inspector-sbomgen container --imageimage: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" } ] } ] }