Skip to main content

リポジトリの依存関係の自動送信を構成する

依存関係の自動送信を使用して、リポジトリ内の推移的依存関係データを送信できます。 これにより、依存関係グラフを使用してこれらの推移的依存関係を分析できます。

この機能を使用できるユーザーについて

リポジトリの所有者、組織の所有者、セキュリティ マネージャー、および 管理者 ロールを持つユーザー

依存関係の自動送信について

メモ

依存関係の自動送信は、すべてのパッケージ エコシステムをサポートしているわけではありません。 現在サポートされているエコシステムの一覧については、「依存関係グラフがサポートされるパッケージ エコシステム」を参照してください。

依存関係グラフは、リポジトリ内のマニフェスト ファイルとロック ファイルを分析し、ソフトウェア プロジェクトが依存している上流パッケージを理解するのに役立ちます。 ただし、一部のエコシステムでは推移的依存関係の解決がビルド時に行われるため、GitHub はリポジトリの内容だけに基づいてすべての依存関係を自動的に検出できません。

リポジトリで依存関係の自動送信を有効にすると、GitHub はリポジトリ内の推移的依存関係を自動的に識別し、依存関係送信 API を使用してこれらの依存関係を GitHub に送信します。 その後、依存関係グラフを使用してこれらの依存関係を確認できます。 Dependabot は、Dependabot alerts を生成することで、これらの依存関係に対するセキュリティ更新について通知します。

依存関係の自動送信の使用は、GitHub Actions の使用分数にカウントされます。 詳しくは、「GitHub Actions の課金」をご覧ください。

必要に応じて、依存関係の自動送信用にセルフホステッド ランナーまたは GitHub ホステッド より大きなランナー (larger runner) を構成できます。 詳細については、「セルフホステッド ランナーを使用したプライベート レジストリへのアクセス」および「GitHub ホステッドの大規模ランナーを使用した依存関係の自動送信」を参照してください。

[前提条件]

依存関係の自動送信を有効にするには、リポジトリに対して依存関係グラフを有効にする必要があります。

また、依存関係の自動送信を使用するには、リポジトリに対して GitHub Actions を有効にする必要があります。 詳しくは、「リポジトリの GitHub Actions の設定を管理する」をご覧ください。

依存関係の自動送信を有効にする

リポジトリ管理者は、この手順で説明されている手順に従って、リポジトリの依存関係の自動送信を有効または無効にできます。

組織の所有者は、セキュリティ構成を使用して、複数のリポジトリの依存関係の自動送信を有効にすることができます。 詳しくは、「カスタム セキュリティ構成を作成する」をご覧ください。

  1. GitHub で、リポジトリのメイン ページに移動します。

  2. リポジトリ名の下にある [Settings] をクリックします。 [設定] タブが表示されない場合は、 [] ドロップダウン メニューを選び、 [設定] をクリックします。

    タブを示すリポジトリ ヘッダーのスクリーンショット。 [設定] タブが濃いオレンジ色の枠線で強調表示されています。

  3. サイドバーの [Security] セクションで、[ Advanced Security] をクリックします。

  4. [依存関係グラフ] で、[依存関係の自動送信] の横にあるドロップダウン メニューをクリックし、[有効] を選択します。

リポジトリの依存関係の自動送信を有効にすると、GitHub は次の処理を行います。

  • リポジトリへのプッシュを監視します。
  • リポジトリ内のすべてのマニフェストについて、パッケージ エコシステムに関連付けられた依存関係グラフ ビルド アクションを実行します。
  • 結果を使用して依存関係の自動送信を実行します。

リポジトリの [アクション] タブを表示すると、自動ワークフローの実行に関する詳細を確認できます。

メモ

依存関係の自動送信を有効にすると、アクションの実行が自動的にトリガーされます。 有効にすると、既定のブランチへのコミットによってマニフェストが更新されるたびに実行されます。

セルフホステッド ランナーによるプライベート レジストリへのアクセス

GitHub Actions インフラストラクチャを使用する代わりに、依存関係の自動送信ジョブを実行するようにセルフホステッド ランナーを構成できます。 これは、プライベート Maven レジストリにアクセスするために必要です。 セルフホステッド ランナーは Linux または macOS 上で動作している必要があります。 .NET と Python の自動送信では、最新の component-detection リリースをダウンロードするために、パブリック インターネットへのアクセスが必要です。

  1. リポジトリ レベルまたは Organization レベルで、1 つ以上のセルフホステッド ランナーをプロビジョニングします。 詳細については、「セルフホステッド ランナー」および「自己ホストランナーの追加」を参照してください。
  2. 依存関係の自動送信を使用する各ランナーに dependency-submission ラベルを割り当てます。 詳しくは、「セルフホストランナーとのラベルの利用」をご覧ください。
  3. サイドバーの [Security] セクションで、[ Advanced Security] をクリックします。
  4. [依存関係グラフ] で、[依存関係の自動送信] の横にあるドロップダウン メニューを選択し、[ラベル付きランナーで有効] を選びます。

有効にすると、次の場合を除き、依存関係の自動送信ジョブはセルフホステッド ランナーで実行されます。

  • セルフホステッド ランナーを利用できない場合。
  •         `dependency-submission` ラベルが付いたランナー グループが存在しない場合。
    

メモ

プライベート Maven レジストリを使用するセルフホステッド ランナーを使用する Maven または Gradle プロジェクトでは、依存関係送信ワークフローがレジストリに接続できるように、Maven サーバー設定ファイルを変更する必要があります。 Maven サーバー設定ファイルの詳細については、Maven ドキュメントの「Security and Deployment Settings」を参照してください。

セルフホステッド ランナーのネットワーク アクセスの設定

ファイアウォール内で外向きのインターネットアクセスが制限されている環境でセルフホステッドランナーを運用する場合、依存関係の自動送信のために特定のURLを許可リスト(ホワイトリスト)に追加する必要があります。 必要な URL は、リポジトリが使用するエコシステムによって異なります。

すべてのエコシステムに必要な URL

すべての自動依存関係送信ワークフローには、次の URL が必要です。

  •         `https://github.com`GitHub にアクセスし、アクションをダウンロードするために必要です。
    
  •         `https://api.github.com`GitHub API アクセスに必要です。
    
  •         `https://*.githubusercontent.com`—アクションのソース コードとリリース ( `raw.githubusercontent.com`、 `github-releases.githubusercontent.com`、 `objects.githubusercontent.com`を含む) をダウンロードするために必要です。
    

エコシステム固有の URL

使用するエコシステムによっては、追加の URL を許可リストする必要がある場合があります。

Go
  •         `https://go.dev`—Go ツールチェーンをダウンロードする場合。
    
  •         `https://golang.org`—Go ダウンロード用の代替ドメイン。
    
  •         `https://proxy.golang.org`—依存関係検出中に Go モジュールをダウンロードするための公式 Go モジュール プロキシ。
    

メモ

          `actions/go-versions` リポジトリには、`https://raw.githubusercontent.com`経由でアクセスします。これは、一般的な要件で既に説明されています。
Java (Maven と Gradle)
  •         `https://repo.maven.apache.org`依存関係をダウンロードするための Maven Central リポジトリ。
    
  •         `https://api.adoptium.net`—Adoptium/Temurin JDK ディストリビューション ( `actions/setup-java` で使用される既定のディストリビューション) をダウンロードする場合。
    

別の JDK ディストリビューションを使用する場合は、次のものが必要になる場合もあります。 * https://aka.ms https://download.microsoft.com— Microsoft Build of OpenJDK の場合 (注: aka.msは .NET のダウンロードにも使用されます)。 * https://download.oracle.com—Oracle JDK の場合。 * https://api.azul.com:Azul Zulu OpenJDK の場合。

.NET (C#、F#、Visual Basic)
  •         `https://aka.ms`.NET のダウンロード場所にリダイレクトする Microsoft URL 短縮機能。
    
  •         `https://builds.dotnet.microsoft.com`—.NET SDK とランタイムのダウンロード用のプライマリ フィード。
    
  •         `https://ci.dot.net`—.NET ビルドのセカンダリ フィード。
    

メモ

.NET 自動提出で使用される microsoft/component-detection ツールは、GitHub リリースからダウンロードされます。これは、一般的な要件 (https://github.comhttps://*.githubusercontent.com) で既に説明されています。

Python
  •         `https://python.org`—Python インタープリターをダウンロードする場合。
    

メモ

          `actions/python-versions` リポジトリと`microsoft/component-detection` リリースには、一般的な要件 (`https://*.githubusercontent.com` と`https://github.com`) で既に説明されている URL を使用してアクセスします。

GitHub ホステッド より大きなランナー (larger runner) を使用した依存関係の自動送信

GitHub Team または GitHub Enterprise Cloud のユーザーは、より大きなランナー (larger runner) を使用して依存関係の自動送信ジョブを実行できます。

  1. Organization レベルで、名前が dependency-submission の大規模ランナーをプロビジョニングします。 詳細については、「Organization に より大きなランナー を追加する」を参照してください。
  2. リポジトリにランナーへのアクセスを許可します。 詳細については、「リポジトリによる より大きなランナー (larger runner) へのアクセスを許可する」を参照してください。
  3. [依存関係グラフ] で、[依存関係の自動送信] の横にあるドロップダウン メニューを選択し、[ラベル付きランナーで有効] を選びます。

依存関係の自動送信のトラブルシューティング

依存関係の自動送信では、ワークフローを高速化するために、Cache アクションを使用して実行間でパッケージのダウンロードをキャッシュするよう最善を尽くします。 セルフホステッド ランナーの場合、このキャッシュを独自のインフラストラクチャ内で管理することもできます。 これを行うには、環境変数 GH_DEPENDENCY_SUBMISSION_SKIP_CACHEtrue に設定して、組み込みキャッシュを無効にできます。 詳しくは、「変数に情報を格納する」をご覧ください。

マニフェストの重複排除

依存関係グラフは、静的分析、自動送信、手動送信という 3 種類の方法で依存関係を学習できます。 1 つのリポジトリで複数の方法を構成でき、それによって同じパッケージ マニフェストが複数回スキャンされて、スキャンごとに出力が異なる可能性があります。 依存関係グラフは重複除去ロジックを使って出力を解析し、各マニフェスト ファイルの最も正確な情報を優先します。

依存関係グラフには、次の優先順位規則が使われ、各マニフェスト ファイルのインスタンスが 1 つだけ表示されます。

  1. ユーザー送信は、通常、成果物のビルド中に作成され、最も情報がそろっているため、最優先されます。
    • 異なる detector からの手動スナップショットが複数ある場合、correlator のアルファベット順に並べ替えられ、最初のものが使われます。
    • detector が同じ correlator が 2 つある場合、解決された依存関係はマージされます。 correlator と detector の詳細については、「依存関係送信用の REST API エンドポイント」を参照してください。
  2. 自動送信は、成果物のビルド中にも作成されますが、ユーザーによって送信されたものではないため、2 番目に高い優先順位になります。
  3. 静的分析結果は、使用できるデータが他にない場合に使われます。

パッケージ エコシステム別の情報

Maven プロジェクト

Maven プロジェクトでは、依存関係の自動送信はオープンソースの Maven Dependency Tree Dependency Submission のフォークを実行します。 このフォークにより、GitHub は上流リポジトリと同期を保ちつつ、自動送信にのみ適用されるいくつかの変更を維持できます。 このフォークのソースは advanced-security/maven-dependency-submission-action で確認できます。

リポジトリの依存関係が正確でないように見える場合は、最後に依存関係グラフがビルドされた時刻のタイムスタンプが、pom.xml ファイルへの最後の変更と一致しているかを確認してください。 このタイムスタンプは、リポジトリの Dependabot alerts タブにあるアラートの一覧表に表示されます。pom.xml を更新するコミットをプッシュすると、Dependency Tree Submission アクションの新しい実行がトリガーされ、そのリポジトリの依存関係グラフが強制的に再ビルドされます。

Gradle プロジェクト

Gradle プロジェクトでは、依存関係の自動送信は gradle/actions のオープンソース Gradle アクションのフォークを実行します。 このフォークは actions/gradle-build-tools-actions で入手できます。 自動送信アクションの結果は、リポジトリの [アクション] タブで確認できます。各実行には「Automatic Dependency Submission (Gradle)」というラベルが付けられ、出力にはアクションが API に送信した JSON ペイロードが含まれます。

.NET プロジェクト

.NET の自動送信アクションでは、依存関係検出のエンジンとしてオープンソースの component-detection プロジェクトを使用します。 .NET 8.x、9.x、10.x をサポートしています。 .NET の自動送信は、リポジトリの dependabot.ymlnugetpackage-ecosystem として定義している場合、またはリポジトリのルート ディレクトリにサポートされているマニフェスト ファイルが存在する場合に実行されます。 サポートされているマニフェスト ファイルには、.sln.csprojpackages.config.vbproj.vcxproj.fsproj などがあります。

Python プロジェクト

Python には、基盤となるグラフ生成エンジンとしてオープンソースの component-detection プロジェクトが使われています。 Python の自動送信アクションは、リポジトリのルート ディレクトリに requirements.txt ファイルが存在する場合にのみ実行されます。 Python の自動送信では現在プライベート パッケージはサポートされていません。requirements.txt で参照されている公開されていないパッケージがある場合、自動送信アクションは失敗します。

メモ

このアクションでは、Python をインストールするために actions/setup-python を使用します。 インストールする Python バージョンを指定するには、リポジトリに .python-version ファイルを含める必要があります。

詳細については、次を参照してください。

  •         [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/about-supply-chain-security)
    
  •         [AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api)