Resumen de la seguridad de un codespace
GitHub Codespaces está diseñado con seguridad reforzada de forma predeterminada. Como consecuencia, necesitarás garantizar que tus prácticas de desarrollo de software no arriesguen el reducir la postura de seguridad de tu codespace.
En esta guía se describe la forma en la que GitHub Codespaces mantiene seguro el entorno de desarrollo y se proporcionan algunos de los procedimientos recomendados que ayudarán a mantener tu seguridad mientras trabajas. Como con cualquier herramienta de desarrollo, recuerda que solo debes intentar abrir y trabajar en repositorios que conoces y confías.
Aislamiento de entorno
GitHub Codespaces se diseñó para mantener los codespaces separados unos de otros, cada uno con su propia máquina virtual y red.
Máquinas virtuales aisladas
Cada codespace se hospeda en su máquina virtual (MV) recién creada. Dos codespaces jamás podrán ubicase en la misma MV.
Cada vez que reinicias un codespace, este se lanza en una MV nueva con las actualizaciones más recientes de seguridad disponibles.
Conexiones aisladas
Cada codespace tiene su propia red virtual aislada. Utilizamos cortafuegos para bloquear las conexiones entrantes de la internet y para prevenir que los codespaces se comuniquen entre sí en redes internas. Se permite que los codespaces hagan conexiones salientes a la internet.
Autenticación
Puedes conectarte a un codespace mediante un explorador web o desde Visual Studio Code. Si te conectas desde VS Code, se te pedirá que te autentiques con GitHub.
Cada vez que se cree o reinicie un codespace, se le asignará un token de GitHub nuevo con un periodo de vencimiento automático. Este periodo te permite trabajar en el codespace sin necesitar volver a autenticarte durante un día de trabajo habitual, pero reduce la oportunidad de que dejes la conexión abierta cuando dejas de utilizar el codespace.
El alcance del token variará dependiendo del tipo de acceso que tengas en el repositorio en donde se creó el codespace:
- Si tiene acceso de escritura al repositorio: el token tendrá como ámbito el acceso de lectura y escritura al repositorio.
- Si solo tiene acceso de lectura al repositorio: el token solo permitirá que el código se clone desde el repositorio de origen. Si realizas una confirmación en el codespace o insertas una nueva rama GitHub Codespaces crea automáticamente una bifurcación del repositorio o vincula el codespace a una bifurcación existente si ya tienes una para el repositorio ascendente. El token se actualiza para tener acceso de lectura y escritura a la bifurcación. Para obtener más información, vea «Utilizar el control de código fuente en tu codespace».
- Si has autorizado el espacio de código para acceder a otros repositorios: el token tendrá como ámbito el acceso de lectura o lectura y escritura al repositorio de origen y a cualquier otro repositorio al que hayas autorizado el acceso. Para obtener más información, vea «Administración del acceso a otros repositorios dentro del codespace».
Conexiones de los codespaces
Puedes conectarte a tu codespace utilizando el túnel cifrado de TLS que proporciona el servicio GitHub Codespaces. Solo el creador de un codespace puede conectarse a este. Las conexiones se autentican con GitHub.
Si necesitas permitir el acceso externo a los servicios que se ejecutan en un codespace, puedes habilitar el reenvío de puertos para acceso público o privado.
Reenvío de puertos
Si necesitas conectarte a un servicio (tal como un servidor web de desarrollo) que se ejecute en tu codespace, puedes configurar el reenvío de puertos para hacer que el servicio esté disponible en la internet.
Los propietarios de la organización pueden restringir la capacidad de hacer que los puertos de reenvío estén disponibles públicamente o dentro de la organización. Para obtener más información, vea «Restricción de la visibilidad de los puertos reenviados».
Puertos reenviados de forma privada: se puede acceder a ellos a través de Internet, pero solo puede hacerlo el creador del codespace después de autenticarse en GitHub.
Puertos reenviados públicamente dentro de la organización: se puede acceder a ellos a través de Internet, pero solo pueden hacerlo los miembros de la misma organización que el codespace después de autenticarse en GitHub.
Puertos reenviados de forma pública: cualquier persona puede acceder a ellos en Internet. No se necesita autenticación para acceder a los puertos públicos reenviados.
Todos los puertos reenviados son privados predeterminadamente, lo cual significa que necesitarás autenticarte antes de poder acceder al puerto. El acceso a los puertos privados reenviados de un codespace se controla mediante cookies de autenticación con un periodo de vencimiento de 3 horas. Cuando la cookie venza, necesitarás volver a autenticarte.
Un puerto público renviado se revertirá automáticamente a privado cuando elimines y vuelvas a agregar dicho puerto o si reinicias el codespace.
Puedes utilizar el panel de "Puertos" para configurar uno de ellos para su acceso público o privado y puedes detener el reenvío de puertos cuando ya no sea necesario. Para obtener más información, vea «Reenviar puertos en tu codespace».
Buenas prácticas de seguridad para tus codespaces
Los codespaces se diseñan para estar fortalecidos en seguridad predeterminadamente. Para ayudar a mantener esta postura, te recomendamos que sigas las buenas prácticas de seguridad durante tus procedimientos de desarrollo:
- Como con cualquier herramienta de desarrollo, recuerda que solo debes intentar abrir y trabajar en repositorios que conoces y confías.
- Antes de agregar cualquier dependencia nueva al codespace, revisa si se mantienen bien y si lanzan actualizaciones para arreglar cualquier vulnerabilidad de seguridad que se encuentre en su código.
Utilizar secretos de entorno de desarrollo para acceder a la información sensible
Utiliza siempre secretos de entorno de desarrollo cuando quieras utilizar información sensible (tal como tokens de acceso) en un codespace. Puedes acceder a tus secretos como variables de ambiente en el codespace, incluso desde la terminal. Por ejemplo, puedes iniciar un terminal en el codespace y usar echo $SECRET_NAME
para ver el valor de un secreto de entorno de desarrollo.
Los valores secretos se copian en variables de entorno cada vez que se reanuda o se crea el codespace y también se sincronizan cuando cambian.
Los secretos de entorno de desarrollo no se copian en el entorno si no tienes acceso de escritura al repositorio del codespace.
Para obtener más información sobre los secretos, consulte:
- «Administración de secretos específicos de la cuenta para GitHub Codespaces»
- «Administración de secretos del entorno de desarrollo para el repositorio o la organización»
Trabajar con las contribuciones y repositorios de otros
Cuando creas un codespace desde una rama de solicitud de cambios desde una bifurcación, el token en el codespace variará dependiendo de si el repositorio es público o privado:
- En el caso de un repositorio privado, el codespace obtiene acceso tanto a la bifurcación como al padre.
- En el caso de un repositorio público, el codespace solo tendrá acceso a la bifurcación y a abrir solicitudes de cambios en el padre.
También te protegemos aún más en estos escenarios, ya que no insertamos ninguno de los secretos de codespace en el entorno. Para obtener más información, vea «Administración de secretos específicos de la cuenta para GitHub Codespaces».
Nota: El ámbito del token en el codespace puede cambiar si creas un codespace desde una bifurcación a la que solo tienes acceso de lectura y, luego, haces una confirmación o insertas una nueva rama en el codespace. En esta situación, al igual que con cualquier otro repositorio, GitHub Codespaces crea automáticamente una nueva bifurcación, o vincula el codespace a una bifurcación existente propiedad de tu cuenta, y actualiza el token para que tenga acceso de lectura y escritura a la bifurcación recién vinculada. Para obtener más información, vea «Utilizar el control de código fuente en tu codespace».
Cuando GitHub Codespaces vincula el codespace a una bifurcación existente, esta bifurcación existente puede ser una bifurcación de la bifurcación desde la que creaste un codespace o tu propia bifurcación del repositorio ascendente compartido.
Buenas prácticas adicionales
Existen algunos procedimientos recomendados y riesgos adicionales de los que debes ser consciente cuando uses GitHub Codespaces.
Entender el archivo de devcontainer.json de un repositorio
Al crear un codespace, si se encuentra un archivo devcontainer.json
para el repositorio, se analiza y se usa para configurar el codespace. El archivo postCreateCommand
contiene características eficaces, por ejemplo, permite instalar extensiones de terceros y ejecutar código arbitrario a través de una propiedad devcontainer.json
.
Para obtener más información, vea «Introducción a los contenedores dev».
Otorgar acceso a través de características
Ciertas características de desarrollo pueden agregar riesgos a tu ambiente potencialmente. Por ejemplo, el firmar confirmaciones, inyectar secretos en las variables de ambiente, tener acceso autenticado al registro y acceder a los paquetes pueden representar problemas potenciales de seguridad. Te recomendamos que solo otorgues acceso a aquellos que lo necesiten y que adoptes una política de ser tan restrictivo como sea posible.
Uso de extensiones
Cualquier extensión adicional de VS Code que hayas instalado puede introducir más riesgos potencialmente. Para ayudar a mitigar este riesgo, asegúrate de que solo instales extensiones confiables y de que siempre se mantengan actualizadas.
Uso de la Sincronización de la configuración
La Sincronización de la configuración de VS Code puede permitir que el contenido potencialmente malintencionado se transfiera entre dispositivos. De forma predeterminada, la sincronización de la configuración está deshabilitada para los codespaces abiertos en el explorador. Si vas a crear un codespace para un repositorio en cuyo contenido no confías, debes abrir el codespace en el explorador y dejar la Sincronización de la configuración desactivada.
Si has habilitado la sincronización de la configuración en las preferencias de usuario y quieres permitir que los cambios en la configuración se sincronicen desde los codespaces a otras instancias de VS Code, te recomendamos que agregues una lista seleccionada de repositorios de confianza, en lugar de confiar en todos los repositorios. Al crear codespaces a partir de repositorios de confianza, los cambios realizados en la configuración de los codespaces se sincronizan con la configuración almacenada en caché en la nube, desde la que puede transferirse a los dispositivos. Para obtener más información sobre cómo administrar la sincronización de la configuración, consulte «Personalización de GitHub Codespaces para la cuenta».