Métodos de autenticación

Para autenticarte en Container Registry, debes usar gcloud como auxiliar de credenciales de Docker, tal como se describe a continuación.

En esta página, también se describen métodos avanzados de autenticación.

Antes de comenzar

Asegúrate de que se cumpla lo siguiente:

  1. Se instaló la versión más reciente del SDK de Cloud, que incluye la herramienta de línea de comandos de gcloud.

  2. Se instaló Docker.

gcloud como auxiliar de credenciales de Docker

Para autenticarte en Container Registry, usa gcloud como auxiliar de credenciales de Docker. Para hacerlo, ejecuta el comando siguiente:

gcloud auth configure-docker

Debes ejecutar este comando una vez para autenticarte en Container Registry.

Te recomendamos que utilices este método cuando sea posible. Proporciona acceso seguro y de corta duración a los recursos de tu proyecto.

Métodos de autenticación avanzada

Los métodos avanzados de esta página solo deben usarse cuando no resulta ideal usar gcloud como auxiliar de credenciales de Docker y cuando comprendes las consecuencias relacionadas con la seguridad del método avanzado.

Los métodos de autenticación avanzada son los siguientes:

Auxiliar de credenciales de Docker independiente

Docker necesita acceso a Container Registry para enviar y extraer imágenes. Puedes usar docker-credential-gcr, el auxiliar de credenciales de Docker que no requiere gcloud, a fin de configurar tus credenciales de Container Registry para usarlas con Docker.

El auxiliar de credenciales recupera tus credenciales de Container Registry, ya sea automáticamente o desde una ubicación especificada mediante la marca --token-source. Luego, las escribe en el archivo de configuración de Docker. De esta manera, puedes usar la herramienta de línea de comandos de Docker, docker, para interactuar directamente con Container Registry.

Para usar el auxiliar de credenciales de Docker, sigue estos pasos:

  1. Descarga docker-credential-gcr de las versiones de GitHub:

    También puedes usar la utilidad de línea de comandos de curl. Por ejemplo:

      VERSION=2.0.0
      OS=linux  # or "darwin" for OSX, "windows" for Windows.
      ARCH=amd64  # or "386" for 32-bit OSs, "arm64" for ARM 64.
    
      curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \
        | tar xz --to-stdout ./docker-credential-gcr \
        > /usr/bin/docker-credential-gcr && chmod +x /usr/bin/docker-credential-gcr
    
  2. Configura Docker para que use tus credenciales de Container Registry cuando interactúes con este (solo es necesario que lo hagas una vez):

    docker-credential-gcr configure-docker
    

    Consulta la documentación principal de docker-credential-gcr en GitHub para obtener más información.

  3. Si pretendes usar el comando docker para enviar o extraer imágenes almacenadas en otro proyecto de Google Cloud, asegúrate de que los permisos, incluidos los de acceso, estén configurados correctamente.

gcloud docker

Usa gcloud docker para incorporar al cliente de Docker las credenciales de Container Registry antes de entregar la solicitud a Docker. Por ejemplo, para enviar una imagen identificada por su resumen, usa el siguiente comando:

gcloud docker -- push [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]

donde:

  • [HOSTNAME] aparece en Ubicación en la consola. Es una de estas cuatro opciones: gcr.io, us.gcr.io, eu.gcr.io o asia.gcr.io.
  • [PROJECT-ID] es el ID de tu proyecto de Google Cloud Console). Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con alcance de dominio.
  • [IMAGE] es el nombre de la imagen en Container Registry.
  • [IMAGE_DIGEST] es el valor de hash sha256 del contenido de la imagen. En la consola, haz clic en la imagen específica para ver sus metadatos. El resumen se muestra como el resumen de la imagen.

Consulta la documentación sobre gcloud docker para obtener más información.

Si pretendes usar el comando docker para enviar o extraer imágenes almacenadas en otro proyecto de Google Cloud, asegúrate de que los permisos, incluidos los de acceso, estén configurados correctamente.

Token de acceso

Los tokens de acceso son tokens de corta duración que proporcionan acceso de lectura y escritura a tus recursos de Google Cloud.

Para autenticar los comandos de Docker, el comando gcloud docker pasa un token de acceso de corta duración como una contraseña a Container Registry.

  • Para docker pull y docker search, el token de acceso debe usar el permiso devstorage.read_only.
  • Para docker push, el token de acceso debe usar el permiso devstorage.read_write.

Para obtener más información sobre los permisos de la cuenta de servicio requeridos para enviar y extraer imágenes, consulta los requisitos para usar Container Registry con Google Cloud.

El esquema de autenticación para gcloud docker puede usarse en ausencia de la herramienta de línea de comandos de gcloud mediante la creación de un token de acceso adecuado (como metadatos de instancias de Compute Engine).

El acceso otorgado por este token es el mismo que se otorga cuando se usa el comando gcloud docker para autenticar, por lo que este es el método de autenticación alternativo más seguro.

Para usar un token de acceso, consulta la documentación sobre las credenciales predeterminadas de la aplicación. Luego, usa las siguientes credenciales:

Linux/macOS

  • El nombre de usuario es oauth2accesstoken.
  • La contraseña es tu token de acceso. Por ejemplo, gcloud auth print-access-token

Por ejemplo:

gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://[HOSTNAME]

donde [HOSTNAME] es gcr.io, us.gcr.io, eu.gcr.io o asia.gcr.io.

O bien, para clientes de Docker más antiguos que no son compatibles con --password-stdin:

docker login -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://[HOSTNAME]

Windows

  • El nombre de usuario es oauth2accesstoken.
  • La contraseña es el resultado de gcloud auth print-access-token.

Por ejemplo:

gcloud auth print-access-token
ya29.8QEQIfY_...

docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." https://[HOSTNAME]

donde [HOSTNAME] es gcr.io, us.gcr.io, eu.gcr.io o asia.gcr.io.

Archivo de claves JSON

Un archivo de claves JSON de la cuenta de servicio es una credencial de larga duración que se asigna a un proyecto específico de Cloud Console y sus recursos.

La cuenta de servicio que usas para enviar y extraer imágenes debe configurarse correctamente con los permisos necesarios para la interacción con Container Registry.

Las cuentas de servicio creadas automáticamente por Google Cloud, como la cuenta de servicio de Container Registry, reciben la función de lectura y escritura Editor en el proyecto superior. La cuenta de servicio predeterminada de Compute Engine está configurada con acceso de solo lectura al almacenamiento dentro del mismo proyecto. Es posible que desees otorgar a otras cuentas de servicio permisos más específicos. Para enviar y extraer imágenes de un proyecto a otro, se requiere una configuración adecuada de los permisos y los niveles de acceso en la cuenta de servicio que interactúa con Container Registry.

Para obtener más información sobre los permisos de la cuenta de servicio requeridos para enviar y extraer imágenes, consulta los requisitos para usar Container Registry con Google Cloud.

Para usar un archivo de claves JSON, sigue las instrucciones de la cuenta de servicio del Centro de ayuda de Google Cloud Console. Luego, usa las siguientes credenciales:

Linux/macOS

  • El nombre de usuario es _json_key (NO el nombre de la cuenta de servicio).
  • keyfile.json contiene la clave JSON de la cuenta de servicio.

Por ejemplo:

cat keyfile.json | docker login -u _json_key --password-stdin https://[HOSTNAME]

donde [HOSTNAME] es gcr.io, us.gcr.io, eu.gcr.io o asia.gcr.io.

O bien, para clientes de Docker más antiguos que no son compatibles con --password-stdin:

docker login -u _json_key -p "$(cat keyfile.json)" https://[HOSTNAME]

Windows

  • El nombre de usuario es _json_key (NO el nombre de la cuenta de servicio).
  • keyfile.json contiene la clave JSON de la cuenta de servicio.

Por ejemplo:

set /p PASS=<keyfile.json
docker login -u _json_key -p "%PASS%" https://[HOSTNAME]

donde [HOSTNAME] es gcr.io, us.gcr.io, eu.gcr.io o asia.gcr.io.

Consulta la documentación de cuentas de servicio para obtener más información sobre cómo configurar cuentas de servicio.

Usa Container Registry con Google Cloud

Las instancias de Compute Engine y los clústeres de Google Kubernetes Engine pueden enviar y extraer imágenes de Container Registry en función de los permisos de Cloud Storage en las instancias. Consulta cómo usar Container Registry con Google Cloud.

Las imágenes almacenadas en Container Registry se pueden implementar en el entorno flexible de App Engine.