Skip to main content

Permitir que tu codespace acceda a una imagen de registro privada

Puedes utilizar secretos para permitir que los Codespaces accedan a un registro de imagen privada

Codespaces está disponible para las organizaciones que utilicen GitHub Team o Nube de GitHub Enterprise. Para obtener más información, consulta la sección "Productos de GitHub".

Acerca de los registros de imagen y Codespaces privados

Un registro es un espacio seguro para almacenar, administrar y recuperar imágenes de contenedor privadas. Puedes utilizar uno para almacenar una o más imágenes. Hay muchos ejemplos de registros, tales como el Registro de Contenedores de GitHub, Registro de Contenedores de Azure o DockerHub.

El Registro de Contenedores de GitHub puede configurarse para extraer imágenes de contenedor sin problemas, sin tener que proporcionar credenciales de autenticación a Codespaces. Para otros registros de imágenes, debes crear secretos en GitHub para almacenar los detalles de acceso, los cuales permitirán que los Codespaces accedan a las imágenes almacenadas en dicho registro.

Acceder a las imágenes almacenadas en el Registro de Contenedores de GitHub

El Registro de Contenedores de GitHub es la manera más fácil de que Acerca de GitHub Codespaces consuma imágenes de contenedor de devcontainer.

Para obtener más información, consulta la sección "Trabajar con el registro de contenedores".

Acceder a una imagen publicada en el mismo repositorio que el codespace

Si publicas una imagen de contenedor en el Registro de Contenedores de GitHub en el mismo repositorio que el codespace en el cuál se lanzará, automáticamente podrás recuperar esta imagen cuando crees el codespace. No tendrás que proporcionar credenciales adicionales, a menos de que la opción heredar acceso del repositorio se haya deseleccionado cuando se publique la imagen de contenedor.

Heredar el acceso del repositorio desde el cual se publicó la imagen

Predeterminadamente, cuando publicas una imagen de contenedor en el Registro de Contenedores de GitHub, esta hereda la configuración de acceso del repositorio desde el cual se publicó. Por ejemplo, si el repositorio es público, la imagen también es pública. Si el repositorio es privado, la imagen también es privada, pero es accesible desde el repositorio.

Este comportamiento se controla mediante la opción heredar acceso desde el repositorio. La opción heredar acceso desde el repositorio se encuentra seleccionada predeterminadamente cuando publicas a través de GitHub Actions, pero no cuando se publica directamente al Registro de Contenedores de GitHub utilizando un token de acceso personal (PAT).

Si la opción de heredar acceso desde el repositorio no se seleccionó cuando se publicó la imagen, puedes agregar el repositorio manualmente a los controles de acceso de la imagen del contenedor publicado. Para obtener más información, consulta la sección "Configurar el control de accesos y la visibilidad de un paquete".

Acceder a una imagen publicada en la organización en la cual se lanzará un codespace

Si quieres que todos los codespaces en una organización puedan acceder a una imagen de contenedor, te recomendamos que la publiques con visibilidad interna. Esto hará que la imagen sea automáticamente visible para todos los codespaces dentro de la organización, a menos de que el repositorio desde el cual se lanzó el codespace sea público.

Si el codespace se está lanzando desde un repositorio público que referencia una imagen privada o interna, debes permitir manualmente que el repositorio público acceda a la imagen de contenedor interna. Esto previene que la imagen interna se filtre accidentalmente al público. Para obtener más información, consulta la sección "Garantizar el acceso de los codespaces a tu paquete".

Acceder a un contenedor privado desde un subconjunto de repositorios en una organización

Si quieres permitir que un subconjunto de repositorios de una organización accedan a una imagen de contenedor o permitan el acceso a una imagen privada o interna desde un codespace que se lanzó en un repositorio público, puedes agregar repositorios manualmente a los ajustes de acceso de la imagen del contenedor. Para obtener más información, consulta la sección "Garantizar el acceso a los codespaces para tu paquete."

Publicar una imagen de contenedor desde un codespace

El acceso fácil desde un codespace hasta el Registrod de Contenedores de GitHub se limita a las imágenes de contenedor que se extraen. Si quieres publicar una imagen de contenedor desde dentro de un codespace, debes utilizar un token de acceso personal (PAT) con el alcance write:packages.

Te recomendamos publicar imágenes a través de GitHub Actions. Para obtener más información, consulta la sección "Publicar imágenes de Docker".

Acceder a las imágenes almacenadas en otros registros de contenedor

Si estás accediendo a una imagen de contenedor desde un registro diferente al Registro de Contenedores de GitHub, Codespaces verifica la presencia de tres secretos, los cuales definen el nombre del servidor, nombre de usuario y token de acceso personal (PAT) de un registro de contenedores. Si se encuentran estos secretos, Codespaces hará que el registro esté disponible dentro de tu codespace.

  • <*>_CONTAINER_REGISTRY_SERVER
  • <*>_CONTAINER_REGISTRY_USER
  • <*>_CONTAINER_REGISTRY_PASSWORD

Puedes almacenar los secretos a nivel de repositorio, organización o usuario, lo cual te permite compartirlos de forma segura entre diferentes codespaces. Cuando creas un conjunto de secretos para un registro de imagen privado, necesitas reemplazar el "<*>” del nombre con un identificador consistente. Para obtener más información, consulta las secciones "Administrar los secretos cifrados para tus codespaces" y "Administrar los secretos cifrados de tu repositorio y organización para los Codespaces".

Si estás configurando secretos a nivel de organización o de usuario, asegúrate de asignarlos al repositorio en el que crearás el codespace eligiendo una política de acceso desde la lista desplegable.

Ejemplo de secreto de registro de imagen

Secretos de ejemplo

Para los registros de imagen privados en Azure, podrías crear los siguientes secretos:

ACR_CONTAINER_REGISTRY_SERVER = mycompany.azurecr.io
ACR_CONTAINER_REGISTRY_USER = acr-user-here
ACR_CONTAINER_REGISTRY_PASSWORD = <PAT>

Para obtener más información sobre los registros de imagen comunes, consulta la sección "Servidores de registro de imagen comunes". Toma en cuenta que el acceso a AWS Elastic Container Registry (ECR) será diferente.

Ejemplo de secreto de registro de imagen

Una vez que hayas agregado los secretos, podría ser que necesites parar y luego iniciar el codespace en el que estás para que las variables de ambiente nuevas pasen en el contenedor. Para obtener más información, consulta la sección "Suspender o detener un codespace".

Acceder a AWS Elastic Container Registry

Para acceder a AWS Elastic Container Registry (ECR), puedes proporcionar una ID de llave de acceso de AWS y una llave secreta y GitHub podrá recuperar un token de acceso para ti e iniciar sesión en tu nombre.

*_CONTAINER_REGISTRY_SERVER = <ECR_URL>
*_CONTAINER_REGISTRY_USER = <AWS_ACCESS_KEY_ID>
*_CONTAINER_REGISTRY_PASSWORD = <AWS_SECRET_KEY>

Debes de asegurarte de que tengas los permisos adecuados de AWS IAM para realizar el cambio de credenciales (por ejemplo: sts:GetServiceBearerToken), así como la operación de lectura de ECR (ya sea AmazonEC2ContainerRegistryFullAccess o ReadOnlyAccess).

Como alternativa, si no quieres que GitHub realice el cambio de credenciales en tu nombre, puedes proporcionar un token de autorización que se haya recuperado a través de las API de AWS o del CLI.

*_CONTAINER_REGISTRY_SERVER = <ECR_URL>
*_CONTAINER_REGISTRY_USER = AWS
*_CONTAINER_REGISTRY_PASSWORD = <TOKEN>

Ya que estos tokens tienen una vida corta y necesitan actualizarse constantemente, te recomendamos proporcionar una ID de llave de acceso y secreto.

Si bien estos secretos pueden llevar cualquier nombre, siempre y cuando el *_CONTAINER_REGISTRY_SERVER sea una URL de ECR, te recomendamos utilizar ECR_CONTAINER_REGISTRY_* a menos de que se trate de registros múltiples de ECR.

Para obtener más información, consulta la "Documentación de autenticación de registros privados" de AWS ECR.

Servidores de registro de imagen comunes

Algunos de los servidores de registro de imagen comunes se listan a continuación:

Depurar el acceso al registro de imágenes privadas

Si tienes problemas para extraer una imagen de un registro de imágenes privado, asegúrate de que puedas ejecutar docker login -u <user> -p <password> <server>, utilizando los valores de los secretos que se definen a continuación. Si el inicio de sesión falla, asegúrate de que las credenciales de inicio de sesión sean válidas y de que tienes los permisos adecuados en el servidor para recuperar una imagen de contenedor. Si el inicio de sesión es exitoso, asegúrate de que estos valores se copien adecuadamente en los secretos de Codespaces correctos, ya sea a nivel de usuario, repositorio u organización, e intenta de nuevo.