# サプライ チェーンのセキュリティ

GitHub は、環境内の依存関係の理解から、それらの依存関係の脆弱性の把握、パッチの適用まで、サプライ チェーンをセキュリティで保護するのに役立ちます。

## GitHub でのサプライ チェーンのセキュリティについて

ソフトウェア プロジェクトを開発する場合、他のソフトウェアを使用して、オープンソース ライブラリ、フレームワーク、その他のツールなど、アプリケーションをビルドして実行することがあります。 これらのリソースは、プロジェクトが適切に機能するために依存しているため、総称で "依存関係" と呼びます。 プロジェクトは、これらの数百もの依存関係に依存する可能性があり、"サプライ チェーン" 呼ばれるものを形成します。

サプライ チェーンがセキュリティ上の問題を引き起こすことがあります。 依存関係の 1 つに既知のセキュリティ上の弱点やバグがある場合、悪意のあるアクターはこの脆弱性を悪用して、悪意のあるコード ("マルウェア") を挿入したり、機密データを盗んだり、プロジェクトに各種中断を引き起こしたりすることがあります。 この種の脅威は、"サプライ チェーン攻撃" と呼びます。 サプライ チェーンに脆弱な依存関係があると、独自のプロジェクトのセキュリティが損なわれ、ユーザーも危険にさらされます。

サプライ チェーンを保護するために実行できる最も重要なことの 1 つとして、脆弱性のある依存関係に対してパッチを適用し、マルウェアを置き換えることが挙げられます。

依存関係をサプライ チェーンに直接追加するときは、マニフェスト ファイルまたはロックファイルで指定します。 依存関係は推移的に含めることもできます。つまり、特定の依存関係を指定しなくても、使用している依存関係が別の依存関係を使用している場合は、その依存関係にも依存することになります。

GitHub には、環境内の依存関係を理解し、それらの依存関係の脆弱性を把握し、それらに修正プログラムを適用するのに役立つさまざまな機能が用意されています。

GitHubのサプライ チェーン機能は次のとおりです。

* **依存関係グラフ**
* **依存関係レビュー**
* **Dependabot alerts**
* **Dependabot updates**
  * **Dependabot security updates**
  * **Dependabot version updates**

依存関係グラフは、サプライ チェーンのセキュリティの中心です。 依存関係グラフによって、リポジトリまたはパッケージについて、すべてのアップストリーム依存関係とパブリック ダウンストリーム依存関係が識別されます。 リポジトリの依存関係グラフでは、その依存関係と、それらのプロパティの一部 (脆弱性情報など) が追跡され、表示されます。

GitHubに関する次のサプライ チェーン機能は、依存関係グラフによって提供される情報に依存します。

* 依存関係レビューは、依存関係グラフを使用して依存関係の変更を特定し、ユーザーが pull request を確認するときにそれらの変更がセキュリティに及ぼす影響を理解するのに役立ちます。
* Dependabot 依存関係グラフによって提供される依存関係データと、 GitHub Advisory Databaseで公開されているアドバイザリの一覧を相互参照し、依存関係をスキャンし、潜在的な脆弱性が検出されたときに Dependabot alerts を生成します。
* Dependabot security updates 依存関係グラフと Dependabot alerts を使用して、リポジトリ内の既知の脆弱性による依存関係の更新に役立ちます。

Dependabot version updates 依存関係グラフを使用せず、代わりに依存関係のセマンティック バージョン管理に依存してください。
Dependabot version updates は、脆弱性がない場合でも、依存関係を更新し続けるのに役立ちます。

個人アカウント、コードおよびビルド プロセスの保護を含む、エンド ツー エンドのサプライ チェーンのセキュリティに関するベスト プラクティス ガイドについては、[「AUTOTITLE」](/ja/enterprise-server@3.17/code-security/supply-chain-security/end-to-end-supply-chain/end-to-end-supply-chain-overview)を参照してください。

## 機能の概要

### 依存関係グラフとは何かを確認します。

依存関係グラフを生成するには、 GitHub マニフェストとロックファイルで宣言されているリポジトリの明示的な依存関係を確認します。 有効にすると、依存関係グラフはリポジトリ内のすべての既知のパッケージ マニフェスト ファイルを自動的に解析し、これを使用して既知の依存関係の名前とバージョンを含むグラフを作成します。

* 依存関係グラフには、"*直接*" 依存関係と "*推移的*" 依存関係の情報が含まれます。
* 依存関係グラフは、コミットをプッシュして、サポートされているマニフェストまたはロック ファイルを既定のブランチに変更または追加する GitHub にプッシュし、だれかが依存関係の 1 つのリポジトリに変更をプッシュすると、自動的に更新されます。
* 依存関係グラフには、プロジェクトが GitHub Actionsを使用してビルドするときに指定した情報を含めることもできます。 一部のパッケージ エコシステムは、推移的な依存関係のほとんどをビルド時に取り込むため、ビルドの実行中に依存関係情報を送信すると、サプライ チェーンのより完全なビューが提供されます。
* 依存関係グラフを表示するには、 GitHubでリポジトリのメイン ページを開き、\[ **分析情報** ] タブに移動します。
* 少なくともリポジトリへの読み取りアクセス権がある場合は、GitHub UI または GitHub REST API を使って、リポジトリの依存関係グラフを SPDX 互換のソフトウェア部品表 (SBOM) としてエクスポートできます。 詳しくは、「[リポジトリのソフトウェア部品表のエクスポート](/ja/enterprise-server@3.17/code-security/supply-chain-security/understanding-your-software-supply-chain/exporting-a-software-bill-of-materials-for-your-repository)」をご覧ください。

依存関係送信 API を使用すれば、マニフェストまたはロックファイル分析のための依存関係グラフでサポートされていないエコシステムであっても、パッケージマネージャーや使用したいエコシステムから依存関係を送信できます。
依存関係送信 API を使ってプロジェクトに送信された依存関係には、提出にどの検出機能が使われたか、いつ送信されたかが表示されます。 依存関係送信 API について詳しくは、「[依存関係サブミッション API を使用する](/ja/enterprise-server@3.17/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api)」をご覧ください。

依存関係グラフの詳細については、[「AUTOTITLE」](/ja/enterprise-server@3.17/code-security/supply-chain-security/understanding-your-software-supply-chain/about-the-dependency-graph)を参照してください。

### 依存関係レビューとは

依存関係レビューは、レビュー担当者と共同作成者が、すべての pull request における依存関係の変更とそのセキュリティへの影響を理解するのに役立ちます。

* 依存関係レビューでは、pull request で追加、削除、または更新された依存関係がわかります。 リリース日、依存関係の評判、脆弱性情報を使用して、変更を受け入れるかどうかを判断できます。
* pull request の依存関係レビューは、 **[Files Changed](変更されたファイル)** タブの詳しい差分を表示すると確認できます。

依存関係レビューの詳細については、「[依存関係の確認](/ja/enterprise-server@3.17/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review)」を参照してください。

### Dependabot とは

Dependabot では、依存関係のセキュリティの脆弱性を通知し、依存関係をアップグレードするための pull request を自動的に開くことで、依存関係を最新の状態に保ちます。
Dependabot pull requests は、 Dependabot アラートがトリガーされたときに次に使用可能なセキュリティで保護されたバージョンをターゲットにするか、リリースが発行されたときに最新バージョンを対象とします。

"Dependabot" という用語には、次の機能が含まれます。

* Dependabot alerts: リポジトリの \[ **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security** ] タブとリポジトリの依存関係グラフに通知が表示されました。 アラートには、プロジェクト内で影響を受けるファイルへのリンクと、修正バージョンに関する情報が含まれています。
* Dependabot updates:
  * Dependabot security updates: アラートがトリガーされたときに依存関係をセキュリティで保護されたバージョンにアップグレードするためにトリガーされた更新。
  * Dependabot version updates: 最新バージョンで依存関係を最新の状態に保つためにスケジュールされた更新。

Dependabot security updates
Dependabot version updates
GitHub Actionsで実行するにはGitHub Enterprise Serverが必要です。
Dependabot alerts
GitHub Actionsは必要ありません。 詳細については、「[エンタープライズ向けの Dependabot の有効化](/ja/enterprise-server@3.17/admin/configuration/configuring-github-connect/enabling-dependabot-for-your-enterprise)」を参照してください。

Dependabot security updates を使うと、GitHub Actions の脆弱な依存関係を修正できます。 セキュリティ更新プログラムが有効になっている場合、ワークフローで使用されている脆弱な Dependabot を修正プログラムが適用された最小バージョンに更新するための pull request が、GitHub Actions によって自動的に生成されます。 詳細については、 [AUTOTITLE を](/ja/enterprise-server@3.17/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates)参照してください。

#### Dependabot アラートとは

Dependabot alerts は、依存関係グラフと、既知の脆弱性に関するアドバイザリを含む GitHub Advisory Databaseに基づいて、新しく検出された脆弱性の影響を受けるリポジトリを強調表示します。

* Dependabot は、スキャンを実行して安全でない依存関係を検出し、次の場合に Dependabot alerts を送信します。 に追加されます。
  * 新しいアドバイザリ データは、 GitHub.comから 1 時間ごとにインスタンスに同期されます。 詳しくは、「[GitHub Advisory Database でのセキュリティ アドバイザリの参照](/ja/enterprise-server@3.17/code-security/security-advisories/working-with-global-security-advisories-from-the-github-advisory-database/browsing-security-advisories-in-the-github-advisory-database)」をご覧ください。
  * リポジトリの依存関係グラフの変更
* Dependabot alerts は、リポジトリの \[ **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security** ] タブとリポジトリの依存関係グラフに表示されます。 アラートには、プロジェクト内で影響を受けるファイルへのリンクと、修正バージョンに関する情報が含まれています。

詳細については、「[Dependabot alerts](/ja/enterprise-server@3.17/code-security/dependabot/dependabot-alerts/about-dependabot-alerts)」を参照してください。

#### Dependabot 更新プログラムとは

Dependabot updatesには、Dependabot\_セキュリティ\_更新プログラムと\_バージョン\_更新プログラムの 2 種類があります。
Dependabot では、どちらの場合も依存関係を更新するための自動プル要求が生成されますが、いくつかの違いがあります。

Dependabot security updates:

* Dependabot アラートによってトリガーされる
* 既知の脆弱性を解決する最小バージョンに依存関係を更新します。
* 依存関係グラフがサポートするエコシステムでサポートされます。
* 構成ファイルは必要ありませんが、既定の動作をオーバーライドするために使用できます

Dependabot version updates:

* 構成ファイルが必要です
* 構成したスケジュールに従って実行します。
* 構成と一致する最新バージョンに依存関係を更新します。
* さまざまな一連のエコシステムでサポートされます。

Dependabot updatesの詳細については、「[Dependabot セキュリティ アップデート](/ja/enterprise-server@3.17/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates)」および[「AUTOTITLE](/ja/enterprise-server@3.17/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates)」を参照してください。

### 変更できないリリースとは

リポジトリを使用すると、変更できないリリースを有効にして、リリースのアセットと関連する Git タグが発行後に変更されないようにすることができます。 これにより、攻撃者が使用するリリースに脆弱性が挿入されるのを防ぐことで、サプライ チェーン攻撃のリスクが軽減されます。 また、特定のリリースに依存するプロジェクトが中断する可能性が低くなることも意味します。

変更できないリリースを作成すると、リリースの構成証明が自動的に生成されます。 この構成証明を使用して、リリースとその成果物が公開された情報と一致することを確認できます。

### アーティファクトのアテステーションとは

ソフトウェア プロバイダーは、 GitHub Actionsで構築されたソフトウェアの構成証明を生成できます。 アテステーションは、ビルドの由来（ビルドに使用されるソースコードとワークフローの実行）や関連ソフトウェア部品表（SBOM）を確立するための暗号的に署名された主張です。

依存関係の構成証明を確認することで、サプライ チェーンのセキュリティを強化できます。 構成証明ではセキュリティは保証されませんが、ソフトウェアのビルド場所と方法に関する情報が提供されるため、依存関係が改ざんされていないことをより確実に確認できます。 Kubernetes アドミッション コントローラーなどのツールを使用してデプロイをゲートし、未フォーマットのビルドがデプロイされないようにすることができます。

GitHub Actionsを使用して組織独自のビルドの構成証明を生成すると、ビルドされた成果物がlinked artifacts pageに自動的にアップロードされます。 このプラットフォームを使用すると、リンクされたすべての成果物のストレージとデプロイ レコードを表示できるため、成果物の構築やデプロイ コンテキストに基づくセキュリティ アラートのフィルター処理に使用されるソース コードとワークフローの実行を見つけることができます。

## 機能の可用性

* **依存関係グラフと Dependabot alerts:** 既定では有効になっていません。 どちらの機能も、エンタープライズ所有者によってエンタープライズ レベルで構成されます。 詳細については、「[企業の依存関係グラフの有効化](/ja/enterprise-server@3.17/admin/code-security/managing-supply-chain-security-for-your-enterprise/enabling-the-dependency-graph-for-your-enterprise)」および「[エンタープライズ向けの Dependabot の有効化](/ja/enterprise-server@3.17/admin/configuration/configuring-github-connect/enabling-dependabot-for-your-enterprise)」を参照してください。

* **依存関係の確認:** インスタンスに対して依存関係グラフが有効になっていて、 GitHub Code Security or GitHub Advanced Security が組織またはリポジトリに対して有効になっている場合に使用できます。 詳細については、「[GitHub Advanced Security について](/ja/enterprise-server@3.17/get-started/learning-about-github/about-github-advanced-security)」を参照してください。

* **Dependabot security updates:** 既定では有効になっていません。 Dependabot security updatesと依存関係グラフを使用する任意のリポジトリに対してDependabot alertsを有効にすることができます。 セキュリティ更新プログラムの有効化については、[「AUTOTITLE」](/ja/enterprise-server@3.17/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates)を参照してください。

* **Dependabot version updates:** 既定では有効になっていません。 リポジトリへの書き込みアクセス許可を持つユーザーは、 Dependabot version updatesを有効にすることができます。 バージョン アップデートの有効化については、[「AUTOTITLE」](/ja/enterprise-server@3.17/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates)を参照してください。