> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corgea.app/llms.txt
> Use this file to discover all available pages before exploring further.

# プライベートパッケージレジストリ

> Corgeaをプライベートパッケージレジストリに接続すると、依存関係スキャンが社内パッケージとその依存先まで対象になります。Maven、PyPI、NuGetに対応します。

## 概要

* **機能**: Corgeaがプライベートパッケージレジストリにサインインし、プロジェクトが依存する社内パッケージと、それらが引き込むすべてのパッケージを解析できるようにします。

* **対象**: 共有ライブラリ、プラットフォームSDK、自社フレームワークなど、社内公開されたパッケージに依存するアプリケーションを持つチーム。これらはMaven Central、PyPI、nuget.orgのような公開レジストリではなく、プライベートレジストリに置かれています。

### なぜ必要か

Corgeaは各依存関係を、その提供元レジストリで参照して解析します。公開パッケージは誰でも取得できるため、そのまま解析できます。社内パッケージは異なり、認証情報がなければ中身を確認できず、その先にあるものはすべて見えません。

レジストリを接続していない場合、通常は次の状態になります。

* スキャンの「Errors」タブに、該当ファイルの**Dependency Analysis**警告が表示される。
* Corgeaが中身を確認できないため、社内パッケージが**サブ依存関係なし**で表示される。
* 社内パッケージ経由でしか到達できないものは解析されないため、**脆弱性が検出されない**。

接続後は、社内パッケージも他の依存関係と同じように扱われます。依存関係ツリーに、引き込んでいるパッケージとともに表示され、その中の脆弱性も通常どおり報告・優先度付け・修正の対象になります。

## 利用可否

<Note>
  プライベートパッケージレジストリは、**専用テナントをご利用のエンタープライズ契約のお客様**が利用できます。組織ごとに有効化し、**既定では無効**です。アカウントで有効にするには[support@corgea.com](mailto:support@corgea.com)までご連絡ください。
</Note>

組織で有効化されるまで、この機能は表示されません。Integrationsページに**Package Registries**の項目はなく、プロジェクト設定にもレジストリのパネルは表示されません。

## 対応パッケージタイプ

| パッケージタイプ  | 言語                |
| --------- | ----------------- |
| **Maven** | Java、Kotlin、Scala |
| **PyPI**  | Python            |
| **NuGet** | .NET              |

### 対応レジストリ

Corgeaは各パッケージタイプの標準プロトコルで接続するため、特定の製品に依存しません。標準クライアントが想定する形でパッケージを配信し、ユーザー名とトークンによる認証を受け付けるレジストリであれば利用できます。例えば次のような製品です。

* Sonatype Nexus Repository
* Azure Artifacts
* GitHub Packages
* Google Artifact Registry
* MyGet
* ProGet
* 自己ホスト型のレジストリサーバー

## 事前準備

必要なものは次のとおりです。

1. **Corgeaから到達できるレジストリ。** Corgeaはインターネット経由でレジストリに接続します。VPN内や社内ネットワークからのみ到達できるレジストリ、IP許可リストの内側にあるレジストリは、アクセスを許可するまで利用できません。
2. **読み取り権限のあるトークン。** Corgeaはパッケージのダウンロードと依存関係情報の読み取りのみを行い、公開（アップロード）は一切行いません。
3. **短期間で失効しないトークン。** Corgeaは登録されたトークンを保存し、スキャンごとに再利用します。

<Warning>
  一部のレジストリは数時間で失効する**短期トークン**を発行します。初回のスキャンでは成功しますが、その後は失敗します。長期有効なトークン、サービスアカウント、またはAPIキーを使用してください。
</Warning>

<Tip>
  個人のトークンではなく、Corgea専用の読み取り専用サービスアカウントを作成してください。権限を必要な範囲に限定できるうえ、担当者がチームを離れても接続が維持されます。
</Tip>

## レジストリを設定する

### 手順1: レジストリの情報を用意する

レジストリ側で、Corgeaに使用させるリポジトリへの**読み取り**権限を持つトークン（またはサービスアカウント）を作成します。対応する**ユーザー名**とリポジトリの**URL**を控えておきます。

<Tabs>
  <Tab title="Maven">
    社内アーティファクトを配信しているリポジトリのURLを使用します。例:

    ```text theme={null}
    https://packages.example.com/repository/maven-releases
    ```
  </Tab>

  <Tab title="PyPI">
    パッケージインデックスのURLを使用します。通常は`/simple`で終わります。

    ```text theme={null}
    https://packages.example.com/repository/pypi/simple
    ```
  </Tab>

  <Tab title="NuGet">
    フィードのインデックスURLを使用します。通常は`/index.json`で終わります。

    ```text theme={null}
    https://packages.example.com/repository/nuget/v3/index.json
    ```
  </Tab>
</Tabs>

### 手順2: Corgeaにレジストリを追加する

**Integrations → Package Registries**を開き、**Manage**をクリックします。

<img src="https://mintcdn.com/corgea/CncYiZxwYXM7eJG5/images/package-registries/integrations_entry.png?fit=max&auto=format&n=CncYiZxwYXM7eJG5&q=85&s=74452c9a3af2fccdea375a730928d02e" alt="IntegrationsページのPackage Registriesセクション" width="1908" height="1077" data-path="images/package-registries/integrations_entry.png" />

<Note>
  レジストリの追加、編集、削除には**Manage Integrations**権限が必要です。[権限](#permissions)を参照してください。
</Note>

**Add Registry**をクリックします。

<img src="https://mintcdn.com/corgea/CncYiZxwYXM7eJG5/images/package-registries/registries_list.png?fit=max&auto=format&n=CncYiZxwYXM7eJG5&q=85&s=7d246e52ce7f5d1a177dc2305ace9408" alt="設定済みレジストリが表示されたPackage Registriesの一覧" width="1910" height="1070" data-path="images/package-registries/registries_list.png" />

フォームに入力します。

<img src="https://mintcdn.com/corgea/CncYiZxwYXM7eJG5/images/package-registries/add_registry_structured.png?fit=max&auto=format&n=CncYiZxwYXM7eJG5&q=85&s=4ab913a69898a6ef939e4c984ac04d0a" alt="Structured formモードのAdd Package Registryフォーム" width="1479" height="1080" data-path="images/package-registries/add_registry_structured.png" />

| 項目                          | 必須  | 説明                                                                               |
| --------------------------- | --- | -------------------------------------------------------------------------------- |
| **Name**                    | はい  | このレジストリを識別するための名前。一覧とプロジェクト設定に表示されます。                                            |
| **Ecosystem**               | はい  | `Maven`、`PyPI`、`NuGet`のいずれか。このレジストリが配信するパッケージタイプを選びます。                           |
| **Setup method**            | はい  | **Structured form**（既定）または**Paste config file**。[設定方法](#setup-methods)を参照してください。 |
| **Repository URL**          | はい  | 手順1で確認したURL。                                                                     |
| **Additional repositories** | いいえ | 同じレジストリ上の他のリポジトリ。1行に1件、`name=url`の形式で指定します。空欄の場合は上のURLのみを使用します。                  |
| **Username**                | はい  | トークンに対応するユーザーまたはサービスアカウント。                                                       |
| **Access token**            | はい  | トークンまたはパスワード。暗号化して保存され、保存後は再表示されません。                                             |
| **Apply to all projects**   | いいえ | 既定で有効。[レジストリを使うプロジェクトの選択](#choosing-which-projects-use-a-registry)を参照してください。     |
| **Enabled**                 | いいえ | 既定で有効。削除せずに使用を停止する場合はオフにします。                                                     |

<Warning>
  1つのレジストリ登録が対応するのは**1つのパッケージタイプ**です。レジストリがMaven、PyPI、NuGetのリポジトリをホストしている場合は、パッケージタイプごとに3件登録し、それぞれ対応するURLを指定してください。
</Warning>

### 手順3: 使用するプロジェクトを選ぶ

組織内のすべてのプロジェクトでこのレジストリを使えるようにするには、**Apply to all projects**を有効のままにします。特定のプロジェクトに限定する場合はオフにして選択します。[レジストリを使うプロジェクトの選択](#choosing-which-projects-use-a-registry)を参照してください。

### 手順4: 再スキャンして結果を確認する

社内パッケージに依存するプロジェクトで新しいスキャンを実行し、次の点を確認します。

* そのファイルの**Dependency Analysis**警告が「Errors」タブから消えている。
* 社内パッケージに**サブ依存関係**が表示され、[依存関係ツリー](/ja/sca#dependency-tree-view)で展開できる。
* 社内パッケージ内にのみ存在する脆弱性が表示される。

<Note>
  レジストリを接続しても、過去のスキャン結果は変わりません。改善されたカバレッジを反映するには、**新しいスキャン**を実行してください。
</Note>

<Note>
  スキャン中にCorgeaがレジストリへ到達できない場合も、公開パッケージを使ってスキャンは完了し、該当ファイルに警告が表示されます。レジストリの問題でスキャンが失敗したり、パイプラインが止まることはありません。ただし解消するまで、結果に社内パッケージは含まれません。
</Note>

<h2 id="setup-methods">
  設定方法
</h2>

### Structured form（推奨）

URL、ユーザー名、トークンを入力すれば、あとはCorgeaが処理します。特別な理由がなければこちらを使用してください。

### Paste config file（上級者向け）

そのレジストリ用のパッケージマネージャー設定ファイルをすでに運用している場合は、代わりにそれを貼り付けられます。mirrors、proxies、どのパッケージをどのソースから取得するかといった、フォームでは指定できない設定が必要な場合に選びます。

<img src="https://mintcdn.com/corgea/CncYiZxwYXM7eJG5/images/package-registries/add_registry_raw.png?fit=max&auto=format&n=CncYiZxwYXM7eJG5&q=85&s=709a6d791cbe9c998d3fd8584a78ca71" alt="Paste config fileモードのAdd Package Registryフォーム" width="1550" height="1076" data-path="images/package-registries/add_registry_raw.png" />

そのレジストリ向けにパッケージマネージャーが実際に使用している設定ファイルを貼り付けます。Mavenの`settings.xml`、pipの設定ファイル、または`NuGet.Config`です。

<Warning>
  ファイルには**有効な認証情報**が含まれている必要があります。暗号化されたパスワードやプレースホルダーが使われている場合は、貼り付ける前に実際のトークンに置き換えてください。レジストリ独自のパスワード形式はCorgeaでは復号できません。
</Warning>

<Note>
  既存レジストリの設定方法を切り替える場合は、新しい方法向けに認証情報をもう一度入力してください。Corgeaは使用中の方法の認証情報のみを保持します。
</Note>

<h2 id="choosing-which-projects-use-a-registry">
  レジストリを使うプロジェクトの選択
</h2>

レジストリは組織に対して一度設定し、次の2つの方法でプロジェクトに適用します。

* **Apply to all projects**（既定）: 組織内のすべてのプロジェクトがそのレジストリを使えます。全社共通のレジストリに適しています。
* **特定のプロジェクト**: 選択したプロジェクトのみ。レジストリを1つのチームが管理している場合や、段階的に導入する場合に適しています。

### 個別のプロジェクトを確認する

プロジェクトを開き、**Settings → Package Registries**で適用されているレジストリを確認できます。

* すべてに適用されるレジストリには**All projects**のバッジが表示されます。変更は**Integrations → Package Registries**から行います。
* それ以外のレジストリには**トグル**が表示され、そのプロジェクトで有効・無効を切り替えられます。
* 完全に無効化されたレジストリには**Disabled**のバッジが表示されます。

<Note>
  プロジェクトのレジストリを変更するには**Change Project**権限が必要です。[プロジェクトアクセス制御](/ja/content-access-management)が有効な場合は、そのプロジェクトへのアクセス権も必要です。
</Note>

## 複数のレジストリを使う

必要な数だけレジストリを追加でき、1つのプロジェクトで複数を同時に使用できます。

* **同じパッケージタイプに複数のレジストリ**: すべてのレジストリを対象にパッケージを参照します。
* **異なるパッケージタイプ**: それぞれ独立して扱われます。
* **1つのレジストリ上の複数リポジトリ**: 個別に登録するのではなく、**Additional repositories**に列挙してください。

<Note>
  同じパッケージタイプでは、設定方法を統一してください。一部が**Structured form**、他が**Paste config file**の場合、貼り付けたファイルは無視されます。
</Note>

<h2 id="permissions">
  権限
</h2>

| 操作                              | 必要な権限                   |
| ------------------------------- | ----------------------- |
| Package Registriesの一覧を表示        | **View Integrations**   |
| レジストリの追加・編集・削除                  | **Manage Integrations** |
| プロジェクトのPackage Registriesパネルを表示 | **View SAST Scan**      |
| プロジェクトが使うレジストリを変更               | **Change Project**      |

割り当て方法は[権限グループ](/ja/permission_groups)を参照してください。

## セキュリティ

レジストリの認証情報は機密情報として扱われます。

* **暗号化して保存**: 認証情報は暗号化され、保存後に再表示されることはありません。レジストリを編集するとトークン欄は空欄で表示され、空欄のままにすれば既存のトークンが維持されます。
* **スキャン中のみ使用**: 認証情報は、スキャン実行中にレジストリへ認証するためだけに使用します。
* **分離**: 認証情報と、それを使って取得したパッケージが、他のスキャンや他の組織と共有されることはありません。
* **リポジトリには書き込まない**: Corgeaが生成するファイルに認証情報が書き込まれることはありません。
* **ログやメッセージでは非表示**: Corgeaに表示されるエラーメッセージや診断情報から認証情報は除去されます。
* **読み取り専用アクセス**: Corgeaはパッケージのダウンロードと依存関係情報の読み取りのみを行います。

<h2 id="registries-on-restricted-networks">
  制限されたネットワークでのレジストリ
</h2>

ネットワークが公開レジストリを遮断し、すべてのパッケージを自社レジストリ経由にする方針の場合は、社内パッケージを配信し、**かつ**公開パッケージをプロキシするリポジトリをCorgeaに指定してください。これにより、必要なものをすべて1つのソースから取得できます。

レジストリが社内パッケージのみを配信し、公開レジストリにも到達できない場合、依存関係の解析は完了できません。

## トラブルシューティング

<AccordionGroup>
  <Accordion title="Dependency Analysis could not fully process this file">
    **意味**: 参照できないパッケージが見つかりました。多くの場合、サインインできないレジストリ上の社内パッケージです。

    **対処**: そのパッケージタイプのレジストリを追加し、対象プロジェクトに適用されていることを確認して再スキャンします。すでに接続済みの場合は、URLとトークンの有効性を確認してください。
  </Accordion>

  <Accordion title="Private package registry auth was enabled but no registry credentials could be loaded">
    **意味**: プロジェクトはプライベートレジストリを使う設定ですが、スキャン開始時に利用可能なレジストリがありませんでした。多くの場合、レジストリが無効化された、プロジェクトに適用されなくなった、または削除されています。

    **対処**: **Integrations → Package Registries**を開き、そのパッケージタイプのレジストリが存在し、**Enabled**であり、すべてのプロジェクトに適用されているか、このプロジェクトを含んでいることを確認してください。
  </Accordion>

  <Accordion title="Private registry dependency resolution failed">
    **意味**: サインインは成功しましたが、パッケージを取得できませんでした。トークンの期限切れや失効、URLが別のリポジトリを指している、レジストリに実際には存在しないパッケージなどが主な原因です。

    **対処**: 社内ネットワーク外から認証情報を確認します。

    ```bash theme={null}
    curl -u "USERNAME:TOKEN" -I "YOUR_REGISTRY_URL"
    ```

    `401`や`403`は認証情報の誤り、`404`はURLの誤りを示します。
  </Accordion>

  <Accordion title="Private registry dependency resolution timed out">
    **意味**: 依存関係の取得に時間がかかりすぎました。非常に大規模なプロジェクトや、レジストリの応答が遅い場合に起こります。

    **対処**: 可能な範囲でロックファイルをコミットしてスキャン時の処理を減らし、レジストリの応答時間を確認してください。そのうえで再スキャンします。
  </Accordion>

  <Accordion title="Some modules in a large repository were not covered">
    **意味**: リポジトリに含まれる独立したモジュールが、1回のスキャンで処理する数を超えています。

    **対処**: 対象外となったモジュールが重要な場合は、Corgeaのプロジェクトを分割するか、そのモジュールのロックファイルをコミットしてください。
  </Accordion>

  <Accordion title="Private registry CVE scan failed or timed out">
    **意味**: 社内パッケージは取得できましたが、それに対する脆弱性チェックが完了しませんでした。

    **対処**: 再スキャンしてください。公開パッケージの結果には影響しません。社内パッケージ固有の脆弱性のみが欠落する可能性があります。
  </Accordion>

  <Accordion title="Dependency analysis fails when public registries are blocked">
    **意味**: プロジェクトの解析には公開されているコンポーネントが必要ですが、レジストリからもインターネットからも取得できていません。

    **対処**: 公開パッケージもプロキシするリポジトリをレジストリに指定してください。[制限されたネットワークでのレジストリ](#registries-on-restricted-networks)を参照してください。
  </Accordion>

  <Accordion title="Will this interfere with my own package manager configuration?">
    **意味**: 対応は不要です。Corgeaはリポジトリにコミットされた設定を置き換えるのではなく、それに加えてレジストリへのアクセスを追加するため、既存のソースやルールはそのまま有効です。

    **対処**: それでもソースが不足しているように見える場合は、リポジトリにコミットされた設定ファイルが妥当かどうか確認してください。読み取れないファイルは、ビルドを壊す恐れを避けるためCorgeaが変更しません。
  </Accordion>

  <Accordion title="My registry uses http instead of https">
    **意味**: 動作しますが、トークンは暗号化されずに送信されます。

    **対処**: ローカルでの検証以外では`https`を使用してください。
  </Accordion>

  <Accordion title="I cannot find the feature in Corgea">
    **意味**: この機能は既定で無効で、その状態ではロック表示ではなく非表示になります。そのため操作できる項目は現れません。

    **対処**: プライベートパッケージレジストリは、専用テナントをご利用のエンタープライズ契約のお客様が利用できます。組織で有効にするには[support@corgea.com](mailto:support@corgea.com)までご連絡いただき、その後Integrationsページを再読み込みしてください。
  </Accordion>
</AccordionGroup>

## ベストプラクティス

<Tip>まず1つのプロジェクトでレジストリを設定し、依存関係ツリーが正しいことを確認したうえで、すべてのプロジェクトに適用してください。</Tip>

* 個人トークンではなく、**専用の読み取り専用サービスアカウント**を使用します。
* **長期有効なトークン**を使用し、有効期限を管理して、スキャンのカバレッジが気付かないうちに低下しないようにします。
* **パッケージタイプごとに1件**登録し、それぞれ対応するURLを指定します。
* **公開パッケージもプロキシするリポジトリを優先**します。ネットワークが制限されていても、いなくても機能します。
* **構造化フォームを優先**し、そこで指定できない設定が必要な場合にのみ、設定ファイルの貼り付けを使用します。
* 可能な範囲で**ロックファイルをコミット**します。スキャンが速くなり、結果も安定します。
* 通常の運用スケジュールで**トークンをローテーション**し、Corgea側のレジストリを更新します。変更しない場合は、編集時にトークン欄を空欄のままにしてください。

## 関連ドキュメント

* [依存関係スキャン（SCA）](/ja/sca) — 依存関係スキャン、依存関係ツリー、到達可能性の仕組み
* [権限グループ](/ja/permission_groups) — View / Manage Integrationsの付与
* [コンテンツアクセス管理](/ja/content-access-management) — プロジェクトを変更できる範囲の管理
