Skip to main content

Permitir que tu codespace acceda a una imagen de registro privada

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

Acerca de los registros de imagen y GitHub Codespaces

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 Container registry, npm registry, Azure Container Registry o DockerHub.

Container registry and npm registry se puede configurar para permitir que las imágenes de contenedor se extraigan sin problemas a GitHub Codespaces durante la creación del codespace, sin tener que proporcionar credenciales de autenticación. Para otros registros de imágenes, debes crear secretos en GitHub para almacenar los detalles de acceso, los cuales permitirán que los GitHub Codespaces accedan a las imágenes almacenadas en dicho registro.

Acceso a las imágenes almacenadas en Container registry and npm registry

Container registry and npm registry proporciona la manera más fácil de que GitHub Codespaces consuma imágenes de contenedor de desarrollo.

Para obtener más información, consulta «Trabajar con el registro de contenedor» y «Trabajar con el registro npm».

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

Si publicas una imagen de contenedor en Container registry or npm registry en el mismo repositorio en el que se está iniciando el codespace, podrás recuperar automáticamente esta imagen cuando crees el codespace. No tendrá que proporcionar credenciales adicionales, a menos que la opción Heredar acceso del repositorio se haya desactivado al publicar la imagen de contenedor.

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

De forma predeterminada, cuando publicas una imagen de contenedor en Container registry or npm registry, la imagen hereda la configuración de acceso del repositorio desde el cual ha sido publicada. 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 del repositorio. Heredar acceso del repositorio se selecciona de manera predeterminada al publicar desde GitHub Actions, pero no cuando se publica directamente en Container registry or npm registry con un personal access token.

Si la opción Heredar acceso del repositorio no se ha seleccionado al publicar la imagen, puede agregar el repositorio manualmente a los controles de acceso de la imagen del contenedor publicado. Para más información, vea "Configuración del control de acceso 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 más información, vea "Garantía del acceso de Codespaces al paquete".

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

Si quiere permitir que un subconjunto de los repositorios de una organización accedan a una imagen de contenedor, o bien permitir el acceso a una imagen privada o interna desde un codespace iniciado en un repositorio público, puede agregar repositorios manualmente a la configuración de acceso de la imagen del contenedor. Para más información, vea "Garantía del acceso de Codespaces al paquete."

Publicar una imagen de contenedor desde un codespace

El acceso fácil desde un codespace a Container registry or npm registry se limita a la extracción de imágenes de contenedor. Si quieres publicar una imagen de contenedor desde dentro de un codespace, tendrás que usar un personal access token (classic) con el ámbito write:packages.

Te recomendamos publicar imágenes a través de GitHub Actions. Para obtener más información, consulta «Publicación de imágenes de Docker» y «Publicación de paquetes Node.js».

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

Si estás accediendo a una imagen de contenedor desde un registro diferente a Container registry or npm registry, GitHub Codespaces verifica la presencia de los tres secretos que definen el nombre del servidor, el nombre de usuario y personal access token para un registro de contenedores. Si se encuentran estos secretos, GitHub 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 más información, consulta "Administración de secretos cifrados para los codespaces" y "Administración de secretos cifrados para el repositorio y la organización para GitHub 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 = <PERSONAL_ACCESS_TOKEN>

Para obtener información sobre los registros de imágenes comunes, vea "Servidores comunes de registro de imágenes". 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 más información, vea "Suspensión o detención de 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>

También debe asegurarse de que tiene los permisos IAM de AWS adecuados para realizar el intercambio 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.

Aunque estos secretos pueden tener cualquier nombre, siempre que *_CONTAINER_REGISTRY_SERVER sea una dirección URL de ECR, se recomienda usar ECR_CONTAINER_REGISTRY_*, a menos que trabaje con varios registros ECR.

Para más información, vea la "documentación de autenticación de registros privados" de ECR de AWS.

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 tiene problemas para extraer una imagen de un registro de imágenes privadas, asegúrese de que puede ejecutar docker login -u <user> -p <password> <server>, con los valores de los secretos definidos anteriormente. 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 GitHub Codespaces correctos, ya sea a nivel de usuario, repositorio u organización, e inténtalo de nuevo.