En esta página, se describen los permisos para controlar el acceso a Container Registry.
Después de configurar los permisos, puedes configurar la autenticación para los clientes de Docker que usas para enviar y extraer imágenes.
Si usas Artifact Analysis para trabajar con metadatos de contenedores, como vulnerabilidades encontradas en las imágenes, consulta la documentación de Artifact Analysis para obtener información sobre cómo otorgar acceso para ver o administrar metadatos.
Antes de comenzar
Verifica que tengas permisos para administrar usuarios. Debes tener permisos en una de las siguientes funciones:
- Administrador de IAM de proyecto (roles/resourcemanager.projectIamAdmin)
- Administrador de seguridad (roles/iam.securityAdmin)
Como alternativa a otorgar estos roles, puedes usar un rol personalizado o un rol predefinido con los mismos permisos.
Permisos y funciones
Todos los usuarios, las cuentas de servicio y otras identidades que interactúan con Container Registry deben tener los permisos adecuados de Identity and Access Management (IAM) para Cloud Storage.
- Los servicios de Google Cloud que suelen acceder a Container Registry se configuran con permisos predeterminados para los registros en el mismo proyecto de Google Cloud. Si los permisos predeterminados no satisfacen tus necesidades, debes configurar los permisos adecuados.
- Para otras identidades, debes configurar los permisos necesarios.
Controlas el acceso a los hosts de Container Registry con los permisos de Cloud Storage. En la siguiente tabla, se enumeran los roles de Cloud Storage que tienen los permisos que requiere Container Registry.
Se requieren algunos permisos adicionales para ver imágenes de Container Registry con la consola de Google Cloud. Consulta Permisos comunes necesarios para usar la consola de Cloud.
Acceso obligatorio | Rol | Dónde otorgar permisos |
---|---|---|
Extrae imágenes (de solo lectura) de un registro existente | Visualizador de objetos de almacenamiento (roles/storage.objectViewer) | Otorga el rol en el bucket de almacenamiento del registro. |
Enviar (escribir) imágenes a un host de registro existente en un proyecto y extraer (leer) imágenes de él | Escritor de depósitos heredados de almacenamiento (roles/storage.legacyBucketWriter) | Otorga el rol en el bucket de almacenamiento del registro. Este permiso solo está disponible a nivel del bucket, no puedes otorgarlo a nivel del proyecto. |
Agrega hosts de registro a los proyectos de Google Cloud y crea los buckets de almacenamiento asociados. | Administrador de almacenamiento (roles/storage.admin) | Otorga el rol a nivel del proyecto |
Para enviar imágenes, se requieren permisos de lectura y escritura de objetos, así como el permiso storage.buckets.get
. El rol de escritor de buckets heredados de Storage incluye los permisos necesarios en un solo rol de Cloud Storage, pero no otorga control total sobre los objetos y buckets de almacenamiento.
El rol de administrador de almacenamiento otorga control total sobre los objetos y los buckets de almacenamiento. Si otorgas este permiso a nivel del proyecto, el principal tendrá acceso a todos los buckets de almacenamiento del proyecto, incluidos los que no usa Container Registry. Considera cuidadosamente qué principales requieren este rol.
- De forma predeterminada, la cuenta de servicio de Cloud Build tiene permisos en el rol de administrador de almacenamiento. Por lo tanto, esta cuenta de servicio puede agregar registros a su proyecto superior con el primer envío y enviar imágenes a los registros existentes en su proyecto superior.
- Si usas Docker o alguna otra herramienta para crear imágenes y enviarlas a un registro, considera agregar registros a tu proyecto con una cuenta que tenga el rol de administrador de almacenamiento más permisivo y, luego, otorga los roles de escritor de bucket heredado de almacenamiento o de visor de objetos de almacenamiento a otras cuentas que necesiten enviar o extraer imágenes.
Para obtener más información sobre las funciones y los permisos de Cloud Storage, consulta la documentación de Cloud Storage.
Otorga permisos de IAM
Container Registry usa depósitos de Cloud Storage como almacenamiento subyacente para las imágenes de contenedor. Para controlar el acceso a tus imágenes, otorga permisos al bucket de un registro.
El primer envío de imagen a un nombre de host agrega el host de registro y su bucket de almacenamiento a un proyecto. Por ejemplo, el primer envío a gcr.io/my-project
agrega el host de registro gcr.io
al proyecto con el
ID del proyecto
my-project
y crea un bucket de almacenamiento para el registro. El nombre del bucket tiene
uno de los siguientes formatos:
artifacts.PROJECT-ID.appspot.com
para las imágenes almacenadas en el hostgcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
para las imágenes almacenadas en otros hosts de registro
Para realizar correctamente este primer envío de imágenes, la cuenta que realiza el envío debe tener permisos en el rol de administrador de almacenamiento.
Después de enviar la imagen inicial a un host de registro, otorgas permisos en el bucket de almacenamiento del registro para controlar el acceso a las imágenes en el registro:
- Escritor de depósitos heredados de Storage para enviar y extraer
- Visualizador de objetos de Storage para extraer solo
Puedes otorgar permiso para un bucket con la consola de Google Cloud o Google Cloud CLI.
Limitaciones y restricciones
Solo puedes otorgar permisos a nivel del bucket de almacenamiento para los hosts de Container Registry.
- Container Registry ignora los permisos establecidos en objetos individuales dentro de un bucket de Cloud Storage.
- No puedes otorgar permisos en repositorios dentro de un registro. Si necesitas un control de acceso más detallado, Artifact Registry proporciona un control de acceso a nivel del repositorio y podría adaptarse mejor a tus necesidades.
- Si habilitas el acceso uniforme a nivel de bucket para cualquier bucket de almacenamiento de Container Registry, debes otorgar permisos de forma explícita a todos los usuarios y cuentas de servicio que accedan a tus registros. En este caso, es posible que las funciones de propietario y editor por sí solas no otorguen los permisos necesarios.
Otorgar permisos
Si el host del registro aún no existe en el proyecto, una cuenta con permisos en el rol de administrador de almacenamiento debe enviar la primera imagen al registro. Esto crea el bucket de almacenamiento para el host del registro.
Cloud Build tiene los permisos necesarios para realizar el envío inicial de la imagen dentro del mismo proyecto. Si envías imágenes con otra herramienta, verifica los permisos de la cuenta de Google Cloud que usas para autenticarte con Container Registry.
Para obtener más información sobre cómo enviar la imagen inicial con Docker, consulta Cómo agregar un registro.
En el proyecto con Container Registry, otorga los permisos adecuados en el bucket de Cloud Storage que usa el host del registro.
Console
- Ve a la página de Cloud Storage en la consola de Google Cloud.
Haz clic en el vínculo
artifacts.PROJECT-ID.appspot.com
oSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
para el bucket.Reemplaza PROJECT-ID por el ID del proyecto de Google Cloud del proyecto que aloja Container Registry y STORAGE-REGION por la multirregión (
asia
,eu
ous
) del registro que aloja la imagen.Selecciona la pestaña Permisos.
Haz clic en Agregar.
En el campo Principales, ingresa las direcciones de correo electrónico de las cuentas que requieren acceso, separadas por comas. Estas direcciones de correo electrónico pueden ser de los siguientes tipos:
- Una Cuenta de Google (por ejemplo,
someone@example.com
) - Un Grupo de Google (por ejemplo,
my-developer-team@googlegroups.com
) Una cuenta de servicio de IAM
Consulta la lista de servicios de Google Cloud que suelen acceder a los registros para encontrar la dirección de correo electrónico de la cuenta de servicio asociada. Si el servicio se ejecuta en un proyecto diferente al de Container Registry, asegúrate de usar la dirección de correo electrónico de la cuenta de servicio en el otro proyecto.
- Una Cuenta de Google (por ejemplo,
En el menú desplegable Seleccionar una función, selecciona la categoría Cloud Storage y, luego, selecciona el permiso correspondiente.
- El Visualizador de objetos de Storage extrae solo las imágenes
- Escritor de depósitos heredados de Storage para enviar y extraer imágenes
Haz clic en Agregar.
gcloud
Ejecuta el siguiente comando para mostrar una lista de los depósitos en el proyecto:
gcloud storage ls
La respuesta se ve como el siguiente ejemplo:
gs://[BUCKET_NAME1]/ gs://[BUCKET_NAME2]/ gs://[BUCKET_NAME3]/ ...
Busca el bucket del host del registro en la lista de buckets que se muestra. El bucket que almacena tus imágenes tiene el nombre BUCKET-NAME en uno de los siguientes formatos:
artifacts.PROJECT-ID.appspot.com
para las imágenes almacenadas en el hostgcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
para las imágenes almacenadas en otros hosts de registro
Dónde
- PROJECT-ID es el ID de tu proyecto de Google Cloud.
- STORAGE-REGION es la ubicación del depósito de almacenamiento:
us
para los registros en el hostus.gcr.io
eu
para los registros en el hosteu.gcr.io
asia
para los registros en el hostasia.gcr.io
Ejecuta el siguiente comando en el shell o la ventana de la terminal:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=TYPE:EMAIL-ADDRESS \ --role=ROLE
Dónde
- BUCKET_NAME es el nombre del depósito de Cloud Storage en el formato
artifacts.PROJECT-ID.appspot.com
oSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
. - TYPE puede ser una de las siguientes opciones:
serviceAccount
, si EMAIL-ADDRESS especifica una cuenta de serviciouser
, si EMAIL-ADDRESS es una Cuenta de Googlegroup
, si EMAIL-ADDRESS es un Grupo de Google.
EMAIL-ADDRESS puede ser uno de los datos siguientes:
- Una Cuenta de Google (por ejemplo,
someone@example.com
) - Un Grupo de Google (por ejemplo,
my-developer-team@googlegroups.com
) Una cuenta de servicio de IAM
Consulta la lista de servicios de Google Cloud que suelen acceder a los registros para encontrar la dirección de correo electrónico de la cuenta de servicio asociada. Si el servicio se ejecuta en un proyecto diferente al de Container Registry, asegúrate de usar la dirección de correo electrónico de la cuenta de servicio en el otro proyecto.
- Una Cuenta de Google (por ejemplo,
ROLE es el rol de Cloud Storage que deseas otorgar.
objectViewer
para extraer imágeneslegacyBucketWriter
envía y extrae imágenes
- BUCKET_NAME es el nombre del depósito de Cloud Storage en el formato
Por ejemplo, este comando otorga a la cuenta de servicio
my-account@my-project.iam.gserviceaccount.com
permisos para enviar y extraer imágenes en el bucketmy-example-bucket
:gcloud storage buckets add-iam-policy-binding gs://my-example-bucket \ --member=serviceAccount:my-account@my-project.iam.gserviceaccount.com \ --role=roles/storage.objectUser
El comando
gcloud storage buckets add-iam-policy-binding
cambia los permisos de IAM del depósito de almacenamiento en el que se aloja el registro. Puedes encontrar ejemplos adicionales en la documentación de la CLI de gcloud.Si estás configurando el acceso para VMs de Compute Engine o nodos de GKE que enviarán imágenes a Container Registry, consulta Configura VMs y clústeres para ver pasos de configuración adicionales.
Configura el acceso público a las imágenes
Se puede acceder públicamente a Container Registry si el bucket 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 de forma pública, sigue estos pasos a fin de que el bucket de almacenamiento subyacente sea de acceso público:
Asegúrate de haber enviado una imagen a Container Registry para que exista el bucket de almacenamiento subyacente.
Busca el nombre del bucket de Cloud Storage para ese registro. Para ello, enumera los depósitos:
gcloud storage ls
La URL del depósito de Container Registry aparecerá como
gs://artifacts.PROJECT-ID.appspot.com
ogs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, donde:- PROJECT-ID es el ID de tu proyecto de Google Cloud. Los proyectos con alcance 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 hostus.gcr.io
eu
para los registros en el hosteu.gcr.io
asia
para los registros en el hostasia.gcr.io
Para hacer que el bucket de almacenamiento de Container Registry sea de acceso público, ejecuta el siguiente comando. Este comando hará que todas las imágenes del bucket sean de acceso público.
gcloud storage buckets add-iam-policy-binding gs://BUCKET-NAME \ --member=allUsers --role=roles/storage.objectViewer
donde:
gs://BUCKET-NAME
es la URL del depósito de Container Registry.
Quita el acceso público a las imágenes
Console
Asegúrate de haber enviado una imagen a Container Registry para que exista el bucket de almacenamiento subyacente.
Abre la página Container Registry en la consola de Google Cloud.
En el panel izquierdo, haz clic en Configuración.
En la página Configuración, en Acceso público, activa o desactiva la visibilidad como Privada. Esta configuración controla el acceso al bucket de almacenamiento subyacente.
gcloud storage
Busca el nombre del bucket de Cloud Storage para ese registro. Para ello, enumera los depósitos:
gcloud storage ls
La URL del depósito de Container Registry aparecerá como
gs://artifacts.PROJECT-ID.appspot.com
ogs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, donde:- PROJECT-ID es el ID de tu proyecto de la consola de Google Cloud. Los proyectos con alcance 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 hostus.gcr.io
eu
para los registros en el hosteu.gcr.io
asia
para los registros en el hostasia.gcr.io
Para quitar el acceso público a tu bucket de almacenamiento, ejecuta el siguiente comando en el shell o la ventana de la terminal:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \ --member=allUsers --role=roles/storage.objectViewer
Donde:
BUCKET-NAME
es el nombre del depósito deseado
Cómo revocar permisos
Sigue estos pasos para revocar los permisos de IAM.
Console
- Visita la página de Cloud Storage en la consola de Google Cloud.
Haz clic en el vínculo
artifacts.PROJECT-ID.appspot.com
oSTORAGE-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
ous
) del registro que aloja la imagen.Selecciona la pestaña Permisos.
Haz clic en el ícono de papelera junto a cualquier director que desees quitar.
gcloud
Ejecuta el siguiente comando en el shell o la ventana de la terminal:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \
--member=PRINCIPAL --all
Donde:
BUCKET-NAME
es el nombre del depósito deseado- PRINCIPAL puede ser una de las siguientes opciones:
user:EMAIL-ADDRESS
para una Cuenta de GoogleserviceAccount:EMAIL-ADDRESS
para una cuenta de servicio de IAMgroup:EMAIL-ADDRESS
para un Grupo de Google.allUsers
para revocar el acceso público
Integrar los servicios de Google Cloud
En la mayoría de las cuentas de servicio de Google Cloud, configurar el acceso a un registro solo requiere otorgar los permisos de IAM adecuados.
Permisos predeterminados para los servicios de Google Cloud
Los servicios de Google Cloud, como Cloud Build o Google Kubernetes Engine, usan una cuenta de servicio predeterminada o un agente de servicio para interactuar con recursos dentro del mismo proyecto.
Debes configurar o modificar los permisos tú mismo si:
- El servicio de Google Cloud se encuentra en un proyecto diferente al de Container Registry.
- Los permisos predeterminados no satisfacen tus necesidades. Por ejemplo, la cuenta de servicio predeterminada de Compute Engine tiene acceso de solo lectura al almacenamiento en el mismo proyecto. Si deseas enviar una imagen de la VM a un registro, debes modificar los permisos de la cuenta de servicio de la VM o autenticarte en el registro con una cuenta que tenga acceso de escritura al almacenamiento.
- Usas una cuenta de servicio personalizada para interactuar con Container Registry
Por lo general, las siguientes cuentas de servicio acceden a Container Registry. La dirección de correo electrónico de la cuenta de servicio incluye el ID o número de proyecto de Google Cloud del proyecto en el que se ejecuta el servicio.
Servicio | Cuenta de servicio | Dirección de correo electrónico | Permisos |
---|---|---|---|
Entorno flexible de App Engine | Cuenta de servicio predeterminada de App Engine | PROJECT-ID@appspot.gserviceaccount.com | Rol de editor: Puede leer y escribir en el almacenamiento. |
Compute Engine | Cuenta de servicio predeterminada de Compute Engine | PROJECT-NUMBER-compute@developer.gserviceaccount.com | Rol de editor, limitado al acceso de solo lectura al almacenamiento |
Cloud Build | Cuenta de servicio de Cloud Build | PROJECT-NUMBER@cloudbuild.gserviceaccount.com | Los permisos predeterminados incluyen la creación de buckets de almacenamiento y el acceso de lectura y escritura al almacenamiento. |
Cloud Run | Cuenta de servicio predeterminada de Compute Engine Es la cuenta de servicio del entorno de ejecución predeterminada para las revisiones. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Rol de editor, limitado al acceso de solo lectura al almacenamiento |
GKE | Cuenta de servicio predeterminada de Compute Engine Es la cuenta de servicio predeterminada de los nodos. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Rol de editor, limitado al acceso de solo lectura al almacenamiento |
Configura VMs y clústeres para enviar imágenes
Compute Engine y cualquier servicio de Google Cloud que use Compute Engine tienen la cuenta de servicio predeterminada de Compute Engine como la identidad predeterminada.
Tanto los permisos de IAM como los permisos de acceso afectan la capacidad de las VM para leer y escribir en el almacenamiento.
- Los permisos de IAM determinan el acceso a los recursos.
- Los permisos de acceso determinan los permisos de OAuth predeterminados para las solicitudes que se realizan a través de gcloud CLI y las bibliotecas cliente en una instancia de VM. Como resultado, los permisos de acceso pueden limitar aún más el acceso a los métodos de la API cuando se autentica con las credenciales predeterminadas de la aplicación.
- Para extraer una imagen privada, la cuenta de servicio de VM debe tener el permiso
read
en el depósito de almacenamiento de la imagen. - Para enviar una imagen privada, la cuenta de servicio de VM debe tener el permiso de acceso
read-write
,cloud-platform
ofull-control
al bucket de almacenamiento de la imagen.
- Para extraer una imagen privada, la cuenta de servicio de VM debe tener el permiso
La cuenta de servicio predeterminada de Compute Engine tiene el rol de Editor de forma predeterminada, que incluye permisos para crear y actualizar recursos para la mayoría de los servicios de Google Cloud. Sin embargo, para la cuenta de servicio predeterminada o una cuenta de servicio personalizada que asocies con una VM, el permiso de acceso predeterminado para los buckets de almacenamiento es de solo lectura. Esto significa que, de forma predeterminada, las VMs no pueden enviar imágenes.
Si solo deseas implementar imágenes en entornos como Compute Engine y GKE, no es necesario que modifiques el permiso de acceso. Si quieres ejecutar aplicaciones en estos entornos que envían imágenes al registro, debes realizar una configuración adicional.
Las siguientes configuraciones requieren cambios en los permisos de IAM o en la configuración del permiso de acceso.
- Envía imágenes desde una VM o un clúster
- Si deseas enviar imágenes, la cuenta de servicio de la instancia de VM debe tener el permiso
storage-rw
en lugar destorage-ro
. - La VM y Container Registry están en proyectos distintos
- Debes otorgar a la cuenta de servicio permisos de IAM para acceder al bucket de almacenamiento que usa Container Registry.
- Ejecuta comandos
gcloud
en las VM - La cuenta de servicio debe tener el permiso
cloud-platform
. Este permiso otorga los permisos para enviar y extraer imágenes, así como para ejecutar comandos degcloud
.
Los pasos para configurar los permisos se encuentran en las siguientes secciones.
Configura permisos para VMs
Para establecer permisos de acceso cuando creas una VM, usa la opción - scopes.
gcloud compute instances create INSTANCE --scopes=SCOPE
Donde
- INSTANCE es el nombre de la instancia de VM.
- SCOPE es el permiso que deseas configurar para la cuenta de servicio de VM:
- Extrae imágenes:
storage-ro
- Extrae y envía imágenes:
storage-rw
- Extrae y envía imágenes, ejecuta comandos de gcloud:
cloud-platform
- Extrae imágenes:
Para cambiar los alcances de una instancia de VM existente, sigue estos pasos:
Configura el permiso de acceso con la opción - scopes.
Detén la instancia de VM. Consulta Detén una instancia.
Cambia el permiso de acceso con el siguiente comando.
gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
Donde
- INSTANCE es el nombre de la instancia de VM.
- SCOPE es el permiso que deseas configurar para la cuenta de servicio de VM:
- Extrae imágenes:
storage-ro
- Extrae y envía imágenes:
storage-rw
- Extrae y envía imágenes, ejecuta comandos de gcloud:
cloud-platform
- Extrae imágenes:
Reinicia la instancia de VM. Consulta Inicia una instancia detenida.
Si deseas usar una cuenta de servicio personalizada para las VMs en lugar de la cuenta de servicio predeterminada, puedes especificar la cuenta de servicio y los permisos de acceso que se usarán cuando crees la VM o modifiques su configuración.
Configura los permisos para clústeres de Google Kubernetes Engine
De forma predeterminada, los clústeres de GKE nuevos se crean con permisos de solo lectura para los depósitos de Cloud Storage.
A fin de configurar el permiso de almacenamiento read-write
cuando creas un clúster de Google Kubernetes Engine, usa la opción --scopes
.
Por ejemplo, el siguiente comando crea un clúster con los alcances bigquery
, storage-rw
y compute-ro
:
gcloud container clusters create example-cluster \
--scopes=bigquery,storage-rw,compute-ro
Para obtener más información sobre los permisos que puedes configurar cuando creas un clúster nuevo, consulta la documentación del comando gcloud container clusters create.
La cuenta de servicio de Container Registry
El agente de servicio de Container Registry actúa en nombre de Container Registry cuando interactúa con los servicios de Google Cloud. El agente de servicio tiene el conjunto mínimo de permisos necesarios si habilitaste la API de Container Registry después del 5 de octubre de 2020. Anteriormente, el agente de servicio tenía el rol de Editor. Para obtener más información sobre el agente de servicio y cómo modificar sus permisos, consulta Cuenta de servicio de Container Registry.
Pruébalo tú mismo
Si es la primera vez que usas Google Cloud, crea una cuenta para evaluar el rendimiento de Container Registry en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
Prueba Container Registry gratis