Snykでpackage.jsonに対する修正のプルリクエスト自動作成機能を試してみました

2022.08.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、AWS事業本部コンサルティング部に所属している今泉(@bun76235104)です。

みなさんは各種ライブラリの脆弱性対応やバージョンアップへの追従に疲れたことはありませんか?

私はあります。

Githubにも Dependabotなどの機能がありますよね。

調べたところ、Snykにも依存パッケージの脆弱性を検知して、自動でPRを作成してくれる機能があるようですので、今回はSnykのGitHub統合機能を活用して、リポジトリ上のpackage.json中のライブラリの脆弱性について検知・修正のプルリクエストを自動で出してくれる機能を試してみました!

なお、今回テストのためにあえて古いバージョンのライブラリを使用するように package.jsonを作成しておりますが、本番環境等でのご利用は当然お控えください。

脆弱性が検出されるようなpackage.jsonを用意

今回自動PR(プルリクエストのこと。以降本記事ではPRと略します。)作成のテストをするために以下のようにわざと非常に古いバージョンを指定したpackage.jsonを用意しました。

{
  "dependencies": {
    "axios": "^0.10.0"
  }
}

こちらのファイルをGithubのリポジトリにプッシュしました。

なお、GitHub integration - Snyk User Docsによると現在自動PRはプライベートリポジトリに対応していそうなので、プライベートリポジトリを作成しました。

SnykのWeb UIからGithub統合機能を有効化

以下手順に従って、Snyk Web UIのダッシュボードからGitHubの統合機能を有効にします。

snyk_dashboard_integration

以下のようにリポジトリがプロジェクトとして追加されました。

snyk_github_integration_project_added

自動でPRが作成されるように、 Settings => GitHub integration と遷移して、以下のように設定をしました。

snyk_auto_pr_setting

SnykからPRを作成できるようにGithubのアクセストークンを発行

Githubのアクセストークンの発行をします。

こちらの記事を参考に発行しました。

実行させたいアクションによって、付与すべき権限の範囲を設定する必要があります。

今回は Brokered GitHub Integrations の表を参考に、Automatic fix and upgrade pull requests を実行して欲しいので repo の全ての権限を付与してみました。

github_token_allow_repoall_for_snyk

発行したアクセストークンをSnyk Web UIで登録

先ほどGithubで発行したアクセストークンをSnyk Web UIから設定します。

以下、公式サイトの手順に従って設定しました。

画面右上の歯車マーク => Integrations => GithubEdit settings からTokenの設定画面に遷移できました。( Setting an account to open Snyk PRsを参照)

snyk_github_token_set

いざ自動PRの作成を待つ・・・

ここまで設定できたので自動でPRが作成されるのを待ってみましたが、どうにもPRが作成される気配がありません。

上で設定したGithubのアクセストークンの不備や権限不足かもしれないため、試しに以下のようにpackage.jsonに古いバージョンのライブラリを追加して直接mainブランチにプッシュしてみました。

{
  "dependencies": {
    "axios": "^0.10.0",
    "express": "1.0"
  }
}

すると以下のように修正のためのPRがSnykにより自動で作成されました。

auto_pr1

どうやら権限の問題でPRが作成されなわけではないようです。

Automated pull requests for known vulnerabilities (backlog)のページを詳しくみてみると以下のような記述がありました。

If a scan is manually run (you clicked Retest now for the project), the 24-hour window is marked as having been run and no automatic PR is created until the next automated scan runs

Retest now を実行することで既知の脆弱性(Snyk Web UIにて検出済)についても自動でPRが作成されると勘違いして、私がSnyk Web UIで Retest now を手動で実行してしまっていました。

そこでさらに24時間待つことで、以下のように package.jsonの古いライブラリのバージョンアップを行うためのPRが作成されることを確認しました。

snyk_auto_pr_success

感想

  • 依存パッケージのバージョンアップを手動で行う苦行から解放されそう
  • Snykの場合、他にもDockerfileのチェックや開発中のソースコードのチェックなど機能が充実しているため各種セキュリティチェックも一元化できそう

ローカル環境での開発段階においても、お使いのIDEで危険なコードの検出やアドバイスを出してくれるため、セキュリティ対策がより開発者に近くなりそうです。