Skip to main content

Restricción del acceso a GitHub.com mediante un proxy corporativo

Configure el proxy para impedir que los usuarios accedan GitHub.com con cuentas personales.

¿Quién puede utilizar esta característica?

Enterprises with Enterprise Managed Users on GitHub.com

Si usa Enterprise Managed Users, puede impedir que los usuarios de la red se autentiquen GitHub.com con cuentas que no sean miembros de su empresa. Esto ayuda a reducir el riesgo de que los datos de tu empresa se expongan al público.

Para aplicar esta restricción, deberá configurar su servidor proxy de red o firewall para inyectar una cabecera en las solicitudes web y a la API de sus usuarios a GitHub.com.

Esta característica requiere un firewall externo o un proxy. Soporte de GitHub no puede ayudar con la configuración ni la solución de problemas de herramientas externas como estas. Para obtener más información sobre el ámbito de compatibilidad, consulta Acerca de la compatibilidad con GitHub.

Habilitación de restricciones de acceso

Esta característica no está habilidata de forma predeterminada. Un propietario de empresa puede habilitar la característica para tu empresa.

  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 Configuración.
  3. En Configuración, haga clic en Seguridad de autenticación.
  4. En la sección "Restricciones de acceso empresarial", selecciona Habilitar restricciones de acceso empresarial.

Requisitos previos

  • Debe usar un empresa con usuarios administrados en GitHub.com.
    • Sabrás que estás usando un empresa con usuarios administrados si a los nombres de usuario de todos tus usuarios se les añade el código corto de tu empresa.
    • Si usa Nube de GitHub Enterprise con residencia de datos, la empresa reside en un subdominio dedicado de GHE.com, por lo que el encabezado no es necesario para diferenciar el tráfico a los recursos de la empresa.
  • Para aplicar la restricción, todo el tráfico debe fluir a través de un proxy o firewall. El proxy o el firewall debe:
    • Ser capaz de interceptar y editar el tráfico, comúnmente denominado un proxy de "interrupción y revisión".
    • Admitir la inserción de encabezados arbitrarios
  • El propietario de la empresa ha habilitado esta característica.

Búsqueda del encabezado

Para aplicar la restricción, insertarás un encabezado en todo el tráfico que va a determinados puntos de conexión admitidos. El encabezado tiene el formato siguiente.

sec-GitHub-allowed-enterprise: ENTERPRISE-ID

Un propietario de la empresa puede identificar el identificador de empresa correcto que se va a usar en el encabezado para tu empresa.

  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 Configuración.
  3. En Configuración, haga clic en Seguridad de autenticación.
  4. En la sección "Restricciones de acceso empresarial", busca el encabezado de tu empresa.

Uso del encabezado

Para obtener los mejores resultados, configura el proxy para insertar el encabezado en todo el tráfico a los siguientes puntos de conexión admitidos.

Punto de conexiónPropósito
github.com/*Tráfico web a GitHub.com
api.github.com/*Solicitudes de API REST y GraphQL
*.githubcopilot.comTráfico necesario para ciertas GitHub Copilot funciones

Esto impedirá que las personas de la red accedan a estos puntos de conexión con cuentas de usuario que no pertenecen a tu empresa. Junto con esta característica, puedes bloquear el tráfico desde fuera de la red configurando una lista de direcciones IP permitidas. Consulta Restricción del tráfico de red a la empresa con una lista de direcciones IP permitidas.

Nota:

Se requiere acceso a github.com/login para crear tickets de soporte. Para asegurarse de que los usuarios con derechos de soporte técnico pueden solicitar ayuda, es posible que quieras excluir a estos usuarios de la restricción.

Habilitación de restricciones de acceso para varias empresas

Los propietarios de empresas pueden aplicar la restricción en varias cuentas empresariales.

  1. Habilite la característica para cada cuenta empresarial. Consulte Habilitación de restricciones de acceso.
  2. Inyecte un encabezado en todo el tráfico que va a determinados puntos de conexión admitidos. El encabezado tiene el formato siguiente.
sec-GitHub-allowed-enterprise: ENTERPRISE1-ID, ENTERPRISE2-ID, ENTERPRISE3-ID ... ENTERPRISE20-ID.

Los propietarios de la empresa pueden encontrar el identificador de empresa correcto que se va a usar en el encabezado de cada una de las empresas. Consulte Encontrar el encabezado.

Nota:

Actualmente se admiten hasta 20 identificadores de empresa únicos que se incluirán en el encabezado.

Elevación de la restricción para determinados usuarios

Es posible que desees elevar la restricción para determinados usuarios que necesiten contribuir a los recursos de código abierto mediante una cuenta personal o que necesiten crear incidencias de soporte técnico en caso de problemas. Para controlar esto, debes configurar la red para insertar el encabezado solo para los usuarios que piensas restringir.

Entre las opciones se incluyen:

  • Segregación de red: crea una red de "trabajo" que inserte el encabezado y una red de "código abierto" que no lo haga. Limita el acceso a la red de "código abierto" a los usuarios que lo necesiten.
  • Agrupación de dispositivos: si el proxy o el firewall se autentica, puedes recopilar un grupo de usuarios que no necesita el encabezado y excluirlo de forma selectiva de la inserción.

Características no admitidas

Dado que esta restricción solo se aplica a las solicitudes que se envían a través de un proxy que agrega un encabezado de empresa, ciertas GitHub características no admiten la restricción para impedir que los usuarios accedan o usen sus cuentas personales. Para impedir que los usuarios de la red accedan a estas características, deberá realizar los cambios descritos a continuación.

CaracterísticaPunto de conexión asociadoNotas
GitHub Pagesgithub.ioPor lo general, se trata de contenido generado por el usuario que no puede aceptar datos. Es posible que no quieras restringir el acceso.
GitHub Codespacesgithub.devPara restringir el acceso, bloquea completamente el punto de conexión.
Acceso SSHPuerto 22 en GitHub.comPara restringir el acceso, bloquea completamente el punto de conexión.
SSH sobre HTTPSssh.github.comPara restringir el acceso, bloquea completamente el punto de conexión.
GitHubEjecutores hospedadosVariosPara aplicar el enrutamiento específico, usa redes privadas de Azure. Consulta Acerca de las redes privadas de Azure para ejecutores hospedados en GitHub en su empresa.
Ejecutores autohospedadosVariosPara aplicar el enrutamiento específico, use un servidor proxy. Consulta Uso de servidores proxy con un ejecutor.

Puntos de conexión que no requieren restricción

Los siguientes puntos de conexión no admiten ni requieren la restricción porque solo proporcionan datos y no la aceptan.

  • *.githubusercontent.com
  • *.githubassets.com
  • Tráfico de Websocket en GitHub.com

¿Cómo funciona la restricción?

Para el tráfico que incluye el encabezado de empresa, cuando un usuario intenta acceder GitHub.com a través de la web, Git o la API mediante una cuenta de usuario (o un token asociado a una cuenta de usuario) que no es miembro de la empresa:

En las secciones siguientes se proporcionan detalles sobre el comportamiento esperado que se aplica a las solicitudes de API y actividad web de los usuarios.

Actividad web

Para la actividad en la GitHub.com interfaz de usuario, el encabezado restringe las cuentas a las que un usuario puede iniciar sesión.

Mientras está en la red, un usuario:

  • Puede iniciar sesión en cuenta de usuario administrada de su organización.
  • no puede iniciar sesión en una cuenta fuera de la empresa.
  • no puede usar el conmutador de cuenta para cambiar a una cuenta fuera de la empresa.

Si un usuario ya ha iniciado sesión en una cuenta fuera de la empresa (por ejemplo, inició sesión mientras está fuera de la red), cuando el usuario traiga su dispositivo a la red, recibirá un error y no podrá acceder GitHub.com hasta que inicie sesión con su cuenta de propiedad empresarial.

Actividad de Git

Si el proxy está configurado para inyectar la cabecera en las peticiones HTTP(S), los usuarios de su red no podrán autenticarse en GitHub.com a través de HTTP(S), a menos que sean miembros de su organización. Las solicitudes de lectura pública no se bloquean para usuarios anónimos no autenticados.

No puedes usar el encabezado de empresa para restringir la actividad de Git a través de SSH. En su lugar, puedes optar por bloquear el puerto de las solicitudes SSH por completo. Consulta Características aún no admitidas.

Solicitudes de API

Para el tráfico de la API de REST y GraphQL hacia api.github.com, incluidas las solicitudes realizadas a través de GitHub CLI, la cabecera restringe el uso de tokens de acceso mientras los usuarios están conectados a tu red.

EscenarioResultadoTipos de token afectados
Un usuario usa un personal access token asociado a una cuenta propiedad de su empresa.
personal access token funciona según lo previsto en las solicitudes de API.
ghp_ y github_pat_
Mientras está conectado a la red, un usuario intenta usar un personal access token asociado a un usuario fuera de la empresa.Las solicitudes que usan el token están bloqueadas.
ghp_ y github_pat_
Mientras está fuera de tu red, con una cuenta fuera de la empresa, un usuario inicia sesión en una aplicación de OAuth que se ejecuta en su dispositivo. El usuario trae su dispositivo dentro de la red.Los tokens de OAuth de la aplicación dejan de funcionar.gho_
Mientras está fuera de su red y usa una cuenta que no pertenece a su empresa, un usuario inicia sesión en un GitHub App que se ejecuta en su dispositivo. El usuario trae su dispositivo dentro de la red.Los tokens de la aplicación dejan de funcionar.ghu_
Mientras está conectado a la red, una aplicación intenta actualizar una sesión para un usuario fuera de la empresa mediante un GitHub App token de actualización.Se produce un error en la actualización.ghr_
Mientras está conectada a la red, una aplicación intenta obtener un token de instalación (un token sin una identidad de usuario, solo la identidad de la aplicación) para una organización fuera de la empresa.El token no funcionará.ghs_

Errores que se muestran para los usuarios bloqueados

Los errores se mostrarán a los usuarios cuando la restricción funcione según lo previsto. Los errores se dan en las situaciones siguientes:

  • Actividad web: cuando se impide que un usuario inicie sesión o use una sesión obsoleta existente.
  • Actividad de API: cuando un usuario intenta usar un token asociado a un usuario fuera de la empresa.
  • Token de instalación: cuando una aplicación intenta usar un token de instalación para acceder a una organización o una cuenta de usuario fuera de la empresa. En el caso de las instalaciones, solo se bloquean las solicitudes de escritura. Las solicitudes de lectura no se bloquean en los recursos fuera de la empresa. Para obtener más información sobre los tokens de instalación, consulta Autenticación como una instalación de una aplicación de GitHub.
EscenarioCódigo de errorMensaje
Actividad web403El administrador de la red ha bloqueado el acceso a GitHub excepto para ENTERPRISE Enterprise. Inicie sesión con su cuenta de _SHORTCODE para acceder a GitHub.
Actividad de API403El administrador de la red ha bloqueado el acceso a GitHub excepto para ENTERPRISE Enterprise. Utilice un token de un usuario de la empresa _SHORTCODE para acceder a GitHub.
Token de instalación403El administrador de red ha bloqueado el acceso a GitHub excepto para ENTERPRISE Enterprise. Solo los tokens de la empresa "SHORTCODE" pueden acceder a GitHub.

Los errores con un código de 400 indican un error en la configuración. Vea Solución de problemas.

Ejemplo de hacer pruebas localmente

Puedes probar la configuración de red localmente mediante una herramienta de depuración web. En esta sección se proporciona un ejemplo con Fiddler. Tenga en cuenta que Fiddler y otras herramientas de depuración externa no están en el ámbito de Soporte de GitHub.

En el ejemplo siguiente, agregarás algunos FiddlerScript para ejecutarse en cada solicitud.

  1. Instale Fiddler.

  2. Configura Fiddler para descifrar el tráfico HTTPS. Consulta la documentación de Fiddler.

  3. En Fiddler, ve a la pestaña "FiddlerScript" y agrega el código siguiente a la función OnBeforeRequest. Establece la variable enterpriseId en tu propio identificador de empresa.

    JavaScript
    // Your enterprise id
    var enterpriseId: String = "YOUR-ID";
    
     //Inject on the web UI
     if (oSession.HostnameIs("github.com")){
         oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId)
         oSession["ui-color"] = "green";
     }
    
     // Inject on API calls
     if (oSession.HostnameIs("api.github.com")){
         oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId)
         oSession["ui-color"] = "blue";
         }
    
     // Inject on Copilot API calls
     if (oSession.HostnameIs("githubcopilot.com")){
         oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId)
         oSession["ui-color"] = "yellow";
     }
    
  4. Haz clic en el botón Guardar script.

El encabezado ahora se insertará para cada uno de los dominios especificados mientras la captura de paquetes está activa. Para habilitar o deshabilitar la inserción, puedes activar o desactivar la captura de paquetes haciendo clic en Archivo > Capturar Tráfico.

Puedes activar y desactivar esta inyección para simular el inicio de sesión con una cuenta no permitida y luego acceder a la red, o intentar iniciar sesión con una cuenta no permitida mientras estás en la red.

Solución de problemas

Si la inyección de encabezados no funciona según lo previsto, verás errores con un código de 400 al intentar usar los puntos de conexión afectados. Estos son distintos de los errores de 403 que se muestran cuando la característica funciona según lo previsto (consulta Errores mostrados para los usuarios bloqueados).

Generalmente, los errores de 400 se dan en las situaciones siguientes.

  • El encabezado usa un slug o un identificador de empresa no válido.
  • El encabezado enumera más de una empresa.
  • La solicitud contiene varios encabezados de sec-GitHub-allowed-enterprise.
EscenarioCódigo de errorMensaje
Slug o ID no válido400No se encuentra la empresa denominada en el encabezado sec-GitHub-allowed-enterprise. Asegúrese de que el "slug de empresa" se escriba correctamente en la configuración del firewall o proxy. Si el problema persiste, ponte en contacto con el administrador de red.
Más de una empresa400Solo se puede usar una empresa con el encabezado sec-GitHub-allowed-enterprise. Asegúrate de que solo se proporcione una sola empresa y un encabezado. Si el problema persiste, ponte en contacto con el administrador de red.
Varios encabezados400Se recibió más de un sec-GitHub-allowed-enterprise. El firewall o el proxy deben sobrescribir este encabezado para asegurarse de que únicamente se concede acceso a una sola empresa. Si el problema persiste, ponte en contacto con el administrador de red.

Información adicional