bundler-auditとGitHub Actionsを使ってRubyのgemの脆弱性を定期チェックする
こんにちは、PharmaX エンジニアの尾崎(@FooOzaki)です。
本記事ではRubyのgemの脆弱性をbundler-auditを利用してチェックする手法をご紹介します。
また、併せてGitHub Actionsでスケジュール実行する方法もご紹介します。
bundler-auditについて
bundler-auditはGemfile.lockを脆弱性データベースと照合し、gemに既知の脆弱性が見つかると警告をしてくれます。
具体的には以下のような形で脆弱性があるgemをリストアップしてくれます。
$ bundle exec bundler-audit
Name: gem_file_name
Version: x.x.x
Advisory: CVE-2024-xxxx
Criticality: Medium
URL: https://xxxxxxxx
Title: xxxxxx
Solution: upgrade to >= x.x.x
bundler-auditの導入とローカルでの実行
導入自体はgemfileに以下のように追記して bundle install
すればOKです。
group :development do
gem 'bundler-audit'
end
ローカルで実行するときは以下のコマンドで実行できます。脆弱性があった場合は exit code 1 で終了します。
bundle-audit check --update
基本はこれだけで事足りると思いますが、詳細はリポジトリを確認いただければと思います。
GitHub Actionsでの実行
続いてbundle auditコマンドをGitHub Actions上で実行してみましょう。
はじめにGitHub Actionsのymlファイルは以下の通りです。
.github/workflows/schedule-audit.yml
name: schedule-audit
on:
schedule:
- cron: '00 0 * * *'
jobs:
audit:
container:
image: ruby:3.3.0
timeout-minutes: 10
name: verify bundle libraries
runs-on: ubuntu-latest
steps:
- name: develop checkout
uses: actions/checkout@v4
with:
ref: develop
- name: Install bundler-audit
run: gem install bundler-audit
- name: Bundler Audit
run: bundle audit check --update
実行のトリガーは以下のように設定していますが、タイムゾーンがUTCなのでこの設定だと毎朝9時に実行する設定となります。
on:
schedule:
- cron: '00 0 * * *'
続いて、実行環境についてですが実際のアプリの実行環境で実行しても良いと思いますが、rubyの実行環境があれば動きます。
jobs:
audit:
container:
image: ruby:3.3.0
timeout-minutes: 10
name: verify bundle libraries
runs-on: ubuntu-latest
特にブランチを指定しなければGitHubのデフォルトブランチで動くので、bundler-auditを動かすブランチを指定したい場合は以下の形で指定してあげてください。
steps:
- name: develop checkout
uses: actions/checkout@v4
with:
ref: develop
最後に実行ステップですが、bundler-auditをインストールした上でcheckコマンドを実行します。
脆弱性があった場合は exit code 1 で終了するため、GitHub ActionsもFailして検知が可能となります。
steps:
- name: Install bundler-audit
run: gem install bundler-audit
- name: Bundler Audit
run: bundle audit check --update
脆弱性を無視する方法
.bundler-audit.yml
ファイルで無視したい脆弱性を指定することで無視することが可能です。
特に影響のない脆弱性や依存関係などですぐにあげれない場合はこちらの方法で無視していただければと思います。
ignore:
- CVE-2024-xxx
- CVE-2024-yyy
終わりに
今回はbundler-auditとGitHub Actionsを使ってRubyのgemの脆弱性を定期チェックするを紹介しました。参考になれば幸いです!
PharmaX では、様々なバックグラウンドを持つエンジニアをお待ちしております。
もし、興味をお持ちの場合は、私のXアカウント(@FooOzaki)にお気軽にメッセージいただけますと幸いです!
PharmaXエンジニアチームのテックブログです。エンジニアメンバーが、PharmaXの事業を通じて得た技術的な知見や、チームマネジメントについての知見を共有します。 PharmaXエンジニアチームやメンバーの雰囲気が分かるような記事は、note(note.com/pharmax)もご覧ください。
Discussion