プライベート レジストリへのアクセスを提供することの重要性
リポジトリ内のコードにプライベート レジストリに格納されている依存関係がある場合、一部のセキュリティ機能は、それらを効果的に機能させるためにレジストリにアクセスする必要があります。 リポジトリのすべての依存関係にアクセスしないと、既定のセットアップとCode Qualityパブリック プレビューcode scanning (Dependabot) の有効性が制限されます。
Code scanning プライベート レジストリへの既定のセットアップ アクセス
組織が使用するプライベート レジストリへのアクセスを定義しない場合、 code scanning はパブリック レジストリで使用可能な依存関係から必要なデータのみを収集します。 ほとんどの場合、この方法でほとんどの脆弱性を検出できます。 ただし、場合によっては、アクセスの欠如が誤った否定的な結果につながる可能性があります。 つまり、コードの分析に必要なすべての情報がないため、 code scanning はコードの脆弱性を検出できません。 たとえば、一部のデータ フロー パスは、アクセスできない依存関係でステップが定義されており、その解釈方法 code scanning わからないため、検出されない場合があります。
組織で使用されるプライベート レジストリへのアクセスを構成すると、 code scanning は必要なすべての情報にアクセスでき、脆弱性を見逃す可能性がはるかに低くなります。
Code scanning 既定のセットアップでは、次のレジストリの種類がサポートされます。
| Language | レジストリの種類 |
|---|---|
| C# | NuGet フィード |
| Go | GOPROXY サーバー、Git ソース |
| Java | Maven リポジトリ |
ヒント
Organization ごとに、レジストリの各種類を 1 つ定義できます。 組織内のコードベースで特定の種類の複数のレジストリを使用する場合は、統合アクセス ポイントを設定するか、その組織内のコードベースの最も重要なレジストリへのアクセスを定義する必要があります。
既定のセットアップのレジストリ アクセスをcode scanning定義する
ユーザー インターフェイスでプライベート レジストリへのアクセスを設定するには、organization 所有者である必要があります。 REST API は、組織の所有者または {read,write}_org_private_registries のアクセス許可と共に使用することもできます。
-
Organization の [Settings] タブで、[Security] セクションまで下にスクロールし、[Secrets and variables] を選びます。
-
シークレットと変数の展開された一覧で、[Private registries] を選び、[Private registries] ページを表示します。
-
**[New private registry]** を選び、プライベート レジストリのアクセス情報を追加します。 -
**[URL]** および **[Type]** フィールドを使って、レジストリの場所と種類を定義します。* [URL] は、プライベート レジストリにアクセスする場所です。 たとえば、NuGet の GitHub Packages レジストリを使用する場合:
https://nuget.pkg.github.com/ORGANIZATION/index.json。ここで、ORGANIZATIONは GitHubの組織の名前です。 * [Type] はレジストリの種類です。 -
認証方法に応じて [Token] または [Username and password] のいずれかを選び、適切なフィールドにデータを入力します。
GitHub Personal Access Tokenなど、一部の種類の認証トークンは、特定のユーザー ID に関連付けられています。 これらのユーザー **名とパスワード** のオプションを選択し、関連するユーザー名を **ユーザー名** として入力し、トークンをパスワードとして入力 **します**。 -
すべて、プライベートと内部、または選んだリポジトリのみという情報を使って、organization 内のどのリポジトリがプライベート レジストリにアクセスできるかを定義します。
-
プライベート レジストリの定義が完了したら、[Add Registry] を選んでレジストリ情報を保存します。
ヒント
プライベート レジストリを organization に追加すると、トークンまたはパスワードが暗号化されたシークレットとして格納されます。 レジストリが作成された後に、トークンまたはパスワードを再度表示することはできません。
レジストリ定義を使用する既定セットアップを有効にする
リポジトリまたはリポジトリのグループ code scanning 既定のセットアップを有効にすると、 GitHub は、リポジトリが既存のプライベート レジストリにアクセスできるかどうかを確認します。 リポジトリで使用できるプライベート レジストリがある場合、 code scanning は分析中に関連する定義を使用します。
プライベート レジストリを初めて構成するときは、新しい定義を使用するすべてのリポジトリ code scanning 既定のセットアップを無効にして再度有効にする必要があります。 新規の、または変更された構成は、以降の実行時に自動的に取得されます。
プライベート パッケージ レジストリをサポートする言語の場合、既定 code scanning セットアップでは、 ツールの状態ページに関する情報が生成されます。 これにより、分析で使用できたプライベート レジストリ構成が表示されますが、既定 code scanning セットアップでプライベート依存関係を正常にダウンロードできたかどうかは示されません。 ツールの状態ページ の詳細については、「コード スキャンにツールの状態ページを使用する」を参照してください。
または、アクション ログ ファイルを調べることで、 code scanning 分析によってプライベート レジストリが正常に使用されたかどうかを確認することもできます。 コード スキャン ログ を参照してください。
Code scanning プライベート レジストリへの高度なセットアップ アクセス
Code scanning 高度なセットアップでは、 `codeql-action`を使用して分析を実行するワークフローで使用できるプライベート レジストリが使用されます。 既定の設定で使われる organization レベルのプライベート レジストリにはアクセスできません。
コンパイルされた言語の場合、codeql-action はコードのビルドを監視する必要があります。 既存のビルド ワークフローを修正して codeql-action も実行するか、運用バージョンのコードをビルドして codeql-action も実行する新しいワークフローを作成できます。
ビルドで使われるプライベート レジストリは、codeql-action を実行するワークフローからもアクセスできる必要があります。 詳細設定の詳細については、「コード スキャンの詳細設定を構成する」を参照してください。
Dependabot プライベート レジストリへのアクセスを更新する
Dependabot は、任意の組織レベルのプライベート レジストリを使用でき、リポジトリの `dependabot.yml` ファイルで定義されているすべてのプライベート レジストリを使用できます。
Dependabot では、レジストリにアクセスできない限り、プライベート レジストリに格納されているコードのセキュリティまたはバージョンの更新プログラムを確認できません。 プライベート レジストリへのアクセスを構成しない場合、 Dependabot は、レジストリに格納されている依存関係を更新するためのプル要求を発生させることはできません。
1 つ以上のプライベート レジストリへのアクセスを構成する場合、 Dependabot は、脆弱な依存関係をアップグレードしたり、依存関係を維持したりするためのプル要求を提案できます。 Dependabot のプライベート レジストリへのアクセスの構成 と Dependabot のプライベート レジストリの構成に関するガイダンス を参照してください。
Code Quality プライベート レジストリへのアクセス
メモ
GitHub Code Quality は現在 パブリック プレビュー にあり、変更される可能性があります。 パブリック プレビュー の間、Code Quality は課金されませんが、Code Quality スキャンでは GitHub Actions 分が消費されます。
GitHub Code Quality では、リポジトリに対して有効になっているときに使用できる組織レベルのプライベート レジストリを使用できます。
組織に新しいレジストリを追加する場合は、新しいレジストリを検出して使用するように、 Code Quality を無効にして再度有効にする必要があります。
組織のプライベート レジストリ アクセスを設定するには、「 既定のセットアップをスキャンするコードのレジストリ アクセスの定義」を参照してください。