JFrog CLIとXrayを使ってソースの依存関係をスキャンする

Scanning Dependencies in your sources using JFrog CLI and Xray

注: このブログ記事の最終更新日は2021年10月12日です。

セキュリティ上の脆弱性やライセンス違反は、できるだけ早い段階で発見する必要があり、SDLCの早い段階であればあるほど良いでしょう。

シフトレフト”の一環として、JFrog CLIとXrayはシンプルなコマンドラインを使用して、オンデマンドでソースから直接依存関係をスキャンできるようになりました。

この機能により、JFrog Artifactoryにデプロイする前でも、JFrog Xrayと同じ脆弱性とライセンスのスキャン機能の恩恵を受けることができます。この機能強化は開発チームがスキャン済みで違反のないバイナリのみArtifactoryにアップロードすることを保証することで、組織がセキュリティポリシーと標準を遵守するのに役立ちます。

ソースの依存関係のスキャンはJFrog CLIの新しいv2バージョンの一部としてMaven、Gradle、npmパッケージのソーススキャンをサポートしています。GoPipパッケージもサポートされました。

ご存知でしたか? JFrog CLIはArtifactory、Xray、Distribution、Mission Controlと連携するコンパクトでスマートなクライアントで、読みやすく信頼性の高い方法で自動化スクリプトに強力な機能を提供します。
JFrog CLI Cheat Sheetをご覧ください。

はじめる前に

必要なものは以下の通りです。

スキャンの手順

スキャンは2つの方法のいずれかで行われます。ソースに直接行う個別のスキャンまたはデプロイメントフェーズの前に行うビルドの一部としてのスキャンです。どちらの場合もJFrog CLIでJFrogプラットフォームを設定することからはじめます。

JFrog CLIによるサーバの設定

マシンの任意の場所で$ jfrog c add <server-id>を実行し、プラットフォームの詳細を設定します。

Configure Server with JFrog CLI

$ jfrog rt pingを実行し、接続を確認します。

オプション1: Auditコマンドの実行

ビルドの一環としてではなく、オンデマンドでソースをスキャンします。

ソースファイルを含むトップレベルのディレクトリからauditコマンドを実行します。

サポートされているパッケージマネージャは独自のauditコマンドを持っています。

例えばMavenプロジェクトのスキャンを行い、すべての脆弱性を報告する場合は次のようになります。

$ jfrog xr audit-mvn

Gradleとnpmに対応するコマンドは次のようになります。

$ jfrog xr audit-gradle or $ jfrog xr audit-npm.

デフォルトではスキャンはすべての依存関係で見つかった脆弱性データを返します。特定のWatchの設定、リポジトリのパス、Projectsで違反データを取得する場合、以下のコマンドオプションのいずれかを使用する必要があります。

  • –watchesXray Watchをカンマで区切りで指定します
  • –repo-path対象のリポジトリのパスを指定します。
  • –projectProjectsキーを指定します。

これらのコマンドオプションを使用してスキャンを実行後、スキャン結果には違反データのみが表示され、脆弱性データは表示されないことに注意してください。脆弱性データを表示する場合、これらのオプションを使用せずにスキャンを実行してください。

デフォルトでは結果は表形式で出力されます。

Scan results - vulnerability data

自動化のために結果をJSON形式で返すことができます。フォーマットの種類を変更する場合、formatオプション-format=jsonを指定します。

ターミナルで-helpオプションを指定して追加のオプションを表示するか、JFrog CLIドキュメントで利用可能なコマンドをご確認ください。

オプション2: 条件付きアップロード – MavenとGradle

この方法ではアップロードの前にJFrog CLIを使ったビルドプロセスの一環として、すべてのファイルがローカルシステム上でスキャンされます。脆弱性のあるファイルが見つかった場合、アップロードはスキップされます。

レゾリューションリポジトリやデプロイメントリポジトリの選択、その他のビルドオプションなど、JFrog CLIをビルド用に設定するため、プロジェクトのトップレベルのディレクトリから対応するパッケージマネージャのconfigコマンドを使用します。

$ jfrog rt mvn-config or $ jfrog rt gradle-config.

Conditional Upload - Maven and Gradle

デフォルトでは設定コマンドは対話的に実行されます。非対話的に使用する場合は環境変数CI=TRUEを設定してください。

設定やビルドのコマンドについては、こちらをご覧いただくか、-helpオプションでご確認ください。

ビルドの設定完了後、適切なゴール/タスクとオプションを指定してビルドコマンドを実行し、条件付きアップロードを使用するために-scanオプションを指定します。

例えば以下の通りです。

$ jfrog rt mvn clean install --scan
$ jfrog rt gradle clean build --scan

舞台裏

JFrog CLIはXrayからIndexerコンポーネントをダウンロードすることで、Xrayとの統合を実現しています(初回使用時またはアップデート後にのみ発生します)。

要求されたスキャンではCLIは階層依存ツリーを組み立て、それをIndexerに提供し、脆弱性/違反の結果を返信します。

探索を続ける

JFrog CLIでできることは他にもたくさんあります。詳細はドキュメントをご覧ください。独自のプラグインを開発し、共有することもできます。

JFrog CLIプロジェクトとその依存関連はすべてオープンソースです。プロジェクトのGithub issuesセクションでご質問や他にどんな機能が必要かを教えてください。

JFrog CLIをはじめましょう。