依存関係を維持するためのベスト プラクティス
依存関係を最新の状態に保つことは、セキュリティで保護されたソフトウェア環境を維持するために不可欠です。 以下に、推奨事項をいくつか示します。
セキュリティ重視の依存関係管理ツールを採用する
- 依存関係の脆弱性をスキャンし、更新プログラムを自動的に提案するツールを使い、設定します。
- 継続的に監視と更新を行うために、必ずこれらのツールを CI/CD パイプラインに統合します。
- 破壊的変更を回避するために、セマンティック バージョニングに従うようにプロセスを設定します。
定期的な脆弱性スキャンと監査を実行する
- 定期的な依存関係の監査と依存関係のスキャンをスケジュールして、古い依存関係や脆弱な依存関係を特定します。
セキュリティ パッチ管理を自動化する
- セキュリティ パッチを自動的に適用するように依存関係管理ツールを構成します。
- 不可欠なセキュリティ更新プログラムに対しては自動 pull request を設定して、迅速に確認してマージできるようにします。
依存関係の使用に関するポリシーを適用する
- 依存関係のセキュリティで保護されたバージョンの使用を強制するポリシーを実装します。
- Pull request によって脆弱性が生じた場合、または脆弱な依存関係の更新に失敗した場合は、pull request のマージを禁止できるツールを使います。
セキュリティ テストを CI/CD に統合する
- セキュリティ テスト ツールを CI/CD パイプラインに組み込みます。
- 依存関係の更新プログラムは、必ずセキュリティ コンプライアンスについて自動的にテストされるようにします。
ロック ファイルと依存関係のピン留めを使う
- ロック ファイル (
package-lock.json
、yarn.lock
、Pipfile.lock
など) を使って、依存関係を既知のセキュリティで保護されたバージョンにピン留めします。 - 意図しないセキュリティ上の issue が発生することなく依存関係が最新の状態に保たれるように、これらのロック ファイルを定期的に更新し、確認します。
セキュリティ アドバイザリを監視する
- 使う言語とフレームワークのセキュリティ アドバイザリをサブスクライブします。
- アドバイザリの開発ワークフローへの統合を自動化して、新しい脆弱性に関する最新情報を常に把握します。
- 依存関係管理ツールに用意されているダッシュボードを監視します。
- 重要な更新プログラム、特にセキュリティ パッチに注意し、優先順位を付けます。
バージョン コントロールと変更管理
- バージョン コントロールで依存関係の変更を追跡します (たとえば、自動化された pull request を使います)。
- 定期的にコード レビューを実施して、更新プログラムによって新しい脆弱性が生じないようにします。
トレーニングと意識向上
- 依存関係を安全かつ最新の状態に保つことの重要性について、開発チームと運用チームを教育します。
- 依存関係管理ツールとセキュリティ ツールを効果的に使う方法に関するトレーニングを提供します。
脆弱性に対する対応計画
- 依存関係で脆弱性が特定された場合の明確なインシデント応答計画を立てます。
- セキュリティ上の issue に迅速に対処し、修復する方法をチームが確実に理解できるようにします。
これらのプラクティスに従うことで、古くて脆弱な依存関係によって生じるリスクを大幅に軽減し、より安全な環境を維持することができます。
GitHub の活用方法
GitHub には、コードベースのセキュリティの維持に役立つセキュリティ機能がいくつか用意されています。
依存関係グラフ
- プロジェクトの依存関係を表形式で表示します。
- グラフは、プロジェクトの依存関係を理解するのに役立ちます。GitHub でこれを使って脆弱な依存関係を特定することができます。
- 詳しくは、「依存関係グラフについて」をご覧ください。
依存関係レビュー
-
CI/CD パイプラインに統合されており、pull request ごとにコード内の安全ではない依存関係を検出できます。 詳しくは、「依存関係の確認について」をご覧ください。
-
依存関係レビュー アクション は、脆弱性が生じる場合、または脆弱な依存関係の更新に失敗する場合に、pull request のマージを禁止できるツールです。 詳細については、「依存関係の確認について」の「依存関係レビュー アクション について」を参照してください。
Dependabot
-
Dependabot alerts: Dependabot を使って、既知の脆弱性がないか依存関係をスキャンし、リポジトリに脆弱性が見つかった場合はアラートを自動的に作成することができます。 詳しくは、「Dependabot アラートについて」をご覧ください。
-
Dependabot security updates: pull request を自動的に開き、脆弱な依存関係を既知の脆弱性のないバージョンに更新します。 これにより、修正プログラムをすばやく確認してマージできます。 詳しくは、「Dependabot のセキュリティ アップデート」をご覧ください。
-
Dependabot version updates: pull request を自動的に開いて依存関係を定期的に最新バージョンに更新し、常に最新のパッケージを使用できるように構成することもできます。 詳細については、「GitHub Dependabot のバージョンアップデートについて」を参照してください。
-
グループ化された更新プログラム: 複数の更新プログラムを 1 つの pull request にグループ化することで、Dependabot updates の pull request の確認と配置が容易になります。「Dependabot バージョン更新プログラムに合わせて pull request の作成を最適化する」の「グループ化されたセキュリティ アップデートについて」と例を参照してください。
セキュリティ アドバイザリ
-
非公開の脆弱性レポート: これにより、メンテナはリポジトリのセキュリティ アドバイザリを非公開で議論し、修正し、公開することができます。 詳細については、「セキュリティの脆弱性を非公開で報告する」を参照してください。
-
GitHub Advisory Database: 依存関係の脆弱性を特定するために Dependabot によって使われるセキュリティ アドバイザリのデータベース。 詳しくは、「GitHub Advisory Database について」をご覧ください。
セキュリティの概要
- セキュリティの概要ページのダッシュボードでは、organization または Enterprise のセキュリティの状況と進行状況に関する分析情報を確認できます。 これは、注意が必要なリポジトリをユーザーが特定し、アプリケーション セキュリティ プログラムの正常性を監視するのに役立ちます。詳細については、「セキュリティの概要について」を参照してください。
セキュリティ ポリシー
- セキュリティ上の issue の報告と処理のためのセキュリティ ポリシーと手順の概要を記述した
SECURITY.md
ファイルをリポジトリに作成できます。 詳しくは、「リポジトリへのセキュリティ ポリシーの追加」をご覧ください。
GitHub のセキュリティ機能を使ったサプライ チェーン全体にわたるその他のガイダンスについては、「エンドツーエンドのサプライ チェーンのセキュリティ保護」を参照してください。