プライベート レジストリへのアクセスを提供することの重要性
リポジトリ内のコードにプライベート レジストリに格納されている依存関係がある場合、一部のセキュリティ機能は、それらを効果的に機能させるためにレジストリにアクセスする必要があります。 リポジトリのすべての依存関係にアクセスしないと、既定のセットアップと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] はレジストリの種類です。 -
レジストリの認証方法を選択します。 * トークン: レジストリでの認証に使用するトークンを入力します。 * ユーザー名とパスワード: レジストリでの認証に使用するユーザー名とパスワードを入力します。 GitHub Personal Access Tokenなど、一部の種類の認証トークンは、特定のユーザー ID に関連付けられています。 これらに対してこのオプションを選択し、関連するユーザー名を ユーザー名 として、トークンをパスワードとして入力 します。
-
**OIDC (OpenID Connect)**: 有効期間の長いシークレットを格納する代わりに、クラウド ID プロバイダーからの有効期間の短い資格情報を使用します。 このオプションを選択する場合は、プロバイダーを選択し、プロバイダー固有のフィールドに入力します。 詳細については、 [プライベート レジストリの OIDC 認証の構成を](#configuring-oidc-authentication-for-a-private-registry)参照してください。
-
-
すべて、プライベートと内部、または選んだリポジトリのみという情報を使って、organization 内のどのリポジトリがプライベート レジストリにアクセスできるかを定義します。
-
プライベート レジストリの定義が完了したら、[Add Registry] を選んでレジストリ情報を保存します。
ヒント
**トークン**または**ユーザー名とパスワード**の認証を使用して組織にプライベート レジストリを追加すると、トークンまたはパスワードは暗号化されたシークレットとして格納されます。 レジストリが作成された後に、トークンまたはパスワードを再度表示することはできません。
レジストリ定義を使用する既定セットアップを有効にする
リポジトリまたはリポジトリのグループ 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 のプライベート レジストリの構成に関するガイダンス を参照してください。
プライベート レジストリの OIDC 認証の構成
OIDC (OpenID Connect) 認証を使用すると、 Dependabot はクラウド ID プロバイダーの有効期間の短い資格情報を使用してプライベート レジストリにアクセスできるため、有効期間の長いシークレットを格納する必要がなくなります。 OIDC では、 Dependabot 更新ジョブごとに資格情報が動的に生成されます。 GitHub認証する前に、クラウド プロバイダーとDependabotの間に信頼関係を構成する必要があります。
メモ
組織レベルのプライベート レジストリの OIDC 認証は、現在、 Dependabotでサポートされています。 code scanning既定のセットアップではサポートされていません。
プライベート レジストリの認証方法として OIDC を選択する場合は、サポートされているプロバイダーのいずれかを選択し、必要なフィールドに入力します。
- Azure: テナント ID (Azure AD テナント ID) と Client ID (Azure AD アプリケーション クライアント ID) を入力します。 Azure AD で、GitHub の OIDC プロバイダーを信頼するフェデレーション資格情報を構成する必要があります。
- AWS CodeArtifact: AWS リージョン、 アカウント ID (AWS アカウント ID)、 ロール名 (IAM ロール名)、 ドメイン (CodeArtifact ドメイン)、 ドメイン所有者 (CodeArtifact ドメイン所有者/AWS アカウント ID) を入力します。 必要に応じて 、対象ユーザーを指定できます。 GitHub の OIDC プロバイダーを信頼する IAM OIDC ID プロバイダーを AWS で構成する必要があります。
- JFrog Artifactory: OIDC プロバイダー名を入力します。 必要に応じて、 対象ユーザー と ID マッピング名を指定できます。
プライベート レジストリの認証の種類は、作成後に変更できません。 OIDC から別の認証方法に切り替えるには、既存のレジストリを削除して新しいレジストリを作成します。
OIDC のしくみの詳細については、「 OpenID Connect」を参照してください。
Code Quality プライベート レジストリへのアクセス
メモ
GitHub Code Quality は現在 パブリック プレビュー にあり、変更される可能性があります。 パブリック プレビュー の間、Code Quality は課金されませんが、Code Quality スキャンでは GitHub Actions 分が消費されます。
GitHub Code Quality では、リポジトリに対して有効になっているときに使用できる組織レベルのプライベート レジストリを使用できます。
組織に新しいレジストリを追加する場合は、新しいレジストリを検出して使用するように、 Code Quality を無効にして再度有効にする必要があります。
組織のプライベート レジストリ アクセスを設定するには、「 既定のセットアップをスキャンするコードのレジストリ アクセスの定義」を参照してください。