Skip to main content

Snyk CLIでSBOMを作成する

feature snyk platform learn using snyk with CI CD

2025年2月5日

0 分で読めます

ソフトウェア部品表(SBOM)は、オープンソースのセキュリティとコンプライアンスに欠かせない要素となりつつあります。この記事では、SBOMとは何か、なぜ必要なのか、オープンソースセキュリティにおいてどのような役割を果たすのかを詳しく解説します。

SBOMとは?

ソフトウェア部品表(SBOM)は、ソフトウェア製品に使用されているすべてのコンポーネントを網羅した一覧です。各コンポーネントの名前、バージョン、ライセンス情報など、必要な詳細情報が記載されています。SBOMはソフトウェアの材料リストのようなもので、製品を構成する要素を完全に可視化します。

さまざまな依存関係を持つシンプルなPythonプロジェクトを考えてみましょう。このプロジェクトのSBOMを簡略化すると、次のようになります。

[
    {
        "component_name": "numpy",
        "version": "1.21.0",
        "license": "BSD"
    },
    {
        "component_name": "pandas",
        "version": "1.3.0",
        "license": "BSD"
    }
]

免責事項:

上記のコードは、SBOMの一例を簡略化したものです。この例は説明用であり、不完全なためスキャンには使用できません。


SBOMが必要な理由

SBOMは、ソフトウェアの構成を理解するうえで重要な役割を果たします。オープンソース開発では、さらに大きな役割を担います。オープンソースのコンポーネントには独自の依存関係があることが多く、コンポーネント同士が複雑につながり合っています。SBOMを使えば、この関係を整理し、アプリで利用するサードパーティ製依存関係に起因するセキュリティリスクやコンプライアンス上の問題に、どの程度さらされているかを把握できます。

作成したアーティファクトとともにSBOMを提供することは非常に重要です。ソフトウェアを使用する人が、そのプロジェクトのセキュリティ状況を評価できるためです。Log4ShellやSpring4Shellのように、特定のオープンソースパッケージに重大な脆弱性が公表された場合、脆弱なコンポーネントを使用しているすべての利用者が、その脆弱性の影響を受けるかどうかを判断できます。

SBOMはあらゆるソフトウェアに追加する価値があり、リリースごとに提供することが望まれます。透明性を高め、セキュリティとコンプライアンスを強化し、ソフトウェアの品質向上にも貢献します。

Snyk CLIでSBOMを作成する

Snykのコマンドラインインターフェース(CLI)は、オープンソースのセキュリティツールです。開発者やDevOps担当者は、オープンソースの依存関係に含まれる既知の脆弱性を検出、修正、監視できます。Snyk CLIは、JavaScript(npm、yarn)、Python(pip)、Java(Maven)、.NET(NuGet)、Ruby(RubyGems)、PHP(Composer)など、幅広いプログラミング言語とパッケージマネージャーに対応しています。ソフトウェアプロジェクトのSAST、SCA、コンテナ、IaCスキャンを、ローカル環境でもパイプラインでも実行できます。

さらに、プロジェクトのSBOMも作成できるようになりました。

Snyk CLIのインストール

Snyk CLIを使い始めるには、開発環境にインストールする必要があります。以下では、npmを使ったインストール方法を簡単に説明します。ほかのインストール方法などの詳細は、ユーザードキュメントをご覧ください。

npm install -g snyk

Snyk CLIをインストールしたら、snyk authコマンドを使ってアカウントを認証します。ウェブブラウザーが開くので、Snykアカウントにログインするか、新規登録してください。

snyk auth

また、Snykトークンを環境変数として設定する方法もあります。CI/CDパイプラインでCLIを使用する場合は、この方法をおすすめします。詳しくは、便利なCLIチートシートまたは公式ドキュメントをご覧ください。

Snyk CLIでSBOMを生成する

CLIが動作し、企業向けSnykアカウントに接続されたら、次のコマンドでソフトウェアプロジェクトのSBOMを作成できます。

snyk sbom --format=<cyclonedx1.4+json|cyclonedx1.4+xml|cyclonedx1.5+json|cyclonedx1.5+xml|cyclonedx1.6+json|cyclonedx1.6+xml|spdx2.3+json>

--formatオプションは必須で、生成するSBOMの出力形式を指定します。形式はCycloneDX、XML、またはJSON形式のSPDXから選択できます。

--json-file-output=<OUTPUT_FILE_PATH>フラグを使うと、SBOMのJSON出力をJSONファイルにエクスポートして保存できます。

snyk sbom --format=cyclonedx1.4+json --json-file-output=mysbom.json

プロジェクトのルートディレクトリで実行すると、アーティファクトと一緒に配布できるSBOMファイルが生成されます。

複数のプロジェクト

Snyk CLIは、ビルドシステムのパッケージマニフェストファイルを使って依存関係ツリーを特定し、SBOMの入力情報を決定します。デフォルトでは、マニフェストファイルを1つ見つけると処理を終了します。しかし、プロジェクトに複数のマニフェストファイルやビルドシステムが含まれる場合もあります。たとえば、バックエンドにMavenを使うJavaプロジェクト、フロントエンドにnpmを使うNode.jsプロジェクトが含まれているケースです。SBOMコマンドに--all-projectsフラグを追加すると、Snyk CLIがプロジェクト内を検索してマニフェストファイルを見つけ、結果、つまりSBOM出力に追加します。

snyk sbom --format=cyclonedx1.4+json --all-projects --json-file-output=mysbom.json

マニフェストファイルの検索深度はデフォルトで4です。--detection-depthフラグで変更できます。また、--excludeフラグを使って特定のファイルを除外することもできます。

snyk sbom --format=cyclonedx1.4+json --all-projects --detection-depth=3 --exclude=package.json --json-file-output=mysbom.json

複数モジュールのMavenファイル、Gradleの構成属性、Yarnワークスペースなど、特定のエコシステムに対応するコマンドラインフラグが多数用意されています。Snyk SBOMで使用できるすべてのフラグについては、詳しいドキュメントページをご覧ください。

Snyk CLIでSBOMの生成を自動化する

Snyk CLIを使ったソフトウェア部品表の生成自動化は、CI/CDパイプラインのセキュリティとコンプライアンスを強化するための重要なステップです。Snyk CLIをビルドプロセスに統合すれば、コードをビルドするたびに包括的なSBOMを自動生成できます。このSBOMには、推移的依存関係を含むすべての依存関係が記載されます。

コードがCI/CDパイプラインを進む過程で、Snykはセキュリティ脆弱性を検出するだけでなく、最新のSBOMが生成され、ビルドのリリースごとに提供されるようにすることもできます。この自動化によって、最新かつ安全なSBOMを維持するプロセスが効率化されるだけでなく、ソフトウェア開発ライフサイクルにセキュリティ対策を組み込めます。規制要件や業界標準への準拠が容易になり、顧客との信頼関係の構築にもつながります。

SBOMを分析する

SBOMの作成は、Snyk CLIの効果的で簡単な活用方法です。一方で、SBOMを読み込み、ソフトウェアパッケージに既知の脆弱性が含まれているか確認するにはどうすればよいでしょうか。現在、いくつかの方法があります。

Snyk CLIによるSBOMテスト

Snyk CLIはプロジェクトのSBOMを作成できるだけでなく、スキャンも実行できます。Snyk CLIが企業向けアカウントに接続されていれば、以下のようにSBOMファイルを指定してスキャンできます。

snyk sbom test --file=mysbom.json --experimental

執筆時点では、まだ実験的な機能のため、<code>--experimental</code>フラグが必要です。また、現在はUTF-8のJSONファイルのみを受け付けており、対応形式は次のとおりです。

  • CycloneDX:バージョン1.4、1.5、1.6

  • SPDX:JSONバージョン2.3

この機能の最新情報やその他の利用可能なオプションについては、Snyk CLI SBOM Testのドキュメントをご覧ください。

サービス拒否、リモートコード実行、アクセス制御の問題など、Snyk CLIで検出された脆弱性を一覧表示するターミナル出力。

Bomber

Bomberは、SBOMをスキャンしてセキュリティ脆弱性を検出するオープンソースアプリケーションです。bomberに統合されているプロバイダーの1つがSnykです。

bomberをインストールするには、公式GitHubリポジトリから最新リリースをダウンロードするか、macOSではHomebrew、Linuxではdpkgツールを使用します。

Homebrew(macOS):

brew tap devops-kung-fu/homebrew-tap
brew install devops-kung-fu/homebrew-tap/bomber

Dpkg(Linux):

dpkg -i bomber_0.4.1_linux_arm64.deb

コマンドラインからbomberとSnykを実行するには、Snyk APIトークンが必要です。Snykのウェブインターフェースから取得できます。また、CLIをローカルマシンにインストールしている場合は、snyk config get apiを実行して取得できます。

Snyk APIトークンを取得したら、次のようにbomberを実行できます。

bomber scan --provider snyk --token xxx mysbom.json

画面には、既知の脆弱性がすべて表示されます。

Java Mavenの依存関係に対応するSnykインテグレーションプロバイダーを備えたBomber SBOMスキャナー。

Snykで最新のSBOMを提供する

Snyk CLIを使えば、ソフトウェアのビルドごとに最新のSBOMを作成できます。コンプライアンスを確保するために、ビルドしたアーティファクトとともにSBOMを提供することは、優れた慣行であり、場合によっては必須です。

Snyk CLIを使ってパイプラインでのSBOM生成を自動化すれば、簡単に実現できます。最後に、プロジェクトでSBOMを扱う際に役立つ次のステップをご紹介します。

Snyk CLIを使い始める

Snyk CLIをインストールして、ローカルのプロジェクトやパイプラインの脆弱性を検出・修正しましょう。

npm install snyk -g