Skip to main content
Skip to content

Protección de endpoints con el firewall de paquetes de GitHub

Proteja las instalaciones de dependencias en máquinas de desarrollador, agentes de IA y ejecutores de CI con GitHub package firewall.

Nota:

Esta característica está actualmente en versión preliminar pública y está sujeta a cambios.

Acerca de GitHub package firewall

GitHub package firewall se encuentra entre los puntos de conexión y los repositorios de paquetes. Evalúa las descargas de paquetes conforme a directivas como la antigüedad mínima del paquete y los avisos de malware, y bloquea las descargas que no cumplen esas directivas. Puede usarlo para proteger las instalaciones de dependencias en compilaciones de CI, sesiones de agente de IA y desarrollo local.

Para usar el firewall, configure los controles de directiva de la empresa y, a continuación, configure los endpoints para solicitar paquetes a través del firewall en lugar de directamente desde un registro público. También puede conceder acceso para administrar la directiva a través de un rol personalizado.

Configuración de los controles de política

Los administradores de seguridad empresarial y los administradores de empresa pueden configurar controles de directiva.

  1. Vaya a su empresa. Por ejemplo, desde la página Empresas en GitHub.com.
  2. En la parte superior de la página, haga clic en Directivas.
  3. En la barra lateral, haga clic en Package firewall.
  4. Configure los controles de directiva descritos en las secciones siguientes. Estos controles se aplican a todas las solicitudes que pasan por el firewall.

Bloquear malware conocido

Cuando está habilitado, este control comprueba el GitHub Advisory Database para detectar avisos de malware activos y bloquea los paquetes con un aviso coincidente. Este control tiene como valor predeterminado Activado.

Bloqueo de avisos de vulnerabilidades

Este control comprueba el GitHub Advisory Database en busca de vulnerabilidades que afectan a la versión del paquete solicitada. Seleccione la gravedad mínima de aviso que bloquea una instalación: Crítico solo, Alto o superior, Medio o superior, o Cualquier gravedad. Este control solo tiene como valor predeterminado Crítico.

Degradaciones de la atestación de bloque

Este control compara las atestaciones de la versión del paquete solicitada con las de versiones anteriores. Si el paquete tenía previamente atestaciones de SLSA, pero la versión solicitada no las tiene, el firewall bloquea la descarga. Las atestaciones que faltan pueden indicar un proceso de publicación comprometido. Para obtener más información sobre los atestados, consulte Atestaciones de artefactos. Este control tiene como valor predeterminado Activado.

Bloquear scripts de instalación recién introducidos

Este control comprueba si el paquete ha agregado recientemente scripts que se ejecutan durante la instalación, como preinstall o postinstall scripts. Estos scripts pueden ejecutar comandos arbitrarios en el sistema y se pueden usar para robar credenciales. Este control tiene como valor predeterminado Activado.

Antigüedad mínima del paquete

Este control establece un período de enfriamiento para las versiones del paquete recién publicadas. El firewall bloquea las versiones con una antigüedad inferior a la mínima configurada, lo que permite detectar amenazas antes de instalarlas.

Establezca la edad mínima en un valor entre 1 y 365 días, o establézcala en 0 para deshabilitar el control. El valor predeterminado es 1 día.

Configurar los puntos de conexión para usar Package firewall

Configure el administrador de paquetes para obtener paquetes de la dirección URL del firewall en lugar del repositorio público predeterminado.

Token de autenticación

La dirección URL del Registro es específica de su empresa. Cada solicitud debe incluir un token de autenticación asociado a una cuenta de usuario o bot que sea miembro de la empresa. El token no necesita ningún permiso elevado más allá del acceso de solo lectura a los repositorios públicos. Para obtener más información, vea Administración de tokens de acceso personal.

Configuración de npm

Usa el archivo de usuario .npmrc para configurar npm. En los ejemplos, reemplace ENTERPRISE por su slug empresarial. Establezca la variable de GITHUB_TOKEN entorno en un GitHub token con acceso a su empresa. Almacene el token de forma segura, como en un secreto de CI, y no haga commit de él en un repositorio.

  1. Agregue la siguiente configuración al archivo .npmrc de nivel de usuario:

    registry=https://package-firewall.githubapp.com/npm/enterprises/ENTERPRISE
    //package-firewall.githubapp.com/npm/enterprises/ENTERPRISE/:_authToken=${GITHUB_TOKEN}
    

Como alternativa, configure los mismos valores desde la línea de comandos:

npm config set registry \
  https://package-firewall.githubapp.com/npm/enterprises/ENTERPRISE
npm config set \
  '//package-firewall.githubapp.com/npm/enterprises/ENTERPRISE/:_authToken=${GITHUB_TOKEN}'

Configurar Artifactory

Puede configurar JFrog Artifactory para obtener paquetes a través del firewall. Los puntos de conexión siguen usando Artifactory, lo que permite combinar paquetes públicos y privados al aplicar directivas de firewall a los paquetes recuperados a través del firewall.

Debe tener privilegios de administrador en la instancia de Artifactory.

Nota:

La compatibilidad con Artifactory es experimental. Para compartir sugerencias o preocupaciones sobre el soporte técnico de Artifactory, consulte la discusión de la comunidad.

  1. En Artifactory, haga clic en la pestaña Administración y, a continuación, haga clic en Crear un repositorio.
  2. Seleccione Remoto como tipo de repositorio y, a continuación, seleccione npm como tipo de paquete.
  3. En el campo "Clave del repositorio", escriba un nombre como gh-package-firewall.
  4. En el campo "URL", escriba https://package-firewall.githubapp.com/npm/enterprises/ENTERPRISE, reemplazando ENTERPRISE por su slug de empresa.
  5. En el campo "Contraseña / token de acceso", pegue una contraseña o token de acceso válidos personal access token y, a continuación, seleccione Habilitar autenticación de tokens.
  6. Seleccione la Stage en la que desea usar el firewall, en función de la configuración de Artifactory.
  7. En el campo "Patrón", escriba **/* para incluir todas las rutas de acceso del paquete.
  8. Haz clic en Guardar.
  9. Cree o actualice un repositorio virtual de npm para incluir este repositorio remoto y sus repositorios npm privados. Excluya los remotos que obtienen paquetes directamente desde el registro de npm público para que no puedan omitir el firewall.
  10. Siga las instrucciones de Set me up del repositorio virtual para configurar los puntos de conexión.

Permisos granulares

De forma predeterminada, los administradores de empresa y los administradores de seguridad empresarial pueden modificar la directiva de firewall. Para conceder a otros usuarios acceso para ver y cambiar la directiva, agregue el permiso específico "Editar directiva de firewall de paquetes de nivel empresarial" a un rol personalizado y, a continuación, asigne ese rol a un equipo o individuo.

Gestión de excepciones

Si el firewall bloquea un paquete que necesita, puede solicitar una excepción a la directiva. Por ejemplo, una nueva versión del paquete que incluye una corrección de seguridad podría bloquearse mediante la directiva de antigüedad mínima del paquete.

Solicitar una excepción

Cuando el firewall bloquea un paquete, la salida de npm o el registro de CI/CD incluye una dirección URL para solicitar una excepción. Por ejemplo:

npm notice testcontainers: 1 version blocked by package-firewall due to security policies (version cooldown). Request an override: https://github.com/enterprises/octocats/security/bypass-requests/package-firewall/new?ecosystem=npm&package=testcontainers
  1. Abra la URL en su navegador.

  2. Revise los campos rellenados previamente y proporcione cualquier información que falte:

    • "Repositorio": repositorio en el que se produjo el bloqueo
    • "Ecosistema": el ecosistema de paquetes (actualmente, solo se admite npm)
    • "Nombre del paquete": el nombre del paquete, incluido el @scope prefijo si procede.
    • "Versión": es la versión que intentó instalar
    • "Motivo": ¿Por qué se debe desbloquear el paquete?
    • "Agregar un comentario": contexto adicional para los revisores
  3. Envíe la solicitud.

Revisión y aprobación de solicitudes de excepción

Los administradores de empresa y los administradores de seguridad empresarial pueden revisar las solicitudes de excepción.

  1. Vaya a su empresa. Por ejemplo, desde la página Empresas en GitHub.com.
  2. En la parte superior de la página, haga clic en Security and quality.
  3. En la barra lateral, haga clic en Package firewall bypass.
  4. En la lista "Solicitudes de omisión del firewall de paquetes", use la barra de búsqueda para buscar una solicitud y, a continuación, haga clic en la solicitud.
  5. En el cuadro de diálogo "Revisar la anulación de permiso del paquete", revise la excepción solicitada.
  6. Opcionalmente, para permitir todas las versiones del paquete, reemplace la versión solicitada en el campo "Versión o intervalo para permitir" por *. Esto amplía la excepción más allá de la versión solicitada.
  7. Agregue un comentario que explique la decisión y haga clic en Aprobar solicitud.

Por ejemplo, puede permitir todas las versiones de un paquete propiedad de la empresa en lugar de requerir una excepción independiente cada vez que la directiva de antigüedad mínima del paquete bloquea una nueva versión.

Gestión de aprobaciones

Las solicitudes de bypass aprobadas se agregan a la directiva de firewall. Los administradores de empresa y los administradores de seguridad empresarial pueden revisar y quitar excepciones obsoletas o no deseadas, incluidas las excepciones agregadas manualmente.

  1. Vaya a su empresa. Por ejemplo, desde la página Empresas en GitHub.com.
  2. En la parte superior de la página, haga clic en Directivas.
  3. En la barra lateral, haga clic en Package firewall.
  4. En "Anulaciones", haga clic en Anulaciones de paquete.
  5. Para quitar una excepción de la directiva, junto a la excepción, haga clic en .

Lectura adicional