Métodos de autenticación

En esta página, se describe cómo configurar la autenticación en Container Registry.

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. Docker está instalado.

Elige un método de autenticación

Los siguientes métodos de autenticación están disponibles:

gcloud como asistente de credenciales (recomendado)
Configura tus credenciales de Container Registry para usarlas directamente con Docker en gcloud. Usa este método cuando sea posible para obtener acceso seguro y de corta duración a los recursos de tu proyecto. Esta opción solo es compatible con las versiones Docker 18.03 o posteriores.
Auxiliar de credenciales de Docker independiente
Esta opción es principalmente para configurar sus credenciales para usarlas con Docker en ausencia del SDK de Cloud. Esta opción solo es compatible con las versiones Docker 18.03 o posteriores.
Token de acceso
Las credenciales predeterminadas de la aplicación proporcionan tokens de acceso de corta duración que una cuenta de servicio utiliza para acceder a tus recursos de Google Cloud. Es la alternativa más segura al uso de gcloud como asistente de credenciales.
Archivo de claves JSON

Un par de claves del administrador de usuario que puedes usar como credencial para una cuenta de servicio. Debido a que la credencial es de larga duración, es la opción menos segura de todos los métodos de autenticación disponibles.

Cuando sea posible, usa credenciales predeterminadas de la aplicación u otro método de autenticación disponible para reducir el riesgo de acceso no autorizado a tus artefactos. Si debes usar una clave de cuenta de servicio, asegúrate de seguir las recomendaciones para administrar las credenciales.

Algunas herramientas o flujos de trabajo no proporcionan una buena asistencia para usar gcloud como auxiliar de credenciales. Si usas una de las opciones alternativas, asegúrate de comprender las implicaciones de seguridad.

gcloud como auxiliar de credenciales de Docker

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

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.

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 la cuenta de servicio es para enviar o extraer imágenes de una instancia de VM de Compute Engine, configure los permisos de acceso para el nivel de acceso requerido.

Token de acceso

Un token de acceso es una credencial de corta duración que proporciona acceso a tus recursos de Google Cloud. Puedes usar un token de acceso como contraseña para conectarte a Container Registry.

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

  1. Obtén la clave de la cuenta de servicio que interactuará con Container Registry.

    Console

    1. En Google Cloud Console, abre la página Crear clave de cuenta de servicio.

      Ir a la página Crear clave de la cuenta de servicio

    2. En la lista de cuentas de servicio, selecciona la cuenta de servicio que deseas usar.

      Para crear una nueva cuenta de servicio, selecciona Nueva cuenta de servicio y especifica el nombre de servicio, ID y la función de Container Registry adecuada según los permisos que deseas otorgar a la cuenta de servicio.

    3. Seleccione JSON como tipo de clave.

    4. Haga clic en Crear. Se descargará a tu computadora un archivo JSON con la clave.

      Las instrucciones de esta página usan el nombre de archivo keyfile.json para este archivo de clave.

    gcloud

    Puedes ejecutar los siguientes comandos con el SDK de Cloud en tu máquina local o en Cloud Shell.

    1. Crea la cuenta de servicio. Reemplaza [NAME] por un nombre para la cuenta de servicio.

          gcloud iam service-accounts create NAME
          
    2. Otorga permisos a la cuenta de servicio. Reemplace PROJECT_IDpor el ID de su proyecto y ROLE por la función Container Registry adecuada para la cuenta de servicio. Esta función se aplica a todos los repositorios del proyecto. Puedes cambiar la función más tarde y también puedes establecer permisos diferentes para la cuenta de servicio en repositorios específicos.

          gcloud projects add-iam-policy-binding PROJECT_ID --member "serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role "roles/ROLE"
          
    3. Genera el archivo de claves. Las instrucciones de esta página usan el nombre de archivo keyfile.json para el archivo de clave.

          gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
          
  2. Si la cuenta de servicio es para enviar o extraer imágenes de una instancia de VM de Compute Engine, configure los permisos de acceso para el nivel de acceso requerido.

  3. Ejecute el siguiente comando para acceder al SDK de Cloud como una cuenta de servicio. En este comando, keyfile.json es el archivo de clave que creó para la cuenta de servicio.

    gcloud auth activate-service-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com --key-file=keyfile.json
        
  4. Obtén un token de acceso para la cuenta de servicio. Debido a que el token es de corta duración, solicítelo menos de una hora antes de usarlo para conectarse con Container Registry.

    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.
    1. Obtén el token de acceso
    gcloud auth print-access-token
        

    La string que se muestra es el token de acceso que usas como tu contraseña. En este ejemplo, ya29.8QEQIfY_... representa el token de acceso que se muestra.

    ya29.8QEQIfY_...
        
    1. Accede con el token de acceso
    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

Una clave de cuenta de servicio es un par de claves de larga duración que puedes usar como credencial para una cuenta de servicio. Eres responsable de la seguridad de la clave privada y de otras operaciones de administración de claves, como la rotación de claves.

Cualquier persona que tenga acceso a una clave privada válida para una cuenta de servicio podrá acceder a los recursos a través de la cuenta de servicio. Por ejemplo, algunas cuentas de servicio creadas automáticamente por Google Cloud, como la cuenta de servicio de Container Registry, tienen la función de lectura-escritura Editor para el proyecto superior. La cuenta de servicio predeterminada de Compute Engine está configurada con acceso de solo lectura al almacenamiento dentro del mismo proyecto.

Además, el ciclo de vida del acceso de la clave a la cuenta de servicio (y, por lo tanto, a los datos a los que tiene acceso la cuenta de servicio) es independiente del ciclo de vida del usuario que descargó la clave.

Usa las siguientes pautas para limitar el acceso a tus imágenes de contenedor:

Para crear una nueva cuenta de servicio y una clave de cuenta de servicio solo para usar con los repositorios de Container Registry:

  1. Crea la cuenta de servicio para interactuar con los repositorios:

    Console

    1. En Google Cloud Console, abre la página Crear clave de cuenta de servicio.

      Ir a la página Crear clave de la cuenta de servicio

    2. En la lista Cuenta de servicio, selecciona Cuenta de servicio nueva.

    3. Ingresa un nombre en el campo Nombre de cuenta de servicio.

    4. En la lista función, seleccione la función de Container Registry correspondiente a la cuenta de servicio.

    5. Haga clic en Crear. Se descargará a tu computadora un archivo JSON con la clave.

      Las instrucciones de esta página usan el nombre de archivo keyfile.json para este archivo de clave.

    gcloud

    Puedes ejecutar los siguientes comandos con el SDK de Cloud en tu máquina local o en Cloud Shell.

    1. Crea la cuenta de servicio. Reemplaza [NAME] por un nombre para la cuenta de servicio.

          gcloud iam service-accounts create NAME
          
    2. Otorga permisos a la cuenta de servicio. Reemplaza PROJECT_ID por tu ID de proyecto y ROLE por la función adecuada para la cuenta de servicio.

          gcloud projects add-iam-policy-binding PROJECT_ID --member "serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role "roles/ROLE"
          
    3. Genera el archivo de claves. En este ejemplo, el nombre del archivo de clave de salida es keyfile.json

          gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
          
  2. Usa la clave de la cuenta de servicio como tu contraseña para autenticarte con Docker.

    Linux/macOS

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

    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]
        

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

    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:

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

    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:

    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.

  3. Si la cuenta de servicio es para enviar o extraer imágenes de una instancia de VM de Compute Engine, configure los permisos de acceso para el nivel de acceso requerido.

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.