SnykテストでCI/CDワークフローとビルドシステムに実用的なセキュリティを組み込む
2019年12月12日
0 分で読めますGitHubやGitLabなどのソースコード管理システムに保存したリポジトリをSnykに接続し、プロジェクトをインポートすることで、アプリケーション開発の中核となるワークフロー全体でアプリケーションセキュリティテストを活用できます。プロジェクトのライブラリマニフェストで新たに検出された脆弱性を継続的にセキュリティ監視できるだけでなく、セキュリティ上の問題を修正するプルリクエストを自動で作成することもできます。
こうした基本的なGit連携に加えて、SnykはSnyk CLIを使用し、JenkinsなどのビルドプロセスやCIプロセス内で実行できるCI/CD(継続的インテグレーション/継続的デリバリー)ツールとも連携します。Snyk CLIは非常に柔軟なソリューションです。開発者はアプリケーションやコンテナのオープンソースの脆弱性を簡単にスキャンして修正できます。DevOpsエンジニアがこのCLIツールをパイプラインに組み込むケースが増えているのも当然です。
開発者にとって役立つアプリケーションセキュリティの知見を提供するには?
DevOpsまたはDevSecOpsエンジニアであれば、一度はこの疑問を抱いたことがあるでしょう。
CI/CDでアプリケーションセキュリティテストを行うのは大きな前進です。しかし、ビルドが失敗した際に開発者が問題を修正できるよう、具体的な修正方法を提示できれば、さらに効果的です。また、修正できない問題でビルドを止めて開発者を途方に暮れさせるといった、不要なノイズを減らすことにもつながります。
価値あるアドバイスを提供するには、実際の対応につながることを第一に考えましょう。
以下の画像のようにSnykのUIやソースコード管理との連携から直接作業する場合は簡単です。では、CLIツールを使う開発者にも同じように対応するにはどうすればよいでしょうか?

CLIからSnykを実行してセキュリティ上の問題を見つけているなら、脆弱性が見やすく表示された一覧にはすでに慣れているでしょう。ビルド結果の出力を扱う際に便利ですが、結果をJSON形式でも取得できることをご存じですか?また、それを使って開発者がセキュリティ上の問題を解決するための具体的な対応を、さらに促すにはどうすればよいでしょうか?

Snyk CLIのテスト結果(JSON)のフィルタリング
Snyk CLIには、テストから必要な情報を取得するための便利なコマンドライン引数がいくつか用意されています。参考資料としてSnyk CLIチートシートもご覧ください。
便利なコマンドライン引数の1つが--jsonオプションです。SnykテストのJSON出力とjq JSONパーサーコマンドを組み合わせると、脆弱性の結果を効率よく絞り込み、加工できます。
この引数を使えば、脆弱なライブラリのアップグレードやパッチの適用で修正できる問題だけを簡単に表示できます。まさに具体的な対応につながる情報です!
snyk test --json | jq '.vulnerabilities |= map(select(.isUpgradable == true or .isPatchable == true))'
機械生成されたJSON出力からビジュアル化へ
加工できる構造化JSON形式は便利ですが、結果を見やすいビジュアルに変換できればさらに効果的です。フィルタリングした結果を開発者やチームリーダー、その他の関係者と共有すれば、プロジェクトの脆弱性を軽減するための対応を進められます。
幸い、snyk-to-htmlCLIを利用できます。このツールを使えば、JSON形式の結果を静的なHTMLページにエクスポートできます。単一のファイルにまとめられるため、メールで送ったり、自由に共有したりできます。
まず、ツールをインストールします。
$ npm install --global snyk-to-html
次に、Snyk CLIテストのJSON出力をjqにパイプしてフィルタリングし、最後にsnyk-to-htmlに渡してJSONをHTMLファイルに変換します。
$ snyk test —json | snyk-to-html -o results.html
次のような、見やすく整形された静的HTMLレポートが生成されます。関係者と共有して活用できます。

まとめ
脆弱性を把握することは重要ですが、開発者が自ら対応し、アプリケーションを安全に保てるよう、具体的なアドバイスと組み合わせることで、その効果はさらに高まることを忘れないでください。
Snyk CLIの出力についてさらに詳しく知るには、以下のリソースをご覧ください。
こちらの短い動画でCLIツールの使い方を確認し、CLIの全リファレンスもご覧ください。
便利なSnyk CLIチートシートで、コマンド引数についてさらに詳しく学びましょう。
フィルターやその他の演算子については、jqのドキュメントをご覧ください。
最後に、JSONを使ってSnykテストを最大限に活用する方法を詳しく解説した記事もぜひご覧ください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。



