依存性を識別するためのネイティブ実行可能ファイルへのSBOMの埋込み
ネイティブ・イメージは、ソフトウェア部品表(SBOM)を埋め込むことができます。SBOMは、アプリケーションを構成するすべてのコンポーネント、ライブラリおよびモジュールのインベントリです。これは、アプリケーションで使用されるすべてのオープンソース・ライブラリおよび独自ライブラリとそのバージョンに関する詳細情報を提供します。--enable-sbom
オプションを使用して、SBOMをネイティブ実行可能ファイルに組み込みます。デフォルトでは、CycloneDX形式がサポートされています。(GraalVM Community Editionでは使用できません。)
前提条件
- Oracle GraalVMがインストールされていることを確認します。最も簡単に始めるには、SDKMAN!を使用します。その他のインストール・オプションについては、「ダウンロード」セクションを参照してください。
- Syft
ビルド時にSBOMを生成
デモ・アプリケーションでは、jwebserver
ツールを使用して、埋込みSBOMを含むネイティブ実行可能ファイルとしてパッケージ化します。
jwebserver
は、単一のディレクトリ階層から静的ファイルを提供するための最小限のHTTPサーバーで、JDKに含まれています。これは、Java 18で追加されました。
- 次のコードをindex.htmlという名前のファイルに保存して、Webサーバーがコンテンツを提供できるようにします:
<!DOCTYPE html> <html> <head> <title>jwebserver</title> </head> <body> <h2>Hello, GraalVM user!<p> </body> </html>
- index.htmlを保存したディレクトリから、次のコマンドを実行してネイティブ実行可能ファイルを作成し、SBOMを埋め込みます:
native-image --enable-sbom=cyclonedx -m jdk.httpserver -o jwebserver
-m
オプションを渡すことで、ネイティブ・イメージは、JDKで提供されているjdk.httpserver
モジュールからjwebserver
をコンパイルします。これにより、GZIP形式の圧縮されたSBOMを含むネイティブ実行可能ファイルが生成されます。 - (オプション)コンパイルされた
jwebserver
実行可能ファイルを実行し、ブラウザでlocalhost:8000に移動します:./jwebserver
埋込みSBOMの抽出
圧縮されたSBOMの内容を判読可能な形式に抽出するには、次の2つの方法があります:
- Syftの使用
- ネイティブ・イメージ検査ツールの使用
Syft
Syft (syft
)は、Anchoreによって管理されているオープン・ソース・ツールです。Syftは、ネイティブSyft形式またはCycloneDXの両方で表現可能な埋込みSBOMを抽出できます。GraalVMチームの貢献により、syft
は、Linux、macOSまたはWindows用にビルドされたネイティブ実行可能ファイル内で指定されたSBOMを抽出できるようになりました。
ネイティブ実行可能ファイルでsyft
を実行して、そのSBOMの内容を読み取ります:
syft jwebserver
これにより、含まれているすべてのJavaライブラリがリストされます。
ネイティブ・イメージ検査ツール
GraalVMネイティブ・イメージには、ネイティブ実行可能ファイルに埋め込まれたSBOMを取得するための検査ツールがあります。syft
をインストールしない場合、検査ツールは使用可能な代替手段です。
次のコマンドを実行し、検査ツールを使用してSBOMの内容を読み取ります:
native-image-inspect --sbom jwebserver
これをさらに進めて、使用可能な脆弱性スキャナにSBOMを送信し、記録されたライブラリに既知のセキュリティ脆弱性があるかどうかを確認できます。脆弱性スキャナは、脆弱性データベース内のCVEを使用してSBOMにリストされているコンポーネントを相互参照します。
このガイドでは、サードパーティの依存関係に関連するリスクの評価に役立つように、アプリケーション・サプライ・チェーンに対するインサイトを取得する方法を示しました。ネイティブ・イメージは、ビルド時にSBOMをネイティブ実行可能ファイルまたは共有ライブラリに埋め込むことができます。