GitHubのセキュリティ機能について
GitHubには、コードのセキュリティを強化する多くの機能が用意されています。 GitHubのビルトイン機能を使用し、ワークフローが依存するアクションの理解、実行するアクションの脆弱性に関する通知を受け取れるようにし、ワークフロー内のアクションを最新の状態に保つプロセスを自動化できます。 アクションを公開して維持した場合、GitHubを使用して脆弱性とその修正方法についてコミュニティとコミュニケーションが取れます。 GitHubが提供するセキュリティ機能の詳細については、「GitHub セキュリティ機能」を参照してください。
この記事では、GitHubのセキュリティ機能の一部を使用し、GitHub Actionsの使用に伴うセキュリティを強化する方法について説明します。
ワークフローの依存関係について理解する
依存関係グラフを使用し、リポジトリのワークフローが使用するアクションを調べることができます。 依存関係グラフは、リポジトリに保存されたマニフェストとロック ファイルの概要です。 また、./github/workflows/
内のファイルもマニフェストとして認識されます。つまり、構文 jobs[*].steps[*].uses
または jobs.<job_id>.uses
を使って参照されるすべてのアクションまたはワークフローは、依存関係として解析されます。
依存関係グラフには、ワークフローで使用されるアクションに関する次の情報が表示されます。
- アクションを所有するアカウントまたは組織。
- アクションを参照するワークフロー ファイル。
- アクションがピン留めされているバージョンまたは SHA。
依存関係グラフでは、依存関係は脆弱性の重大度によって自動的に並べ替えられます。 使用するいずれかのアクションにセキュリティ アドバイザリがある場合、リストの上部に表示されます。 依存関係グラフからアドバイザリに移動し、脆弱性を解決する手順にアクセスできます。
Enterprise 所有者は Enterprise に対して依存関係グラフと Dependabot alerts を構成できます。 詳細については、「企業の依存関係グラフの有効化」を参照してください。
使用するアクションのセキュリティ脆弱性を認識する
マーケットプレースで利用可能なアクションの場合、GitHubは関連するセキュリティ アドバイザリを確認し、それらのアドバイザリをGitHub Advisory Databaseに追加します。 データベースを検索して既存の脆弱性に関する情報とその修正方法の手順を見つけるため、使用するアクションを調べることができます。 検索を効率化するには、GitHub Advisory DatabaseでGitHub Actionsフィルターを使用します。
次のことができるようにリポジトリを設定できます。
- ワークフローで使用されるアクションが脆弱性レポートを受け取ったときにアラートを受信します。 詳細については、「ワークフローのアクションを監視する」を参照してください。
- ワークフローでアクションを追加または更新すると、既存のアドバイザリに関する警告が表示されます。 詳細については、「新規または更新されたワークフローで脆弱性に対するアクションのスクリーニング」を参照してください。
ワークフローでアクションを監視する
Dependabotを使用してワークフローのアクションを監視し、Dependabot alertsを有効にして使用するアクションに報告された脆弱性があるときに通知されるようにすることができます。 Dependabotは、有効にしたリポジトリの既定のブランチにスキャンを実行し、不安定な依存関係を検知します。 Dependabotは、新しいアドバイザリがGitHub Advisory Databaseに追加されるか、使用するアクションが更新された場合、Dependabot alertsを生成します。
Note
Dependabot は、セマンティック バージョニングを使用する脆弱なアクションのアラートのみを作成し、SHA 値にピン留めされたアクションのアラートを作成しません。
ユーザーがリポジトリに Dependabot alerts を管理する前に、Enterprise 所有者はまず Enterprise に対して Dependabot を設定する必要があります。 詳細については、「エンタープライズ向けの Dependabot の有効化」を参照してください。
リポジトリのDependabot alertsタブの開いた・閉じたすべてのDependabot alertsおよび対応するDependabot security updatesを表示できます。詳細については、「Dependabot アラートの表示と更新」を参照してください。
新しいワークフローまたは更新されたワークフローの脆弱性のスクリーニング アクション
Pull request を開いてワークフローを更新するとき、使用するアクションに加えた変更のセキュリティ上の影響を理解するため、依存関係レビューの使用をお勧めします。 依存関係レビューを使うと、すべてのPull Reqeustにおける以下の変更による依存関係の変化とセキュリティについての影響を理解しやすくなります。pull request の [Files Changed](変更されたファイル) タブ上のリッチ diff で依存関係の変更をわかりやすく視覚化できます。 依存関係レビューは、以下のことを知らせます:
- リリース日と合わせて、追加、削除、更新された依存関係。
- これらのコンポーネントを使うプロジェクトの数。
- これらの依存関係に関する脆弱性のデータ。
ワークフローに加えた変更に脆弱性のフラグが付けられている場合、プロジェクトに追加することを回避するか、セキュリティで保護されたバージョンに更新することができます。
依存関係レビューの詳細については、「依存関係の確認について」を参照してください。
"依存関係レビュー アクション" とは、GitHub Actions コンテキスト内の pull request の差異を報告できる特定のアクションです。 以下を参照してください。dependency-review-action
リポジトリで 依存関係レビュー アクション を使って、pull request に依存関係レビューを適用できます。 このアクションは、pull request のパッケージ バージョンの変更によって発生した依存関係の脆弱なバージョンをスキャンし、関連するセキュリティの脆弱性について警告します。 これにより、pull request で何が変更されているかをより正確に把握でき、リポジトリに脆弱性が追加されるのを防ぐことができます。詳細については、「依存関係の確認について」を参照してください。
ワークフローのアクションをセキュリティで保護して最新の状態に維持
リポジトリで使用されるアクションおよび再利用可能なワークフローのリファレンスを常に最新の状態に保つため、Dependabotを使用できます。 多くの場合、アクションはバグ修正および新しい機能で更新され、自動化プロセスの速度、安全性、信頼性が向上しています。 Dependabotは、依存関係の保守を自動的に実行するため、作業量が軽減されます。 詳細については、「Dependabot でアクションを最新に保つ」および「Dependabot のセキュリティ アップデート」を参照してください。
次の機能を使用すると、ワークフローのアクションを自動的に更新できます。
- Dependabot version updates 新しいバージョンがリリースされたときに pull request を開いてアクションを最新バージョンに更新します。
- Dependabot security updates Pull request を開き、報告された脆弱性があるアクションを最小のパッチ バージョンに更新します。
Note
- Dependabot は、
actions/checkout@v4
などの GitHub リポジトリ構文を使って、GitHub Actions に対する更新のみをサポートします。 Dependabot は、ローカルで参照されているアクションまたは再利用可能なワークフロー (たとえば、./.github/actions/foo.yml
) を無視します。 - Docker Hub と GitHub Packages Container registry URL は現在、サポートされていません。 たとえば、
docker://
構文を使用した Docker コンテナー アクションへの参照はサポートされていません。 - Dependabot では、GitHub Actions のパブリック リポジトリとプライベート リポジトリの両方がサポートされます。 プライベート レジストリの構成オプションについては、「Dependabot options reference」の「
git
」を参照してください。
Dependabot version updates を構成する方法の詳細については、「Dependabot のバージョン アップデートの設定」を参照してください。
Dependabot security updates を構成する方法の詳細については、「Configuring Dependabot security updates (Dependabot セキュリティ アップデートの構成)」を参照してください。