フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

【新規ツール探し】GitHubでパッケージの脆弱性を調べてPRで教えてくれれる「dependabot」

  • 記事作成日:2022/12/14

情報

名前 URL
Github https://github.com/dependabot/dependabot-core
公式サイト https://docs.github.com/ja/code-security/dependabot
デモサイト
開発母体 GitHub
version
言語 Ruby
価格 無料(部分的に有料)
ライセンス Prosperity Public License 2.0.0

何ができるもの?

Dependabot を使用してサプライ チェーンを安全に保つ - GitHub Docs

  • アラート(Dependabot alerts)
  • セキュリティアップデートの自動更新(Dependabot security updates)
  • バージョンの自動更新

Dependabot alerts

Dependabot アラートについて - GitHub Docs

Dependabot alerts により、コードが安全でないパッケージに依存していることが通知されます。

この設定は public / private いずれもデフォルトでは有効化されていないので、各自で設定する必要があるようです。

GitHub は、 "パブリック" リポジトリ内の脆弱な依存関係とマルウェアを検出し、依存関係グラフを表示しますが、既定では Dependabot alertsは生成されません。 リポジトリの所有者または管理者アクセス権を持つユーザーは、パブリック リポジトリに対して Dependabot alertsを有効にすることができます。

プライベートリポジトリの所有者、または管理アクセス権を持つユーザは、リポジトリの依存関係グラフと Dependabot alerts を有効にすることで、Dependabot alerts を有効化できます。

自分が作っている OSS でも dependabot alert が飛んできていました。

サポートされているバージョン管理システム

About the dependency graph - GitHub Docs

メジャーどころは大体対応していますね。 (ここを見れば初めての言語でもどのパッケージ管理ツールを使えばいいかわかる!)

yaml もみてくれるのかーと思いましたが、注釈に .github/workflows/ 配下のもののみと記載がありました。

自分で依存関係グラフを作って送ることも可能

Dependency Submission API を使用する - GitHub Docs

Public Beta ですが、Dependency Submission API を使って依存関係を送信できます。ただし、以下に記載のように

送信された依存関係は、既知の脆弱性に対する Dependabot alerts と Dependabot security updates を受け取ります。 GitHub Advisory Database のサポートされているエコシステムのいずれかからの依存関係に対する Dependabot alerts のみを受け取ります。

Dependency Submission - GitHub Docs

GitHub 側がサポートしている依存関係から見つかったセキュリティアラートしかチェックできないので、エンタープライズ製品など非対応のものについては使えないようです。

PRの時点でチェックする

依存関係レビューの構成 - GitHub Docs

GitHub Actions で dependency review を使うと PR の時点で、依存関係を更新して diff のページで教えてくれるようです。

name: 'Dependency Review'
on: [pull_request]

permissions:
  contents: read

jobs:
  dependency-review:
   runs-on: ubuntu-latest
     steps:
       - name: 'Checkout Repository'
         uses: actions/checkout@v3
       - name: Dependency Review
         uses: actions/dependency-review-action@v3

また、「特定のライセンスのみ」「特定のセキュリティレベルのみ」 といった対応も可能です。

name: 'Dependency Review'
on: [pull_request]

permissions:
  contents: read

jobs:
  dependency-review:
  runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v3
      - name: Dependency Review
        uses: actions/dependency-review-action@v3
        with:
        # Possible values: "critical", "high", "moderate", "low" 
        fail-on-severity: critical

        # You can only include one of these two options: `allow-licenses` and `deny-licences`
        # ([String]). Only allow these licenses (optional)
        # Possible values: Any `spdx_id` value(s) from https://docs.github.com/en/rest/licenses 
        allow-licenses: GPL-3.0, BSD-3-Clause, MIT
        # ([String]). Block the pull request on these licenses (optional)
        # Possible values: Any  `spdx_id` value(s) from https://docs.github.com/en/rest/licenses 
        deny-licenses: LGPL-2.0, BSD-2-Clause

        # ([String]). Skip these GitHub Advisory Database IDs during detection (optional)
        # Possible values: Any valid GitHub Advisory Database ID from https://github.com/advisories  
        allow-ghsas: GHSA-abcd-1234-5679, GHSA-efgh-1234-5679

        # ([String]). Block pull requests that introduce vulnerabilities in the scopes that match this list (optional)
        # Possible values: "development", "runtime", "unknown"
        fail-on-scopes: development, runtime

ちなみに private リポジトリでは課金しないと使えないようです。

Dependabot security updates

Dependabot のセキュリティ アップデート - GitHub Docs

依存関係グラフと Dependabot alerts を有効にすると使える機能で、リポジトリで使っっている脆弱性のあるパッケージを識別し、それを解消する PR を自動で上げてくれる機能です。

リポジトリに dependabot.yml を追加することで、動きを指定することができます。

# Example configuration file that:
#  - Ignores lodash dependency
#  - Disables version-updates

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
    ignore:
      - dependency-name: "lodash"
        # For Lodash, ignore all updates
    # Disable version updates for npm dependencies
    open-pull-requests-limit: 0

Configuring Dependabot security updates (Dependabot セキュリティ アップデートの構成) - GitHub Docs

Dependabot version updates

リポジトリが依存するパッケージおよびアプリケーションの最新リリースに自動的に対応できるようにすることができます。

GitHub Dependabot のバージョンアップデートについて - GitHub Docs

こっちも同様に dependabot.yml を定義すると自動でバージョンアップ PR を作ってくれます。

対象のパッケージ管理システムはこちら。

どうやら kubernetes で使う docker image も対応しているようです。便利。

DependabotはKubernetesマニフェスト内のDockerイメージタグを更新することができます。

Dockerイメージタグを参照するKubernetesマニフェストを含むディレクトリごとに、dependabot.ymlファイルのDocker package-ecosystem要素にエントリを追加してください。

Kubernetesマニフェストは、Kubernetes Deployment YAMLファイルまたはHelmチャートにすることができます。

renovate ってのもあるので今度調べてみよう。

利用シーン

  • なんらかの外部パッケージを利用しており、危殆化対応、最新化対応をする場合
  • 独自の最新か方法を使っている場合でかつ dependabot 対応のもの

登場背景

見つからなかった

所感

依存関係を自動で解決し、セキュリティ更新の提案までPRでしてくれるのは非常に便利。 アップデートしてもちゃんと動くよねをテストできるようにしておけば強い。

使い方

Dependabot を使用してサプライ チェーンを安全に保つ - GitHub Docs