Amazon Inspector SBOM Generator - Amazon Inspector

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

Amazon Inspector SBOM Generator

Software Bill of Materials (SBOM) は、ソフトウェアの構築に必要なコンポーネント、ライブラリ、モジュールの完全な正式なリストです。

Amazon Inspector SBOM Generator (Sbomgen) は、アーカイブ、コンテナイメージ、ディレクトリ、ローカルシステム、コンパイル済みおよびバイナリ用のソフトウェア部品表 (SBOM) Go Rust を作成するツールです。

Sbomgen は、インストールされたパッケージに関する情報を含むファイルをスキャンします。が関連ファイルSbomgenを検出すると、パッケージ名、バージョン、およびその他のメタデータが抽出されます。Sbomgen次に、 はパッケージメタデータを CycloneDX SBOM に変換します。

をスタンドアロンツールSbomgenとして使用して、SBOM CycloneDX をファイルとして生成したり STDOUT に送信したり、脆弱性検出のために SBOMs を Amazon Inspector に送信したりできます。

CI/CD 統合 Sbomgenの一部として使用することもできます。これにより、デプロイパイプラインの一部としてコンテナイメージが自動的にスキャンされます。

サポートされているパッケージタイプ

Sbomgen は、次のパッケージタイプのインベントリを収集します。

  • Alpine APK

  • Debian/Ubuntu DPKG

  • Red Hat RPM

  • C#

  • Go

  • Java

  • Node.js

  • PHP

  • Python

  • Ruby

  • Rust

サポートされているコンテナイメージ設定チェック

Sbomgen は、スタンドアロンの Dockerfiles をスキャンし、既存のイメージからビルド履歴をスキャンして、セキュリティ上の問題を検出できます。詳細については、Amazon Inspector Dockerfile チェック」を参照してください。

Sbomgen のインストール

Sbomgen は、Linux オペレーティングシステムでのみ利用できます。

ローカルにキャッシュされたイメージを分析する場合はSbomgen、 Dockerがインストールされている必要があります。 Dockerは、リモートコンテナレジストリでホストされている.tarファイルまたはイメージとしてエクスポートされたイメージを分析するためには必要ありません。

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 – これは、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サブコマンドを使用して有効にできます。

コマンドの例

次のスニペットでは、 をイメージの ID output_path.jsonに、 を保存する出力へのパスimage:tagに置き換えることができます。

# generate SBOM for container image ./inspector-sbomgen container --image image:tag -o output_path.json
注記

スキャン時間とパフォーマンスは、イメージサイズとレイヤーの数によって異なります。イメージを小さくするとSbomgenパフォーマンスが向上するだけでなく、潜在的なアタックサーフェスも減少します。イメージを小さくすると、イメージの構築、ダウンロード、アップロードの時間も短縮されます。

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

イメージにバルクメディアファイルまたはディレクトリが含まれている場合は、 --skip-files引数Sbomgenの使用から除外することを検討してください。

ディレクトリとアーカイブから SBOM を生成する

を使用してSbomgen、ディレクトリとアーカイブから SBOMs を生成できます。この機能は、 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とバイナリから SBOMs Rust を生成できます。この機能を有効にするには、 binaryサブコマンドを使用します。

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

脆弱性を特定するために Amazon Inspector に SBOM を送信する

SBOM の生成に加えて、Amazon Inspector スキャン API から 1 つのコマンドでスキャン用の SBOM を送信できます。Amazon Inspector は、検出結果を に返す前に、脆弱性がないか SBOM の内容を評価しますSbomgen。入力に応じて、結果を表示またはファイルに書き込むことができます。

注記

この機能InspectorScan:ScanSbomを使用するには、 への読み取りアクセス許可 AWS アカウント を持つアクティブな が必要です。

この機能を有効にするには、 --scan-sbom引数を CLI Sbomgen に渡します。引--scan-sbom数は、、、archivebinary、 のいずれかのSbomgenサブコマンドに渡すこともできますcontainerdirectorylocalhost

注記

Amazon Inspector スキャン API は、2,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

に次の環境変数を指定することで、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

スキャンをカスタマイズして特定のファイルを除外する

コンテナイメージを分析して処理する場合、 はそのコンテナイメージ内のすべてのファイルのサイズSbomgenをスキャンします。スキャンをカスタマイズして、特定のファイルを除外したり、特定のパッケージをターゲットにしたりできます。

ディスクの消費量、RAM の消費量、ランタイムの経過時間、指定されたしきい値を超えるスキップファイルを減らすには、 引--max-file-size数を container サブコマンドで使用します。

./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、 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" } ] } ] }