> ## 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.

# Registros de paquetes privados

> Conecta Corgea a tu registro de paquetes privado para que el escaneo de dependencias cubra tus paquetes internos y todo aquello de lo que dependen. Compatible con Maven, PyPI y NuGet.

## Descripción general

* **Qué hace**: permite que Corgea inicie sesión en tu registro de paquetes privado para analizar los paquetes internos de los que dependen tus proyectos, junto con todos los paquetes que esos paquetes internos arrastran.

* **Para quién es**: equipos cuyas aplicaciones dependen de paquetes publicados internamente —bibliotecas compartidas, SDK de plataforma, frameworks propios— alojados en un registro privado en lugar de uno público como Maven Central, PyPI o nuget.org.

### Por qué lo necesitas

Corgea analiza cada dependencia buscándola en el registro del que procede. Los paquetes públicos están disponibles para cualquiera, así que funcionan desde el principio. Los internos no: sin credenciales, Corgea no puede abrirlos, y todo lo que hay detrás permanece invisible.

Sin un registro conectado normalmente verás:

* Una advertencia **Dependency Analysis** en el archivo afectado, en la pestaña «Errors» del escaneo.
* Paquetes internos que aparecen **sin subdependencias**, porque Corgea no pudo mirar dentro.
* **Vulnerabilidades ausentes**, porque todo lo accesible únicamente a través de un paquete interno nunca se analiza.

Una vez conectado, tus paquetes internos se tratan como cualquier otra dependencia: aparecen en el árbol de dependencias con todo lo que arrastran, y las vulnerabilidades que contienen se informan, priorizan y corrigen igual que siempre.

## Disponibilidad

<Note>
  Los registros de paquetes privados están disponibles para **clientes enterprise con tenant dedicado**. La función se habilita por organización y está **desactivada por defecto**: escribe a [support@corgea.com](mailto:support@corgea.com) para activarla en tu cuenta.
</Note>

Mientras no esté habilitada para tu organización, la función permanece oculta: no hay entrada **Package Registries** en la página Integrations ni panel de registros en la configuración del proyecto.

## Tipos de paquete compatibles

| Tipo de paquete | Lenguaje            |
| --------------- | ------------------- |
| **Maven**       | Java, Kotlin, Scala |
| **PyPI**        | Python              |
| **NuGet**       | .NET                |

### Registros compatibles

Corgea se conecta mediante el protocolo estándar de cada tipo de paquete, por lo que no está ligado a un proveedor concreto. Funcionará cualquier registro que sirva paquetes como espera el cliente estándar y acepte usuario y token, incluidos:

* Sonatype Nexus Repository
* Azure Artifacts
* GitHub Packages
* Google Artifact Registry
* MyGet
* ProGet
* Servidores de registro autoalojados

## Antes de empezar

Necesitas:

1. **Un registro al que Corgea pueda llegar.** Corgea se conecta a tu registro por internet. Un registro accesible solo desde tu VPN o red privada, o detrás de una lista de IP permitidas, no funcionará hasta que permitas el acceso.
2. **Un token con acceso de lectura.** Corgea solo descarga paquetes y lee su información de dependencias. Nunca publica.
3. **Un token que no caduque pronto.** Corgea guarda el token que proporciones y lo reutiliza en cada escaneo.

<Warning>
  Algunos registros emiten tokens **de corta duración** que caducan en unas horas. Funcionan en el primer escaneo y después empiezan a fallar. Usa un token de larga duración, una cuenta de servicio o una clave de API.
</Warning>

<Tip>
  Crea una cuenta de servicio dedicada de solo lectura para Corgea en lugar de usar un token personal. El acceso queda limitado a lo necesario y la conexión sigue funcionando cuando alguien deja el equipo.
</Tip>

## Configurar un registro

### Paso 1: obtener los datos de tu registro

En tu registro, crea un token (o cuenta de servicio) con acceso de **lectura** a los repositorios que Corgea deba usar. Anota el **usuario** al que pertenece y la **URL** del repositorio.

<Tabs>
  <Tab title="Maven">
    Usa la URL del repositorio que sirve tus artefactos internos, por ejemplo:

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

  <Tab title="PyPI">
    Usa la URL de tu índice de paquetes, que normalmente termina en `/simple`:

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

  <Tab title="NuGet">
    Usa la URL de índice de tu feed, que normalmente termina en `/index.json`:

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

### Paso 2: añadir el registro en Corgea

Ve a **Integrations → Package Registries** y haz clic en **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="Sección Package Registries en la página Integrations" width="1908" height="1077" data-path="images/package-registries/integrations_entry.png" />

<Note>
  Necesitas el permiso **Manage Integrations** para añadir, editar o eliminar un registro. Consulta [Permisos](#permissions).
</Note>

Haz clic en **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="Lista de Package Registries con los registros configurados" width="1910" height="1070" data-path="images/package-registries/registries_list.png" />

Rellena el formulario:

<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="Formulario Add Package Registry en modo Structured form" width="1479" height="1080" data-path="images/package-registries/add_registry_structured.png" />

| Campo                       | Obligatorio | Notas                                                                                                              |
| --------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------ |
| **Name**                    | Sí          | Una etiqueta para reconocer este registro. Se muestra en la lista y en la configuración del proyecto.              |
| **Ecosystem**               | Sí          | `Maven`, `PyPI` o `NuGet`. Elige el tipo de paquete que sirve este registro.                                       |
| **Setup method**            | Sí          | **Structured form** (predeterminado) o **Paste config file**. Consulta [Métodos de configuración](#setup-methods). |
| **Repository URL**          | Sí          | La URL del paso 1.                                                                                                 |
| **Additional repositories** | No          | Otros repositorios del mismo registro, uno por línea como `name=url`. Déjalo vacío para usar solo la URL anterior. |
| **Username**                | Sí          | El usuario o cuenta de servicio al que pertenece el token.                                                         |
| **Access token**            | Sí          | Tu token o contraseña. Se almacena cifrado y no se vuelve a mostrar tras guardarlo.                                |
| **Apply to all projects**   | No          | Activado por defecto. Consulta [Elegir qué proyectos usan un registro](#choosing-which-projects-use-a-registry).   |
| **Enabled**                 | No          | Activado por defecto. Desactívalo para dejar de usar el registro sin eliminarlo.                                   |

<Warning>
  Cada entrada de registro cubre **un tipo de paquete**. Si tu registro aloja repositorios de Maven, PyPI y NuGet, añade tres entradas —una por tipo— cada una con su URL correspondiente.
</Warning>

### Paso 3: elegir qué proyectos lo usan

Deja **Apply to all projects** activado para que todos los proyectos de tu organización puedan usar este registro, o desactívalo y selecciona proyectos concretos. Consulta [Elegir qué proyectos usan un registro](#choosing-which-projects-use-a-registry).

### Paso 4: volver a escanear y revisar los resultados

Ejecuta un escaneo nuevo en un proyecto que dependa de un paquete interno y comprueba que:

* La advertencia **Dependency Analysis** de ese archivo ha desaparecido de la pestaña «Errors».
* Tu paquete interno ya muestra **subdependencias** y se puede expandir en el [árbol de dependencias](/es/sca#dependency-tree-view).
* Aparecen las vulnerabilidades que solo existen dentro de paquetes internos.

<Note>
  Conectar un registro no cambia los resultados de escaneos anteriores. Ejecuta un **escaneo nuevo** para obtener la cobertura mejorada.
</Note>

<Note>
  Si Corgea no puede llegar a tu registro durante un escaneo, este termina igualmente usando paquetes públicos y muestra una advertencia en el archivo afectado. Un problema del registro nunca hace fallar tu escaneo ni bloquea tu pipeline, pero los resultados no incluirán tus paquetes internos hasta que se resuelva.
</Note>

<h2 id="setup-methods">
  Métodos de configuración
</h2>

### Structured form (recomendado)

Introduce tu URL, usuario y token, y Corgea se encarga del resto. Usa esta opción salvo que tengas un motivo concreto para no hacerlo.

### Paste config file (avanzado)

Si ya mantienes un archivo de configuración de gestor de paquetes para tu registro, puedes pegarlo en su lugar. Elige esta opción cuando tu registro necesite ajustes que el formulario no cubre, como mirrors, proxies o reglas sobre qué paquetes provienen de qué origen.

<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="Formulario Add Package Registry en modo Paste config file" width="1550" height="1076" data-path="images/package-registries/add_registry_raw.png" />

Pega el archivo de configuración que tu gestor de paquetes ya usa para este registro: un `settings.xml` de Maven, un archivo de configuración de pip o un `NuGet.Config`.

<Warning>
  El archivo debe contener **credenciales válidas**. Si tu archivo usa una contraseña cifrada o de ejemplo, sustitúyela por un token real antes de pegarlo: Corgea no puede descifrar el formato de contraseña propio de tu registro.
</Warning>

<Note>
  Si cambias un registro existente de un método de configuración a otro, introduce de nuevo las credenciales para el método nuevo. Corgea conserva únicamente las credenciales del método que estás usando.
</Note>

<h2 id="choosing-which-projects-use-a-registry">
  Elegir qué proyectos usan un registro
</h2>

Los registros se configuran una vez para tu organización y luego se aplican a los proyectos de dos formas:

* **Apply to all projects** (predeterminado): todos los proyectos de tu organización pueden usar el registro. Ideal para un único registro corporativo.
* **Proyectos concretos**: solo los proyectos que selecciones. Útil cuando un registro pertenece a un equipo o cuando quieres desplegar la función de forma gradual.

### Revisar un proyecto concreto

Abre un proyecto y ve a **Settings → Package Registries** para ver qué registros se aplican:

* Los registros aplicados en todas partes muestran la etiqueta **All projects**. Cámbialos desde **Integrations → Package Registries**.
* Los demás registros muestran un **interruptor** que puedes activar o desactivar para este proyecto.
* Un registro desactivado por completo muestra la etiqueta **Disabled**.

<Note>
  Cambiar los registros de un proyecto requiere el permiso **Change Project**. Si el [control de acceso a proyectos](/es/content-access-management) está activado, también necesitas acceso a ese proyecto.
</Note>

## Usar más de un registro

Puedes añadir tantos registros como necesites, y un proyecto puede usar varios a la vez:

* **Varios registros para el mismo tipo de paquete**: los paquetes se buscan en todos ellos.
* **Tipos de paquete distintos**: cada uno se gestiona de forma independiente.
* **Varios repositorios en un mismo registro**: indícalos en **Additional repositories** en lugar de crear entradas separadas.

<Note>
  Para un mismo tipo de paquete, usa el mismo método de configuración en todos sus registros. Si algunos usan **Structured form** y otros **Paste config file**, los archivos pegados se ignoran.
</Note>

<h2 id="permissions">
  Permisos
</h2>

| Acción                                         | Permiso necesario       |
| ---------------------------------------------- | ----------------------- |
| Ver la lista Package Registries                | **View Integrations**   |
| Añadir, editar o eliminar un registro          | **Manage Integrations** |
| Ver el panel Package Registries de un proyecto | **View SAST Scan**      |
| Cambiar qué registros usa un proyecto          | **Change Project**      |

Consulta [Grupos de permisos](/es/permission_groups) para saber cómo asignarlos.

## Seguridad

Tus credenciales de registro se tratan como secretos:

* **Almacenamiento cifrado.** Las credenciales se cifran y no se vuelven a mostrar después de guardarlas. Al editar un registro, el campo del token aparece vacío; dejarlo vacío conserva tu token actual.
* **Se usan solo durante los escaneos.** Las credenciales sirven para autenticarse en tu registro mientras se ejecuta un escaneo, y para nada más.
* **Aisladas.** Las credenciales y los paquetes descargados con ellas nunca se comparten con otro escaneo ni con otra organización.
* **Fuera de tu repositorio.** Corgea no escribe tus credenciales en ningún archivo que genere.
* **Ocultas en registros y mensajes.** Las credenciales se eliminan de los mensajes de error y diagnósticos mostrados en Corgea.
* **Acceso de solo lectura.** Corgea solo descarga paquetes y lee su información de dependencias.

<h2 id="registries-on-restricted-networks">
  Registros en redes restringidas
</h2>

Si tu red bloquea los registros públicos y exige que todos los paquetes pasen por tu propio registro, apunta Corgea a un repositorio que sirva tanto tus paquetes internos **como** los públicos mediante proxy. Así Corgea obtiene todo lo que necesita de un único origen.

Si tu registro solo sirve paquetes internos y los registros públicos no son accesibles, el análisis de dependencias no puede completarse.

## Resolución de problemas

<AccordionGroup>
  <Accordion title="Dependency Analysis could not fully process this file">
    **Qué significa**: Corgea encontró un paquete que no pudo buscar, normalmente un paquete interno en un registro en el que no puede iniciar sesión.

    **Qué hacer**: añade un registro para ese tipo de paquete, comprueba que se aplica al proyecto y vuelve a escanear. Si ya hay un registro conectado, revisa la URL y que el token siga siendo válido.
  </Accordion>

  <Accordion title="Private package registry auth was enabled but no registry credentials could be loaded">
    **Qué significa**: el proyecto está configurado para usar un registro privado, pero no había ninguno utilizable al iniciar el escaneo. Normalmente el registro se ha desactivado, ya no se aplica al proyecto o se ha eliminado.

    **Qué hacer**: ve a **Integrations → Package Registries** y comprueba que existe un registro para ese tipo de paquete, que está **Enabled** y que se aplica a todos los proyectos o incluye este.
  </Accordion>

  <Accordion title="Private registry dependency resolution failed">
    **Qué significa**: Corgea inició sesión pero no pudo obtener los paquetes. Causas habituales: token caducado o revocado, URL apuntando al repositorio equivocado, o un paquete que no está en el registro.

    **Qué hacer**: comprueba las credenciales desde fuera de tu red:

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

    Un `401` o `403` indica credenciales incorrectas. Un `404` indica una URL incorrecta.
  </Accordion>

  <Accordion title="Private registry dependency resolution timed out">
    **Qué significa**: obtener tus dependencias tardó demasiado, normalmente por un proyecto muy grande o un registro lento.

    **Qué hacer**: confirma archivos de bloqueo cuando puedas, para que haya menos que resolver durante el escaneo, y revisa los tiempos de respuesta de tu registro. Después vuelve a escanear.
  </Accordion>

  <Accordion title="Some modules in a large repository were not covered">
    **Qué significa**: el repositorio contiene más módulos independientes de los que Corgea procesa en un solo escaneo.

    **Qué hacer**: si los módulos no cubiertos importan, sepáralos en proyectos de Corgea distintos, o confirma archivos de bloqueo para ellos.
  </Accordion>

  <Accordion title="Private registry CVE scan failed or timed out">
    **Qué significa**: tus paquetes internos se obtuvieron, pero la comprobación de vulnerabilidades sobre ellos no terminó.

    **Qué hacer**: vuelve a escanear. Los resultados de los paquetes públicos no se ven afectados; solo pueden faltar vulnerabilidades propias de paquetes internos.
  </Accordion>

  <Accordion title="Dependency analysis fails when public registries are blocked">
    **Qué significa**: Corgea necesita componentes disponibles públicamente para analizar tu proyecto, y ni tu registro ni internet los están proporcionando.

    **Qué hacer**: apunta el registro a un repositorio que también sirva paquetes públicos mediante proxy. Consulta [Registros en redes restringidas](#registries-on-restricted-networks).
  </Accordion>

  <Accordion title="Will this interfere with my own package manager configuration?">
    **Qué significa**: no hay nada que corregir. Corgea añade su acceso al registro junto a la configuración incluida en tu repositorio en lugar de reemplazarla, así que tus orígenes y reglas actuales siguen aplicándose.

    **Qué hacer**: si aún parecen faltar orígenes, comprueba que el archivo de configuración incluido en tu repositorio sea válido. Corgea deja intacto un archivo que no puede leer antes que arriesgarse a romper tu compilación.
  </Accordion>

  <Accordion title="My registry uses http instead of https">
    **Qué significa**: funciona, pero tu token se envía sin cifrar.

    **Qué hacer**: usa `https` fuera de pruebas locales.
  </Accordion>

  <Accordion title="I cannot find the feature in Corgea">
    **Qué significa**: la función está desactivada por defecto y, en ese estado, se oculta en lugar de mostrarse como bloqueada, por lo que no hay nada que pulsar.

    **Qué hacer**: los registros de paquetes privados están disponibles para clientes enterprise con tenant dedicado. Escribe a [support@corgea.com](mailto:support@corgea.com) para activarla en tu organización y luego recarga la página Integrations.
  </Accordion>
</AccordionGroup>

## Mejores prácticas

<Tip>Empieza con un registro en un solo proyecto, comprueba que el árbol de dependencias es correcto y después aplícalo a todos los proyectos.</Tip>

* **Usa una cuenta de servicio dedicada de solo lectura** en lugar de un token personal.
* **Usa tokens de larga duración** y controla sus fechas de caducidad para que los escaneos no pierdan cobertura sin avisar.
* **Añade una entrada por tipo de paquete**, cada una con su URL correspondiente.
* **Prefiere un repositorio que además sirva paquetes públicos**: funciona con o sin restricciones de red.
* **Prefiere el formulario estructurado** y usa un archivo de configuración pegado solo cuando necesites ajustes que no cubre.
* **Confirma archivos de bloqueo** cuando sea práctico. Los escaneos son más rápidos y los resultados más consistentes.
* **Rota los tokens** según tu calendario habitual y actualiza el registro en Corgea. Deja el campo del token vacío al editar si no lo estás cambiando.

## Relacionado

* [Escaneo de dependencias (SCA)](/es/sca): cómo funcionan el escaneo de dependencias, el árbol de dependencias y la alcanzabilidad
* [Grupos de permisos](/es/permission_groups): conceder View y Manage Integrations
* [Gestión de acceso al contenido](/es/content-access-management): controlar quién puede modificar un proyecto
