GitHub Dependabotで
セキュリティ脆弱性を自動検出する
GitHub Dependabotは、プロジェクトの依存パッケージに含まれる既知の脆弱性を自動的に検出し、修正PRを作成してくれる機能です。設定方法から対応手順まで解説します。
こんな人向けの記事です
- GitHubリポジトリのセキュリティを強化したい人
- 依存パッケージの脆弱性を自動で検出したい人
- Dependabotアラートの対処方法を知りたい人
Step 1Dependabotとは
Dependabotは、GitHubに組み込まれたセキュリティ機能です。プロジェクトの依存パッケージ(npm、pip、Gemなど)を監視し、既知の脆弱性が見つかるとアラートを発行します。
| 機能 | 説明 |
|---|---|
| Dependabot alerts | 脆弱性のあるパッケージを検出してアラートを表示 |
| Dependabot security updates | 脆弱性を修正するPRを自動作成 |
| Dependabot version updates | パッケージを最新バージョンに更新するPRを定期作成 |
対応パッケージマネージャー: npm、pip、Bundler、Maven、Gradle、Composer、Go modules、Cargo、Docker など主要なパッケージマネージャーに対応しています。
Step 2Dependabotの有効化
方法1: GitHub Webから設定
リポジトリの Settings → Code security で以下を有効にします。
- Dependency graph を Enable(依存関係の解析)
- Dependabot alerts を Enable(脆弱性アラート)
- Dependabot security updates を Enable(自動修正PR)
方法2: GitHub CLIから設定
# Dependabotアラートを有効化
gh api repos/ユーザー名/リポジトリ名/vulnerability-alerts -X PUTStep 3アラートの確認と対処
脆弱性が検出されると、リポジトリの Security → Dependabot alerts にアラートが表示されます。
対処方法
| 対処 | 方法 | 使う場面 |
|---|---|---|
| パッケージ更新 | 対象パッケージをアップデート | 互換性の問題がない場合 |
| 自動修正PR | DependabotのPRをマージ | security updatesが有効な場合 |
| dismiss | アラートを無視 | 該当パッケージを使っていない場合 |
# Pythonパッケージの更新例
pip install --upgrade パッケージ名
pip freeze > requirements.txt
# Node.jsパッケージの更新例
npm update パッケージ名
npm audit fix注意: パッケージを更新する際は、破壊的変更がないか必ずリリースノートを確認してください。メジャーバージョンアップはAPIが変わる可能性があります。
Step 4GitHub CLIでアラートを確認する
ブラウザを開かなくても、GitHub CLIでアラートを一覧表示できます。
# アラート一覧を取得(パッケージ名・深刻度・概要)
gh api repos/ユーザー名/リポジトリ名/dependabot/alerts --jq '.[] | {
severity: .security_advisory.severity,
package: .security_vulnerability.package.name,
summary: .security_advisory.summary,
state: .state
}'
# openなアラートのみ取得
gh api repos/ユーザー名/リポジトリ名/dependabot/alerts?state=open --jq '.[] | {severity: .security_advisory.severity, package: .security_vulnerability.package.name}'Step 5Dependabot version updatesの設定
定期的にパッケージを最新バージョンに更新するPRを自動作成するには、.github/dependabot.ymlをリポジトリに追加します。
version: 2
updates:
# Python(pip)の依存関係を毎週チェック
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
# npm の依存関係を毎週チェック
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
# Dockerイメージを毎月チェック
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "monthly"ポイント: intervalはdaily、weekly、monthlyから選べます。アクティブなプロジェクトではweeklyが推奨です。
Step 6アラートの深刻度と優先順位
Dependabotアラートには深刻度(severity)が設定されています。高い順に対処してください。
| 深刻度 | 説明 | 対応目安 |
|---|---|---|
| critical | リモートコード実行などの重大な脆弱性 | 即座に対応 |
| high | データ漏洩やDoSなどの重要な脆弱性 | 1週間以内 |
| medium | 限定的な影響の脆弱性 | 次回リリースまで |
| low | 影響が軽微な脆弱性 | 余裕のある時に対応 |
重要: criticalとhighのアラートは放置しないでください。攻撃者は公開された脆弱性情報を利用して自動的に攻撃を仕掛けることがあります。