Snyk Mavenプラグイン:開発者向けのセキュリティ脆弱性スキャンを統合
2021年4月20日
0 分で読めますMavenはJavaエコシステムで最も広く使われているビルドシステムであり、長年にわたってその地位を保っています。Mavenを使ったアプリケーションのビルドは簡単です。多くの作業をMavenが担ってくれるからです。Mavenのライフサイクルの各フェーズでは、次のような処理が実行されます。
依存関係のダウンロード
Javaコードのコンパイル
ユニットテストの実行
リリース可能な成果物の作成
統合テスト
その他さまざまな処理
Mavenを使えば、チームの各開発者のマシンでもCIパイプラインでも、開発ライフサイクルを同じように実行できます。Mavenが必要な依存関係をダウンロードし、テストを実行してくれるのなら、このライフサイクルに脆弱性スキャンをシームレスに組み込めたら便利だと思いませんか?それを実現するのがSnyk Maven pluginです。
プロジェクトの依存関係をスキャンして、既知のセキュリティ脆弱性を検出することは不可欠です。依存関係のチェックを始める理想的なタイミングは、依存関係を取り込んだその瞬間です。そのため、ビルドサイクルの一環としてサードパーティ製ライブラリのセキュリティ脆弱性をアプリケーションからスキャンできるSnyk Mavenプラグインを開発しました。開発者がセキュリティの専門知識を活用できます。
続きを読む前にプラグインの動作を見たい方に、ぴったりの動画があります。

Snyk Mavenプラグイン
Maven用のSnykプラグインは一般提供されており、Maven Centralで公開されています。pom.xmlファイルで設定するだけで利用できます。以下はプラグインのデフォルト設定です。
ご覧のとおり、testとmonitorの2つのゴールがあります。プラグインをプロジェクトに追加したら、mvn snyk:testまたはmvn snyk:monitorを実行するだけです。デフォルトでは、snyk testゴールはライフサイクルのMaven testフェーズに関連付けられています。つまり、Maven testフェーズが完了すると、Snyk testゴールが自動的に実行されます。Snyk monitorゴールはinstallフェーズに関連付けられており、同様に動作します。
他のMavenプラグインと同様に、この動作は変更できます。executionの部分に<phase>タグを追加するだけです。test、package、verifyなどの既存フェーズ、またはnoneを指定できます。以下の例では、snyk-testをverifyフェーズに、snyk-monitorをnoneに設定しています。これでmvn snyk:monitorは手動で実行できますが、ビルドライフサイクルのフェーズの一部として自動実行されることはありません。
ライフサイクルでのSnykゴールの実行をスキップするには、コマンドに-Dsnyk.skipを追加するだけです。例:
新しいSnyk Mavenプラグインの仕組み
以前からMaven用のSnykプラグインはありましたが、依存関係ツリーの判定に独自のロジックを使用していました。そのため、CLIと旧Mavenプラグインでは、出力に多少の違いが生じることがありました。
Gradleプラグインと同様に、新しいSnyk Mavenプラグインは内部でSnyk CLIを使用します。適切なCLIバイナリを自動的にダウンロードして更新するため、CLIを事前にインストールする必要はありません。必要なのは、APIトークンを取得するための無料のSnykアカウントだけです。
Snyk Mavenプラグインの設定
プラグインを設定するには、Snykで依存関係のセキュリティスキャンを有効にするためにAPIトークンを設定する必要があります。トークンは、SnykアカウントのGeneral settingsで確認できます。また、サービスアカウント専用のトークンを作成することもできます。

ブログ記事の最初の例では、トークンをpomファイルに記述していません。代わりに、自分のマシンにグローバル環境変数SNYK_TOKENを作成し、それを参照しています。
この方法なら、秘密のトークンをpomファイルに含めずに済みます。コードをオープンソースリポジトリに公開する場合には特に便利です。
設定の<args>部分には、通常CLIに渡す任意のフラグを指定できます。ここでは--all-projectsフラグを指定しています。これにより、エコシステムを問わず、すべてのプロジェクトを一度にスキャンできます。プロジェクト内で複数のpomファイルを使っている場合に特に便利です。
必要に応じて、CLIの設定を細かく指定することもできます。デフォルトでは、CLIは最初の実行時に毎日自動更新されます。特定のバイナリやCLIのバージョンを使いたい場合、または更新方法を変更したい場合は、<configuration>内に<cli>オブジェクトを追加します。設定可能な項目はすべてgithub repoに記載されています。以下の例では、<updatePolicy>をalwaysに変更しています。その結果、プラグインは1日1回ではなく、実行のたびにCLIの新しい更新を確認します。
Mavenのライフサイクルにセキュリティを追加
MavenのビルドライフサイクルにSnyk Open Sourceのスキャンを組み込むと、自然でスムーズに運用できます。新しいMaven用Snykプラグインなら、この連携をシームレスに実現し、CIパイプラインを含むあらゆるマシンで同じ方法で実行できます。CLIを手動で呼び出す必要はもうありません。また、Snyk Open Sourceのスキャン設定はプロジェクトの一部として保存されます。開発者の負担をひとつ減らせます。
プラグインの詳細については、Github repositoryをご覧ください。この便利な連携を使う前に、無料のSnykアカウントへの登録もお忘れなく。
ぜひご覧いただきたい関連リソース:
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。
