依存関係の確認について
依存関係レビューを使うと、すべてのPull Reqeustにおける以下の変更による依存関係の変化とセキュリティについての影響を理解しやすくなります。pull request の [Files Changed](変更されたファイル) タブ上のリッチ diff で依存関係の変更をわかりやすく視覚化できます。 依存関係レビューは、以下のことを知らせます:
- リリース日と合わせて、追加、削除、更新された依存関係
- これらのコンポーネントを使うプロジェクトの数
- これらの依存関係に関する脆弱性のデータ
パッケージ マニフェストまたはロックされたファイルへの変更が含まれている場合は、依存関係のレビューを表示して、何が変更されたかを確認できます。 依存関係のレビューには、ロックファイル内の間接的な依存関係への変更の詳細が含まれ、追加または更新された依存関係のいずれかに既知の脆弱性が含まれているかどうかが示されます。
メモ
"依存関係レビュー アクション" とは、 GitHub Actions コンテキスト内のプル要求の違いを報告し、 GitHub Actions ワークフローに強制メカニズムを追加できる特定のアクションを指します。 詳細については、この記事の後半 の「 依存関係レビュー アクション 」を参照してください。
時に、マニフェスト内の 1 つの依存関係のバージョンを更新して、プルリクエストを生成することがあります。 ただし、この直接依存関係の更新バージョンでも依存関係が更新されている場合は、プルリクエストに予想よりも多くの変更が加えられている可能性があります。 各マニフェストとロックファイルの依存関係のレビューにより、何が変更されたか、新しい依存関係バージョンのいずれかに既知の脆弱性が含まれているかどうかを簡単に確認できます。
プルリクエストで依存関係のレビューを確認し、脆弱性としてフラグが付けられている依存関係を変更することで、プロジェクトに脆弱性が追加されるのを防ぐことができます。 依存関係レビューのしくみについて詳しくは、「プルリクエスト内の依存関係の変更をレビューする」をご覧ください。
Dependabot alerts は、依存関係に既に存在する脆弱性を検出しますが、後で問題を修正するよりも、潜在的な問題の導入を避ける方がはるかに優れています。 Dependabot alerts の詳細については、「Dependabot alerts」を参照してください。
依存関係のレビューは、依存関係グラフと同じ言語とパッケージ管理エコシステムをサポートしています。 詳細については、「依存関係グラフがサポートされるパッケージ エコシステム」を参照してください。
GitHubで使用可能なサプライ チェーン機能の詳細については、サプライ チェーンのセキュリティ を参照してください。
依存関係レビューを有効にする
依存関係グラフを有効にすると、依存関係レビューが使用できるようになります。 詳細については、「 依存関係グラフの有効化」を参照してください。
依存関係レビュー アクション について
"依存関係レビュー アクション" とは、GitHub Actions コンテキスト内の pull request の差異を報告できる特定のアクションです。 以下を参照してください。dependency-review-action リポジトリで 依存関係レビュー アクション を使って、pull request に依存関係レビューを適用できます。 このアクションは、pull request のパッケージ バージョンの変更によって発生した依存関係の脆弱なバージョンをスキャンし、関連するセキュリティの脆弱性について警告します。 これにより、pull request で何が変更されているかをより正確に把握でき、リポジトリに脆弱性が追加されるのを防ぐことができます。

既定では、脆弱性のあるパッケージが検出された場合、依存関係レビュー アクション チェックは失敗します。 ���ポジトリの所有者が依存関係レビューのチェックに合格することを要求している場合、チェックが失敗すると pull request のマージがブロックされます。 詳しくは、「保護されたブランチについて」をご覧ください。
このアクションは、すべてのパブリック リポジトリと、が有効になっているプライベート GitHub Code Security or GitHub Advanced Securityリポジトリで使用できます。
組織の所有者は、組織内の���ポジトリ全体で 依存関係レビュー アクション の使用を実施することで、依存関係レビューを大規模にロールアウトできます。 これには、必要なワークフローとして 依存関係レビュー アクション を設定するためのリポジトリ ルールセットの使用が含まれます。つまり、pull requestは、ワークフローが必要なすべてのチェックに合格した後にのみ統合できます。 詳しくは、「organization 全体で依存関係レビューを実施する」をご覧ください。
このアクションでは、依存関係の確認 REST API を使用して、ベース コミットとヘッド コミットの間での依存関係変更の差分が取得されます。 依存関係レビュー API を使用すると、リポジトリ上の 2 つのコミット間で、依存関係の変更の差分 (脆弱性データを含む) を取得できます。 詳細については、「依存関係レビュー用の REST API エンドポイント」を参照してください。 このアクションでは、 依存関係送信 APIを介して送信された依存関係も考慮されます。 依存関係送信 API の詳細については、「依存関係サブミッション API を使用する」を参照してください。
メモ
依存関係レビュー API と 依存関係送信 API は連携して動作します。 これは、依存関係レビュー API には、依存関係送信 API を介して送信された依存関係が含まれます。
ニーズに合わせて 依存関係レビュー アクション を構成できます。 たとえば、アクションを失敗させる重大度レベルを指定したりスキャンするライセンスの許可または拒否リストを設定したりできます。 詳細については、「依存関係レビュー アクションの構成」を参照してください。
依存関係レビュー API と 依存関係送信 API を一緒に使用するためのベスト プラクティス
依存関係レビュー API と 依存関係レビュー アクション はどちらも、プル要求の依存関係の変更と、ターゲット ブランチのヘッド コミットにおける依存関係の状態を比較することで機能します。
リポジトリが、 GitHubのサポートされているエコシステムのいずれかで静的に定義された依存関係にのみ依存している場合、依存関係レビュー API と 依存関係レビュー アクション は一貫して機能します。
ただし、ビルド中に依存関係をスキャンし、 依存関係送信 APIにアップロードしたい場合があります。 この場合、依存関係レビュー API と 依存関係送信 APIのプロセスを実行するときに競合状態が発生しないようにするために従う必要があるベスト プラクティスがいくつかあります。データが不足する可能性があるためです。
実行する必要があるベスト プラクティスは、 GitHub Actions を使用して 依存関係送信 API と依存関係レビュー API にアクセスするか、直接 API アクセスを使用するかによって異なります。
GitHub Actionsを使用して 依存関係送信 API と依存関係レビュー API にアクセスする
GitHub Actionsを使用して依存関係送信 APIまたは依存関係レビュー API にアクセスする場合:
- GitHub Actionsと同じ依存関係レビュー アクション ワークフローですべての依存関係の送信アクションを実行してください。 これにより、実行順序を制御でき、依存関係の確認が常に機能するようになります。
- 依存関係レビュー アクションを個別に実行する場合は、次の操作を行う必要があります。
retry-on-snapshot-warningsをtrueに設定します。- 実行時間が最も長い依存関係の送信アクションの一般的な実行時間 (秒単位) を
retry-on-snapshot-warnings-timeoutわずかに超える値に設定します。
依存関係送信 APIと依存関係レビュー API への直接 API アクセスの使用
GitHub Actionsを使用せず、コードが依存関係送信 APIと依存関係レビュー API への直接アクセスに依存している場合:
- 最初に 依存関係送信 API を呼び出すコードを実行してから、後で依存関係レビュー API を呼び出すコードを実行してください。
- 依存関係送信 APIと依存関係レビュー API のコードを並列で実行する場合は、再試行ロジックを実装し、次の点に注意してください。
- 比較の両側にスナップショットが見つからない場合は、
x-github-dependency-graph-snapshot-warningsヘッダーにその説明が表示されます (base64 でエンコードされた文字列として)。 そのため、ヘッダーが空でない場合は、再試行を検討する必要があります。 - 指数バックオフを使用して 再試行を実装します。
- 依存関係の送信コードの一般的なランタイムを考慮して、妥当な回数の再試行を実装します。
- 比較の両側にスナップショットが見つからない場合は、