Snyk fix:Snyk CLIによる脆弱性の自動修正
2021年10月7日
0 分で読めますSnyk CLIに、脆弱性の検出と修正をこれまで以上に簡単にする新しいコマンドsnyk fixのオープンベータ版が登場しました。
Snyk CLIはすでに非常に汎用性が高く強力なツールです。開発者はこれを活用し、ローカルの開発環境で手動で、またはCI/CDパイプラインの一環として自動で、プロジェクトの脆弱性を検出して修正できます。
snyk testを実行すると、プロジェクトがスキャンされ、検出されたすべての脆弱性の一覧が表示されます。脆弱性を修正できる依存関係のアップグレード方法がある場合、Snyk CLIはその推奨事項に加えて、アップグレード方法と脆弱性の修正に必要な情報を提示します。
新しいsnyk fixコマンドは、推奨事項を自動で適用し、さらに一歩進んだ対策を実現します。ローカルの開発ワークフローで修正をすばやく適用したい開発者や、CI/CDの一環として修正を自動化したい方に特に便利です。
詳しく見ていく前に、利用可能な環境とサポート対象のエコシステムについて、いくつかお知らせします。
snyk fixコマンドはオープンベータ版のため、使用中に問題が発生する可能性があります。現在サポートされているのは、Pip、Pipenv、Poetryを使用するPythonプロジェクトのみです。詳しくは
snyk fixのドキュメントをご覧ください。
さっそく始めましょう。
Snyk CLIをセットアップする
まず、Snyk CLIがインストールされていることを確認してください。すでに使い慣れていてインストール済みの場合は、バージョンがv1.715.0以降であることを確認しましょう。
Snyk CLIのセットアップは簡単です。npmまたはHomebrewを使ってすばやくインストールし、Snykアカウントで認証するだけです(まだアカウントをお持ちでない場合は、こちらから無料で登録できます)。
CLIの認証を求める画面がブラウザーで開きます。認証を完了してください。これで、Snyk CLIを使ってプロジェクトの脆弱性をスキャンする準備が整いました。
まずはSnyk CLIを実行してテストしてみましょう。ここでは、PyGoatプロジェクトのこちらのフォークを使用します。

上のテスト結果からわかるように、Snyk CLIは8件の脆弱性を検出し、修正に向けたアップグレードを推奨しています。
次はどうすればよいでしょうか。テスト結果の末尾で、Snyk CLIが新しいsnyk fixコマンドの有効化を推奨しています。次のステップに進みましょう。
snyk fixを有効にする
冒頭でお伝えしたとおり、新しいsnyk fixコマンドは現在オープンベータ版です。利用するには、まず機能を有効にする必要があります。Snyk UI内にある専用エリアSnyk Previewから有効化できます。ここでは、開発中の新機能を利用できます。
SnykでSettings、次にSnyk Previewの順に移動します。「Automatically apply recommended remediation in CLI」の下にあるsnyk fix(1)を有効にし、Save changesボタン(2)をクリックして変更を適用します。

ローカル環境で脆弱性を修正する
新しいコマンドを有効にできたので、さっそく試してみましょう。CLIで次のコマンドを入力します。
Snyk CLIは、可能な場合、検出された脆弱性の修正に必要なバージョンへのアップグレードを自動で適用し、結果の概要を出力します。

今回のPyGoatアプリケーションでは、8件中6件の脆弱性が修正されました。再度スキャンすると、2件の問題が残っています。Jinja2パッケージの中程度の深刻度の脆弱性と、psycopg2パッケージで検出されたLGPLv3.0ライセンスです。
次のステップとして、Snyk CLIでプロジェクトを継続的に監視し、残る脆弱性の修正が利用可能になったときや、これらの依存関係で新たな脆弱性が見つかったときに通知を受け取ることができます。次のコマンドを実行してください。
CI/CDの一環として脆弱性を修正する
新しいsnyk fixコマンドを使えば、CI/CDパイプラインでの修正も自動化できます。GitHub Actionsを使った例を見てみましょう。
GitHub Actionsは、継続的インテグレーションに関するワークフローを開発者が自動化できるよう、GitHubが提供を開始した機能です。SnykのGitHub Actionsを使うと、Snykをこれらのワークフローに簡単に統合し、自動化されたCI/CDワークフローの一環として、GitHub上で直接プロジェクトの脆弱性をテストできます。このワークフローの一環として、脆弱性の修正もできるようになりました。
具体的には、次のワークフローを実行するこちらのアクションを使用します。
Init - バージョンが段階的にアップグレードされるのを防ぐため、ワークフローの最初に直近のコミットメッセージを確認します。すでに自動修正が行われている場合、
snyk fixを再実行しません。Security - ワークフローで
snyk fixを実行して脆弱性をスキャンし、アップグレード方法が見つかった場合はPRを作成します。
アクションの使い方は簡単です。
SnykのGitHub Actionでは、SNYK_TOKENという環境変数を使用します。これはSnyk APIトークンです。GitHub Actionを設定する前に取得してください。Snyk UIのSettingsページで確認できます。

トークンを取得したら、リポジトリの設定にあるSettings | Secretsでシークレットとして登録します。

これでSnyk Actionを設定する準備ができました。GitHubリポジトリでActionsタブを開き、左上のNew workflowボタンをクリックします。
GitHubでは、リポジトリのプログラミング言語に応じたテンプレートアクションがいくつか用意されています。Snyk GitHub Actionを設定するには、ページ上部のset up a workflow yourselfをクリックします。

サンプルコードをこちらのコードに置き換えます(設定内の該当する名前空間に、使用するブランチ名を入力してください)。
これで完了です。新しいファイルをコミットするとPRが作成され、ワークフローが起動します。これにより、snyk fixコマンドを使った修正の自動化をシミュレーションできます。すべての手順を示したこちらのワークフローをご覧ください。

ワークフローの設定どおり、推奨される修正を含む新しいPRが作成されます。

snyk fixをぜひお試しください。
Snyk Previewを提供している理由の一つは、開発中やベータ版の機能をいち早く試せるようにするためです。snyk fixは、正式リリース前にユーザーコミュニティからぜひフィードバックをいただきたい新機能の好例です。ぜひお試しいただき、ご意見をsnyk-fix-feedback@snyk.ioまでお寄せください。
新しいコマンドの使い方や、サポート対象・対象外について詳しくは、snyk fixのドキュメントをご覧ください。
快適な修正を!
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。