Configura el control de acceso

En esta página, se describen las opciones de control de acceso disponibles en Container Registry y cómo usar una clave de encriptación con Container Registry.

Dado que Container Registry usa un depósito de Cloud Storage como backend para las imágenes de contenedor publicado, puedes controlar quién tiene acceso a tus imágenes de Container Registry si ajustas los permisos para este depósito de Cloud Storage.

Puedes administrar el control de acceso en Cloud Storage mediante Cloud Console o la herramienta de línea de comandos de gsutil. Consulta la documentación sobre gsutil iam para obtener más información.

Permisos y funciones

En la siguiente tabla, se explican los permisos y las funciones que se requieren para las acciones de Container Registry.

Si otorgas una función para el depósito de almacenamiento individual en lugar de para todo el proyecto de Google Cloud, asegúrate de haber enviado una imagen a Container Registry primero en la ubicación del host deseada para que exista el depósito de almacenamiento subyacente.

Acción Permisos Función Título de la función
Envío (lectura y escritura)

storage.buckets.create

storage.buckets.delete

storage.buckets.get

storage.buckets.list

storage.buckets.update

storage.objects.create

storage.objects.delete

storage.objects.get

storage.objects.list

storage.objects.update

roles/storage.admin Administrador de almacenamiento
Extracción (solo lectura)

storage.objects.get

storage.objects.list

roles/storage.objectViewer Visualizador de objetos de almacenamiento

Si habilitas el acceso uniforme a nivel del depósito para cualquier depósito de almacenamiento, asegúrate de que todos los usuarios y las cuentas de servicio de Container Registry tengan establecidas las funciones anteriores explícitamente. En este caso, es posible que las funciones de propietario y editor por sí solas no otorguen los permisos necesarios.

Otorgar acceso a un registro para usuarios y otros proyectos

Para otorgar permisos a usuarios específicos o clústeres de contenedores que se ejecutan en otros proyectos para extraer imágenes de un registro, debes otorgar permiso de lectura en el depósito subyacente de Cloud Storage.

El depósito que respalda tus imágenes tendrá un [BUCKET_NAME] con la siguiente forma:

  • artifacts.[PROJECT-ID].appspot.com para las imágenes enviadas a un registro en el host gcr.io, o
  • [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com, donde:

    • [PROJECT-ID] es el ID de tu proyecto de Google Cloud Console.
    • [STORAGE-REGION] es la ubicación del depósito de almacenamiento:
      • us para los registros en el host us.gcr.io
      • eu para los registros en el host eu.gcr.io
      • asia para los registros en el host asia.gcr.io

Puedes otorgar permiso de lectura en el depósito subyacente de Cloud Storage mediante Google Cloud Console o la línea de comandos.

Console

  1. Asegúrate de haber enviado una imagen a Container Registry para que exista el depósito de almacenamiento subyacente.
  2. Visita la página de Cloud Storage en Cloud Console.
  3. Haz clic en el vínculo artifacts.[PROJECT-ID].appspot.com o [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com para el depósito. Aquí, [PROJECT-ID] es el ID del proyecto de Google Cloud del proyecto que aloja Container Registry y [STORAGE-REGION] es la multirregión (asia, eu, o us ) del registro que aloja la imagen.

  4. Selecciona la pestaña Permisos.

  5. Haz clic en Agregar miembros.

  6. En el menú que aparece, completa el campo Miembros con las direcciones de correo electrónico de los usuarios que necesitan permiso de lectura, separadas por comas. Estas direcciones de correo electrónico pueden ser de los siguientes tipos:

    • una Cuenta de Google (por ejemplo, someone@example.com)
    • una cuenta de servicio de Cloud IAM
    • la cuenta de servicio predeterminada de Compute Engine de otro proyecto Google Kubernetes Engine utiliza esta cuenta para extraer los clústeres de imágenes de contenedor de forma predeterminada. Tiene el formato [PROJECT_NUMBER]-compute@developer.gserviceaccount.com, donde [PROJECT-NUMBER] es el número del proyecto de Google Cloud que ejecuta el clúster de Google Kubernetes Engine.
  7. En la categoría Almacenamiento del menú desplegable Seleccionar una función, selecciona Visualizador de objetos de almacenamiento.

  8. Haga clic en Add.

Este procedimiento otorga al usuario permiso de lectura para todo el depósito.

gsutil

  1. Asegúrate de haber enviado una imagen a Container Registry para que exista el depósito de almacenamiento subyacente.
  2. Ejecuta el siguiente comando en el shell o la ventana de la terminal:

    gsutil iam ch [TYPE]:[EMAIL-ADDRESS]:objectViewer gs://[BUCKET_NAME]
        

    Donde:

    • [TYPE] puede ser una de las siguientes opciones:
      • serviceAccount, si [EMAIL-ADDRESS] especifica una cuenta de servicio
      • user, si [EMAIL-ADDRESS] es una Cuenta de Google
    • [EMAIL-ADDRESS] puede ser una de las siguientes opciones:
      • una Cuenta de Google (por ejemplo, someone@example.com)
      • una cuenta de servicio de Cloud IAM
      • la cuenta de servicio predeterminada de Compute Engine de otro proyecto Google Kubernetes Engine utiliza esta cuenta para extraer los clústeres de imágenes de contenedor de forma predeterminada. Tiene el formato [PROJECT_NUMBER]-compute@developer.gserviceaccount.com, donde [PROJECT-NUMBER] es el número del proyecto de Google Cloud que ejecuta el clúster de Google Kubernetes Engine.
    • [BUCKET_NAME] es el nombre del depósito de Cloud Storage que aloja las imágenes, como se describió anteriormente.

El comando gsutil iam ch cambia los permisos de IAM del depósito de almacenamiento en el que se aloja el registro. Si otorgas permisos objectViewer a una cuenta, esta podrá extraer imágenes del registro.

Para las cuentas de servicio, también debes configurar el permiso de acceso de almacenamiento.

  • Para configurar permisos de solo lectura, ejecuta el siguiente comando:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
        
  • Para configurar permisos de lectura y escritura, ejecuta el siguiente comando:

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
        

Consulta cómo usar Container Registry con Google Cloud para obtener más información.

Entrega de imágenes públicamente

Se puede acceder públicamente a Container Registry si el depósito de almacenamiento subyacente de la ubicación del host es de acceso público. Dentro de un proyecto, o todas las imágenes de todas las ubicaciones del host son públicas o ninguna lo es. En el host de un proyecto, no es posible entregar públicamente solo imágenes específicas. Si tienes imágenes específicas que quieres hacer públicas, haz lo siguiente:

  • Asegúrate de mantenerlas en una ubicación del host independiente que vayas a hacer pública o
  • crea un proyecto nuevo para guardar las imágenes de acceso público.

Para entregar imágenes de contenedor públicamente, haz que el depósito de almacenamiento subyacente del repositorio sea de acceso público mediante estos pasos:

Console

  1. Asegúrate de haber enviado una imagen a Container Registry para que exista el depósito de almacenamiento subyacente.

  2. Abre la página de Container Registry en Cloud Console.

    Abrir la página de Container Registry

  3. En el panel izquierdo, haz clic en Configuración.

  4. En la página Configuración, en Acceso público, activa o desactiva la visibilidad como Pública o Privada. Esta configuración controla el acceso al depósito de almacenamiento subyacente.

    Cuando la visibilidad del host es pública, todas las imágenes de tu proyecto de Google Cloud que se encuentran en esa ubicación del host son de acceso público.

gsutil

  1. Asegúrate de haber enviado una imagen a Container Registry para que exista el depósito de almacenamiento subyacente.

  2. Busca el nombre del depósito de Cloud Storage para ese registro. Para ello, enumera los depósitos:

    gsutil ls
        

    La URL del depósito de Container Registry aparecerá como gs://artifacts.[PROJECT-ID].appspot.com o gs://[STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com, donde:

    • [PROJECT-ID] es el ID de tu proyecto de Google Cloud Console. Los proyectos con permiso de dominio tendrán el nombre de dominio como parte del ID del proyecto.
    • [STORAGE-REGION] es la ubicación del depósito de almacenamiento:
      • us para los registros en el host us.gcr.io
      • eu para los registros en el host eu.gcr.io
      • asia para los registros en el host asia.gcr.io
  3. Para hacer que el depósito de almacenamiento de Container Registry sea de acceso público, ejecuta el siguiente comando. Este comando hará que todas las imágenes del depósito sean de acceso público.

    gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
        

    Donde:

    • gs://[BUCKET_NAME] es la URL del depósito de Container Registry.

Extrae una imagen de acceso público

Cuando Container Registry es de acceso público, cualquiera puede extraer sus imágenes. Para obtener instrucciones, consulta cómo extraer imágenes de un registro.

Revoca permisos

Console

  1. Visita la página de Cloud Storage en Cloud Console.
  2. Haz clic en el vínculo artifacts.[PROJECT-ID].appspot.com o [STORAGE-REGION].artifacts.[PROJECT-ID].appspot.com para el depósito. Aquí, [PROJECT-ID] es el ID del proyecto de Google Cloud del proyecto que aloja Container Registry y [STORAGE-REGION] es la multirregión (asia, eu, o us ) del registro que aloja la imagen.

  3. Selecciona la pestaña Permisos.

  4. Haz clic en el ícono de papelera ubicado junto a cualquier miembro que desees quitar.

gsutil

Ejecuta el siguiente comando en el shell o la ventana de la terminal:

gsutil iam ch -d [MEMBER] gs://[BUCKET_NAME]
    

Donde:

  • [MEMBER] puede ser una de las siguientes opciones:
    • user:[EMAIL_ADDRESS] para una Cuenta de Google
    • serviceAccount:[EMAIL_ADDRESS] para una cuenta de servicio de Cloud IAM
    • allUsers para revocar el acceso público
  • [BUCKET_NAME] es el nombre del depósito deseado