Note
El encabezado para restringir el acceso a GitHub.com se encuentra actualmente en versión preliminar pública y está sujeto a cambios. Aunque las versiones preliminares no suelen poder beneficiarse del soporte técnico de GitHub (consulta Explorar versiones de acceso anticipado con vista previa de la característica), esta característica cuenta con el soporte técnico de GitHub durante la versión preliminar pública.
Si usas Enterprise Managed Users, puedes impedir que los usuarios de la red se autentiquen en GitHub.com con cuentas que no sean miembros de tu empresa. Esto ayuda a reducir el riesgo de que los datos de tu empresa se expongan al público.
Para aplicar esta restricción, configurarás el proxy de red o el firewall para insertar un encabezado en las solicitudes web y API de los 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 del Soporte de GitHub.
Solicitud del acceso
Esta característica no está habilidata de forma predeterminada. Para solicitar acceso, ponte en contacto con el administrador de cuentas en el equipo de ventas de GitHub o regístrate aquí.
Requisitos previos
- Debes usar un empresa con usuarios administrados en GitHub.com.
- Sabrás que usas un empresa con usuarios administrados si todos los nombres de usuario de los usuarios se anexan con el código corto de la empresa.
- Si usas Nube de GitHub Enterprise con residencia de datos, la empresa reside en un subdominio dedicado de datos 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, normalmente denominado proxy de "interrupción e inspección".
- Admitir la inserción de encabezados arbitrarios
- GitHub debe haber concedido acceso a 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.
- En la esquina superior derecha de GitHub, haz clic en tu foto de perfil y, a continuación, en Your enterprise.
- En el lado izquierdo de la página, en la barra lateral de la cuenta de empresa, haz clic en Configuración.
- En Configuración, haz clic en Seguridad de autenticación.
- En la sección "Restricciones de acceso empresarial", busca el encabezado de tu empresa. Esta sección solo es visible para empresas con la característica habilitada.
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ón | Fin |
---|---|
github.com/* | Tráfico web a GitHub.com |
api.github.com/* | Solicitudes de API REST y GraphQL |
*.githubcopilot.com | Tráfico requerido para determinadas características de GitHub Copilot |
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.
Note
Se requiere acceso a github.com/login
para crear incidencias de soporte técnico. 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.
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 características GitHub 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ás realizar los cambios descritos a continuación.
Característica | Punto de conexión asociado | Notas |
---|---|---|
GitHub Pages | github.io | Por lo general, se trata de contenido generado por el usuario que no puede aceptar datos. Es posible que no quieras restringir el acceso. |
GitHub Codespaces | github.dev | Para restringir el acceso, bloquea completamente el punto de conexión. |
Acceso SSH | Puerto 22 en GitHub.com | Para restringir el acceso, bloquea completamente el punto de conexión. |
Ejecutores hospedados en GitHub | Varios | Para 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. |
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 Websocket a GitHub.com
¿Cómo funciona la restricción?
Para el tráfico que incluye el encabezado de empresa, cuando un usuario intenta acceder a GitHub.com a través de la web, Git o API mediante una cuenta de usuario (o un token asociado a una cuenta de usuario) que no es miembro de la empresa:
- El usuario verá un mensaje de error con un código de estado
403
. Consulta Errores que se muestran para los usuarios bloqueados. - Se registrará un evento
business.proxy_security_header_unsatisfied
en los registros de auditoría de empresa. Estos eventos de registro no tendrán campoactor
debido a motivos de privacidad, pero tendrán un campoactor_ip
si está habilitado (consulta Presentación de direcciones IP en el registro de auditoría de la empresa). Para investigar aún más estos eventos, puedes revisar los registros de proxy en tu entorno.
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 interfaz de usuario de GitHub.com, el encabezado restringe las cuentas en las que un usuario puede iniciar sesión.
Mientras está en la red, un usuario:
- puede iniciar sesión en un cuenta de usuario administrada de tu empresa.
- 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 a GitHub.com hasta que inicie sesión con su cuenta de propiedad empresarial.
Actividad de Git
Si el proxy está configurado para insertar el encabezado en solicitudes HTTP(S), los usuarios de la red se bloquearán para autenticarse en GitHub.com a través de HTTP(S), a menos que sean miembros de tu empresa. 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 que el tráfico de REST y GraphQL API a api.github.com, incluidas las solicitudes a través de GitHub CLI, el encabezado restringe el uso de tokens de acceso mientras los usuarios están conectados a la red.
Escenario | Resultado | Tipos de token afectados |
---|---|---|
Un usuario usa un personal access token asociado a una cuenta propiedad de tu empresa. | Los personal access token funcionan según lo previsto en las solicitudes de API. | ghp_ y github_pat_ |
Mientras está conectado a tu 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 tu red, con una cuenta fuera de la empresa, un usuario inicia sesión en una 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á conectada a la red, una aplicación intenta actualizar una sesión de un usuario fuera de la empresa mediante un token de actualización de GitHub App. | 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.
Escenario | Código de error | Message |
---|---|---|
Actividad web | 403 | El administrador de red ha bloqueado el acceso a GitHub excepto la ENTERPRISE Enterprise. Inicia sesión con tu cuenta de _SHORTCODE para acceder a GitHub. |
Actividad de API | 403 | El administrador de red ha bloqueado el acceso a GitHub excepto la ENTERPRISE Enterprise. Usa un token para un usuario de la empresa de _SHORTCODE para acceder a GitHub. |
Token de instalación | 403 | El administrador de red ha bloqueado el acceso a GitHub excepto la 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. Ten 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.
-
Instale Fiddler.
-
Configura Fiddler para descifrar el tráfico HTTPS. Consulta la documentación de Fiddler.
-
En Fiddler, ve a la pestaña "FiddlerScript" y agrega el código siguiente a la función
OnBeforeRequest
. Establece la variableenterpriseId
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"; }
// 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"; }
-
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 alternar la captura de paquetes haciendo clic en Archivo > Tráfico de captura.
Puedes activar y desactivar esta inserción para simular el inicio de sesión con una cuenta no permitida y, a continuación, escribir la red o intentar iniciar sesión en una cuenta no permitida mientras está en la red.
Solución de problemas
Si la inserció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 identificador de empresa o un slug no válido.
- El encabezado enumera más de una empresa.
- La solicitud contiene varios encabezados de
sec-GitHub-allowed-enterprise
.
Escenario | Código de error | Message |
---|---|---|
Slug o ID no válidos | 400 | No se encuentra la empresa denominada en el encabezado sec-Git . Asegúrate de que el "slug de empresa" se escriba correctamente en la configuración de firewall o proxy. Si el problema persiste, ponte en contacto con el administrador de red. |
Más de una empresa | 400 | Solo se puede usar una empresa con el encabezado sec-Git . 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 encabezados | 400 | Se recibió más de un sec-Git . 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. |