Amazon Inspector SBOM Generator - Amazon Inspector

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 をインストールするには
  1. 使用しているアーキテクチャの正しい 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 ファイルをダウンロードすることもできます。

  2. 次のコマンドを使用して、ダウンロードした zip ファイルを解凍します。

    unzip inspector-sbomgen.zip

  3. 抽出されたディレクトリで次のファイルを確認します。

    • inspector-sbomgen – SBOM を生成するために実行するツールです。

    • 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 の生成と結果の出力

コンテナイメージの SBOM を生成し、結果をファイルに出力するには、Sbomgen を使用できます。この機能は、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 スキャン 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 引数は、archivebinarycontainerdirectorylocalhost のいずれかの Sbomgen サブコマンドに渡すこともできます。

注記

Amazon Inspector スキャン API は、5,000 個を超えるパッケージを含む SBOMs を処理しません。このシナリオでは、Amazon Inspector スキャン API は HTTP 400 レスポンスを返します。

AWS プロファイルまたは IAM ロールを使用して、次の AWS CLI 引数を使用して 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

追加のスキャナーを使用して検出機能を強化する

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

  1. コンテナレジストリに対して認証を行います。例えば、Docker を使用している場合は、以下の Docker login コマンドを使用してレジストリに対して認証を行うことができます。

  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 ファイルに保存します。

注記

現在のユーザーは、このファイルの読み取りのみが可能です。また、ファイルには、パスワードまたはトークンが 1 行にまとめられます。

以下の例を使用するには、your_username をユーザー名に置き換え、password.txt をパスワードまたはトークンを 1 行に含む .txt ファイルに置き換え、image:tag をスキャンするイメージの名前に置き換えます。

INSPECTOR_SBOMGEN_USERNAME=your_username \ INSPECTOR_SBOMGEN_PASSWORD=`cat password.txt` \ ./inspector-sbomgen container --image image: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" } ] } ] }