Gestionar el acceso a imágenes personalizadas


Para permitir que los usuarios creen, eliminen, usen o compartan tus imágenes personalizadas, debes concederles los roles de gestión de identidades y accesos (IAM) adecuados. En este documento se describen los permisos de IAM necesarios para crear y gestionar imágenes personalizadas, así como la forma de concedérselos a los usuarios.

Para obtener información general sobre cómo conceder acceso a los recursos de Compute Engine, consulta el artículo Gestionar el acceso a los recursos de Compute Engine. Para obtener información sobre IAM, consulta la documentación de IAM.

Antes de empezar

  • Consulta la documentación de IAM.
  • Consulta información sobre los roles de gestión de identidades y accesos de Compute Engine, en concreto, el rol de usuario de imagen de Compute (roles/compute.imageUser).
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles obligatorios

Para obtener los permisos que necesitas para gestionar el acceso a imágenes personalizadas, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para gestionar el acceso a imágenes personalizadas. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Para gestionar el acceso a imágenes personalizadas, se necesitan los siguientes permisos:

  • Para dar a los usuarios o a las cuentas de servicio los permisos necesarios para crear y compartir imágenes personalizadas, sigue estos pasos:
    • resourcemanager.projects.getIamPolicy en el proyecto
    • resourcemanager.projects.setIamPolicy en el proyecto
  • Para dar a los usuarios o a las cuentas de servicio los permisos necesarios para eliminar imágenes personalizadas, sigue estos pasos:
    • resourcemanager.projects.getIamPolicy en el proyecto
    • resourcemanager.projects.setIamPolicy en el proyecto
    • compute.images.getIamPolicyen la imagen
    • compute.images.setIamPolicy en la imagen
  • Para revocar el acceso de un usuario o una cuenta de servicio a imágenes personalizadas, sigue estos pasos:
    • resourcemanager.projects.getIamPolicy en el proyecto
    • resourcemanager.projects.setIamPolicy en el proyecto
  • Para crear una instancia con una imagen compartida, sigue estos pasos:
    • compute.instances.create en el proyecto
    • Para usar una imagen personalizada para crear la VM, haz clic en compute.images.useReadOnly en la imagen.
    • Para usar una captura para crear la VM, compute.snapshots.useReadOnly en la captura
    • Para usar una plantilla de instancia para crear la VM, haz clic en compute.instanceTemplates.useReadOnly en la plantilla de instancia.
    • Para asignar una red antigua a la VM, haz lo siguiente: compute.networks.use en el proyecto
    • Para especificar una dirección IP estática para la máquina virtual, compute.addresses.use en el proyecto
    • Para asignar una dirección IP externa a la VM cuando se usa una red antigua, haz lo siguiente: compute.networks.useExternalIp en el proyecto
    • Para especificar una subred para la VM, compute.subnetworks.use en el proyecto o en la subred elegida.
    • Para asignar una dirección IP externa a la VM cuando se usa una red de VPC, compute.subnetworks.useExternalIp en el proyecto o en la subred elegida.
    • Para definir los metadatos de la instancia de VM de la VM: compute.instances.setMetadata en el proyecto,
    • Para definir etiquetas en la máquina virtual, compute.instances.setTags en la máquina virtual
    • Para definir etiquetas de la VM, compute.instances.setLabels en la VM
    • Para definir una cuenta de servicio que use la VM, haz lo siguiente en la VM: compute.instances.setServiceAccount
    • Para crear un disco para la VM compute.disks.create del proyecto, sigue estos pasos:
    • Para adjuntar un disco en modo de solo lectura o de lectura y escritura, haz lo siguiente: compute.disks.use en el disco
    • Para adjuntar un disco en modo de solo lectura, compute.disks.useReadOnly en el disco.

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Limitaciones

En las imágenes, no puedes asignar roles al tipo de miembro especial allUsers.

Conceder permiso para crear imágenes personalizadas

Puedes dar a los usuarios la posibilidad de crear imágenes personalizadas en tu organización o proyecto.

Compute Engine ofrece el rol Administrador de almacenamiento de Compute (roles/compute.storageAdmin) predefinido que puedes asignar a los usuarios para que puedan crear, eliminar y gestionar recursos relacionados con el almacenamiento, como imágenes, discos y capturas. Si necesitas un rol que solo permita crear imágenes, debes crear un rol personalizado. En tu rol personalizado, incluye los siguientes permisos:

  • compute.images.create para crear imágenes nuevas
  • compute.images.list para mostrar las imágenes del proyecto
  • compute.disks.use si la imagen se crea a partir de un disco
  • compute.disks.list si los usuarios necesitan enumerar todos los discos de un proyecto

Si das a un usuario la posibilidad de crear imágenes personalizadas a nivel de organización, podrá crear imágenes personalizadas para cualquier proyecto de la organización.

Consola

  1. En la Google Cloud consola, ve a la página Gestión de identidades y accesos del proyecto o la organización.

    Ir a IAM

  2. Para añadir un miembro, haz clic en Dar acceso.

  3. En el campo Nuevos principales, introduce la dirección de correo de la identidad a la que quieras conceder acceso.

    Por ejemplo:

    • Correo de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidades externo: principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Seleccionar un rol, selecciona Compute Engine > Administrador de almacenamiento de Compute o un rol personalizado si has creado alguno.

  5. Opcional: Para controlar aún más el acceso de los usuarios a los Google Cloud recursos, añade una vinculación de rol condicional.

  6. Guarda los cambios.

gcloud

Para asignar el rol roles/compute.storageAdmin a nivel de organización, usa el comando gcloud organizations add-iam-policy-binding:

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='roles/compute.storageAdmin'

Para asignar el rol roles/compute.storageAdmin a nivel de proyecto, usa el comando gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/compute.storageAdmin'

Haz los cambios siguientes:

  • ORGANIZATION_ID o PROJECT_ID: el ID de la organización o el ID del proyecto. Por ejemplo, my-organization-1 o my-project-1.
  • MEMBER: una identidad válida a la que quieras conceder el rol

    Por ejemplo:

    • Correo de la cuenta de Google: user:user@gmail.com
    • Grupo de Google: group:admins@googlegroups.com
    • Identidad de un proveedor de identidades externo: principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: serviceAccount:server@example.gserviceaccount.com
    • Dominio de Google Workspace: domain:example.com

REST

  1. Lee la política actual con el método getIamPolicy del recurso. En el caso de los proyectos, utiliza el método projects.getIamPolicy.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    Sustituye PROJECT_ID por el ID del proyecto (por ejemplo, my-project-1).

    En el caso de las organizaciones, utiliza el método organizations.getIamPolicy.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    Sustituye ORGANIZATION_ID por el ID de la organización. Por ejemplo, 123456578920.

    Compute Engine devuelve la política actual en la respuesta.

  2. Para añadir o quitar miembros y sus roles asociados, edita la política con un editor de texto. Utiliza el siguiente formato para añadir miembros:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Por ejemplo, para asignar el rol roles/compute.storageAdmin a group:admins@example.com, añade la siguiente vinculación a la política:

    {
     "members": [
       "group:admins@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. Escribe la política actualizada con el método setIamPolicy.

    Por ejemplo, para definir una política a nivel de proyecto, usa el método project.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de gestión de identidades y accesos actualizada del paso anterior.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

    Sustituye PROJECT_ID por el ID del proyecto.

Conceder permisos para eliminar imágenes personalizadas

En función de tus necesidades, puedes dar permiso a los usuarios para que hagan lo siguiente:

  • Eliminar una imagen específica
  • Eliminar imágenes propiedad de un proyecto específico
  • Eliminar imágenes de cualquier proyecto de una organización

Si se conceden permisos a nivel de proyecto, los usuarios podrán eliminar todas las imágenes que pertenezcan a ese proyecto. Si se concede permiso a nivel de organización, el usuario podrá eliminar cualquier imagen que pertenezca a esa organización, independientemente del proyecto.

Compute Engine ofrece el rol predefinido Administrador de almacenamiento de Compute (roles/compute.storageAdmin) que puedes asignar a los usuarios para que puedan crear, eliminar y gestionar recursos relacionados con el almacenamiento, como imágenes, discos y capturas. Si necesitas un rol que solo permita eliminar imágenes, debes crear un rol personalizado. En tu rol personalizado, incluye los siguientes permisos:

  • compute.images.delete para eliminar imágenes
  • compute.images.list si los usuarios necesitan enumerar imágenes en el proyecto o en la organización
  • compute.images.get para obtener las imágenes

Consola

Para dar permiso para eliminar imágenes específicas, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Imágenes.

    Ir a Imágenes

  2. Selecciona las imágenes a las que quieras dar permisos.

  3. Para desplegar la columna de permisos, haz clic en Mostrar panel de información.

  4. Para añadir uno o varios miembros, haz clic en Añadir principal.

  5. En el campo Nuevos principales, introduce la dirección de correo de la identidad con la que quieras compartir la imagen.

    Por ejemplo:

    • Correo de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidades externo: principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  6. En la lista Rol, coloca el puntero sobre Compute Engine y selecciona Administrador de almacenamiento o un rol personalizado de la lista Personalizado.

  7. Opcional: Para controlar aún más el acceso de los usuarios a los Google Cloud recursos, añade una vinculación de rol condicional.

  8. Guarda los cambios.

Para dar permiso para eliminar imágenes de un proyecto o una organización, sigue estos pasos:

  1. Ve a la página Gestión de identidades y accesos del proyecto o la organización.

    Ir a IAM

  2. Haz clic en Conceder acceso.

  3. En el campo Nuevos principales, introduce la dirección de correo de la identidad a la que quieras conceder acceso. Por ejemplo:

    • Correo de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidades externo: principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Rol, coloca el puntero sobre Compute Engine y selecciona Administrador de almacenamiento o un rol personalizado de la lista Personalizado.

  5. Opcional: Para controlar aún más el acceso de los usuarios a los Google Cloud recursos, añade una vinculación de rol condicional.

  6. Guarda los cambios.

gcloud

Para conceder permisos para eliminar imágenes a nivel de organización, usa el gcloud organizations add-iam-policy-binding comando:

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='ROLE'

Para conceder permisos para eliminar imágenes a nivel de proyecto, usa el gcloud projects add-iam-policy-bindingcomando:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='ROLE'

Para dar permisos para eliminar una imagen específica, usa el gcloud compute images add-iam-policy-binding comando:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Haz los cambios siguientes:

  • ORGANIZATION_ID o PROJECT_ID o IMAGE_NAME: el ID de organización numérico de 12 dígitos, el ID de proyecto o el nombre de la imagen. Por ejemplo, 123456578920, my-project-1 o my-custom-image.
  • MEMBER: una identidad válida a la que quieras conceder el rol

    Por ejemplo:

    • Correo de la cuenta de Google: user:user@gmail.com
    • Grupo de Google: group:admins@googlegroups.com
    • Identidad de un proveedor de identidades externo: principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: serviceAccount:server@example.gserviceaccount.com
    • Dominio de Google Workspace: domain:example.com
  • ROLE: el rol que se asignará a esta identidad (por ejemplo, el rol roles/compute.storageAdmin o un rol personalizado como roles/customImageDeletionRole).

REST

  1. Lee la política actual con el método getIamPolicy correspondiente del recurso. En el caso de los proyectos, usa el método projects.getIamPolicy:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    Sustituye PROJECT_ID por el ID del proyecto.

    En el caso de las organizaciones, utiliza el método organizations.getIamPolicy:

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    Sustituye ORGANIZATION_ID por el ID de organización numérico de 12 dígitos.

    Para una imagen específica, usa el método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto
    • IMAGE_NAME: el nombre de la imagen

    Compute Engine devuelve la política actual en la respuesta.

  2. Para añadir o quitar miembros y sus roles asociados, puedes editar la política con un editor de texto. Utiliza el siguiente formato para añadir miembros:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Por ejemplo, para asignar el rol roles/compute.storageAdmin a user:test-email@example.com, añade la siguiente vinculación a la política:

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. Escribe la política actualizada con el método setIamPolicy.

    Por ejemplo, para definir una política a nivel de proyecto, usa el método project.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de gestión de identidades y accesos actualizada del paso anterior.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

    Sustituye PROJECT_ID por el ID del proyecto.

Conceder permisos para compartir imágenes personalizadas en una organización

Si tu proyecto pertenece a una organización, esta puede tener varios proyectos con diferentes niveles de acceso a otros proyectos. Cuando creas imágenes personalizadas, puedes compartirlas con otros usuarios de otros proyectos de la organización.

Compute Engine ofrece los siguientes roles de gestión de identidades y accesos predefinidos que puedes usar para gestionar imágenes:

  • Usuario de imágenes de Compute (roles/compute.imageUser): permiso para enumerar, leer y usar imágenes en tus solicitudes, sin tener otros permisos en la imagen
  • Administrador de Compute Storage (roles/compute.storageAdmin): permisos para crear, modificar y eliminar discos, imágenes e instantáneas

También puedes crear tu propio rol de gestión de identidades y accesos personalizado.

Como práctica recomendada, te sugerimos que guardes todas tus imágenes personalizadas en un único proyecto dedicado a alojarlas. De esta forma, se mejora la gestión de esas imágenes y se puede conceder acceso a equipos específicos solo a las imágenes que necesiten. También puedes conceder acceso a todo el proyecto de imagen a los equipos, pero no lo recomendamos porque infringe el principio de mínimos accesos.

En el ejemplo siguiente se muestra cómo añadir un grupo para que los usuarios de ese grupo tengan acceso a la imagen.

Consola

  1. En la Google Cloud consola, ve a la página Imágenes.

    Ir a Imágenes

  2. Selecciona la imagen que quieras compartir con otros usuarios.

  3. Para desplegar la columna de permisos, haz clic en Mostrar panel de información.

  4. Para añadir uno o varios miembros, haz clic en Añadir principal.

  5. En el campo Nuevos principales, introduce la dirección de correo de la identidad con la que quieras compartir la imagen.

    Por ejemplo:

    • Correo de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidades externo: principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  6. En la lista Rol, coloca el puntero sobre Compute Engine y selecciona Usuario de imagen o Administrador de almacenamiento, o bien selecciona un rol personalizado.

  7. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, añade una vinculación de rol condicional.

  8. Guarda los cambios.

Para permitir que los usuarios lancen imágenes personalizadas compartidas desde la consola Google Cloud , asigna a los usuarios el rol de lector de gestión de identidades y accesos (roles/viewer) del proyecto de imagen. Si asignas este rol, te aseguras de que las imágenes compartidas aparezcan en la lista de selección de imágenes.

  1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

    Ir a IAM

  2. Haz clic en Conceder acceso.

  3. En el campo Nuevos principales, introduce la dirección de correo de la identidad con la que quieras compartir la imagen. Por ejemplo:

    • Correo de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidades externo: principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Rol, coloca el puntero sobre Proyecto y selecciona Lector.

  5. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, añade una vinculación de rol condicional.

  6. Guarda los cambios.

gcloud

Para actualizar la política de gestión de identidades y accesos de una imagen específica, usa el comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Haz los cambios siguientes:

  • IMAGE_NAME: el nombre de la imagen (por ejemplo, custom-centos-8)
  • MEMBER: una identidad válida a la que quieras asignar el rol

    Por ejemplo:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: el rol que se va a asignar a esta identidad, como roles/compute.imageUser o roles/compute.storageAdmin, o un rol personalizado

Opcionalmente, para que los usuarios puedan ver estas imágenes compartidas en sus images.listsolicitudes, concédeles el rol de gestión de identidades y accesos de lector (roles/viewer) para el proyecto de imagen mediante el comando gcloud projects add-iam-policy-binding. Si no quieres que tus usuarios puedan ver la lista de imágenes compartidas, puedes saltarte este paso.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/viewer'

REST

  1. Lee la política actual con el método getIamPolicy del recurso. Por ejemplo, para obtener la política de una imagen específica, usa el método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta imagen
    • IMAGE_NAME: el nombre de la imagen

    Compute Engine devuelve la política actual en la respuesta.

  2. Para añadir o quitar miembros y sus roles asociados, edita la política con un editor de texto. Utiliza el siguiente formato para añadir miembros:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Por ejemplo, para conceder roles/compute.imageUser a test-email@example.com, añade el siguiente enlace a la política:

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. Escribe la política actualizada con el método setIamPolicy. Por ejemplo, para definir una política en una imagen específica, usa el método project.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de gestión de identidades y accesos actualizada del paso anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta imagen
    • IMAGE_NAME: el nombre de la imagen

Si quieres que los usuarios vean estas imágenes compartidas en sus images.listsolicitudes, puedes asignarles el rol de gestión de identidades y accesos Lector (roles/viewer) en el proyecto de imagen mediante el método projects.setIamPolicy. Si no necesitas que tus usuarios puedan ver la lista de imágenes compartidas, puedes saltarte este paso.

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

Conceder permisos para compartir imágenes personalizadas entre organizaciones

Crear un catálogo de imágenes personalizadas puede ser útil para compartir imágenes con partners, usuarios o contratistas ajenos a tu organización. Para compartir tus imágenes con usuarios ajenos a la organización, añádelos como usuarios de imágenes a tu proyecto:

Consola

  1. En la Google Cloud consola, ve a la página Imágenes.

    Ir a Imágenes

  2. Selecciona la imagen que quieras compartir con otros usuarios.

  3. Para desplegar la columna de permisos, haz clic en Mostrar panel de información.

  4. Para añadir uno o varios miembros, haz clic en Añadir principal.

  5. En el campo Nuevos principales, introduce la dirección de correo del grupo con el que quieras compartir la imagen. Por ejemplo, admins@example.com.

  6. En la lista Rol, coloca el puntero sobre Compute Engine y selecciona Usuario de imagen de Compute.

  7. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, añade una vinculación de rol condicional.

  8. Guarda los cambios.

Para permitir que los usuarios lancen imágenes personalizadas compartidas desde la consola Google Cloud , asigna a los usuarios el rol de lector de gestión de identidades y accesos (roles/viewer) del proyecto de imagen. Al conceder este rol, te aseguras de que las imágenes compartidas aparezcan en la lista de selección de imágenes.

  1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

    Ir a IAM

  2. Haz clic en Conceder acceso.

  3. En el campo Nuevos principales, introduce la dirección de correo de la identidad con la que quieras compartir la imagen. Por ejemplo, admins@example.com.

  4. En la lista Rol, coloca el puntero sobre Proyecto y selecciona Lector.

  5. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, añade una vinculación de rol condicional.

  6. Guarda los cambios.

gcloud

Para asignar el rol roles/compute.imageUser a los usuarios, usa el comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='roles/compute.imageUser'

Haz los cambios siguientes:

  • IMAGE_NAME: el nombre de la imagen (por ejemplo, custom-centos-8)
  • MEMBER: una identidad válida a la que quieras asignar el rol (por ejemplo, group:admins@example.com).

Opcionalmente, para que los usuarios puedan ver estas imágenes compartidas en sus images.listsolicitudes, concédeles el rol de gestión de identidades y accesos de lector (roles/viewer) para el proyecto de imagen mediante el comando gcloud projects add-iam-policy-binding. Si no necesitas que tus usuarios puedan ver la lista de imágenes compartidas, puedes saltarte este paso.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/viewer'

REST

  1. Lee la política actual con el método getIamPolicy del recurso. Por ejemplo, para obtener la política de una imagen específica, usa el método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta imagen
    • IMAGE_NAME: el nombre de la imagen

    Compute Engine devuelve la política actual en la respuesta.

  2. Para añadir o quitar miembros y sus roles asociados, puedes editar la política con un editor de texto. Utiliza el siguiente formato para añadir miembros:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Por ejemplo, para conceder roles/compute.imageUser a test-user@example.com, añade el siguiente enlace a la política:

    {
      "members": [
        "user:test-user@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. Escribe la política actualizada con el método setIamPolicy. Por ejemplo, para definir una política en una imagen específica, usa el método images.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de gestión de identidades y accesos actualizada del paso anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta imagen
    • IMAGE_NAME: el nombre de la imagen

    Opcionalmente, para que los usuarios puedan ver estas imágenes compartidas en sus images.list solicitudes, concédeles el rol de gestión de identidades y accesos de lector (roles/viewer) del proyecto de imagen mediante el método projects.setIamPolicy. Si no necesitas que tus usuarios puedan ver la lista de imágenes compartidas, puedes saltarte este paso.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

Conceder permisos para compartir imágenes personalizadas públicamente

Puedes compartir tus imágenes personalizadas con todos los usuarios autenticados de Compute Engine, independientemente de si forman parte de tu organización o proyecto.

Solo puedes compartir recursos, como imágenes, con todos los usuarios autenticados. No puedes compartir proyectos ni organizaciones con todos los usuarios autenticados. Esta restricción, junto con la jerarquía de recursos, ayuda a evitar que una organización comparta por error todo su proyecto con todos los usuarios autenticados de Compute Engine.

En el siguiente ejemplo se muestra cómo asignar el rol Usuario de imagen de Compute (roles/compute.imageUser) a una imagen personalizada para todos los usuarios autenticados de Compute Engine.

gcloud

Para hacer públicas las imágenes, usa el comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='allAuthenticatedUsers' \
    --role='roles/compute.imageUser'

Sustituye IMAGE_NAME por el nombre del recurso (por ejemplo, my_image).

REST

  1. Lee la política actual con el método getIamPolicy. Por ejemplo, para obtener la política de una imagen específica, usa el método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta imagen
    • IMAGE_NAME: el nombre de la imagen

    Compute Engine devuelve la política actual en la respuesta.

  2. Para añadir o quitar miembros y sus roles asociados, edita la política con un editor de texto:

    {
     "members": [
       "allAuthenticatedUsers"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. Escribe la política actualizada con el método setIamPolicy. Por ejemplo, para definir una política en una imagen específica, usa el método images.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de gestión de identidades y accesos actualizada del paso anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta imagen
    • IMAGE_NAME: el nombre de la imagen

Conceder acceso a imágenes a un grupo de instancias gestionado

Compute Engine te permite crear grupos de instancias, ya sean gestionados o sin gestionar. Si creas un grupo de instancias gestionado (MIG), Compute Engine usa el agente de servicio de las APIs de Google para llamar a la API de Compute Engine y realizar acciones relacionadas con el grupo, como recrear instancias incorrectas y actualizar instancias.

Si quieres crear un MIG con una imagen de otro proyecto, otorga el rol Usuario de imagen de Compute (roles/compute.imageUser) a la cuenta de servicio de las APIs del proyecto que crea el MIG. Por ejemplo:

  1. El proyecto A quiere crear un MIG con imágenes propiedad del proyecto B.
  2. El proyecto B concede a la cuenta de servicio del proyecto A el rol Usuario de imagen de Compute.
  3. El proyecto A ahora puede usar imágenes del proyecto B para crear MIGs.

Después de conceder el rol Usuario de imagen de Compute, puedes acceder a la imagen desde los otros proyectos mediante la consola o la URL de la imagen al crear la plantilla de instancia del grupo gestionado.

Obtener la dirección de correo de la cuenta de servicio

  1. En la Google Cloud consola, ve a la página Gestión de identidades y accesos del proyecto cuya cuenta de servicio quieres que tenga acceso.

    Ir a IAM

  2. Si se te solicita, selecciona tu proyecto en la lista.

  3. Busca el agente de servicio de las APIs de Google, que tiene la dirección de correo en el siguiente formato:

    PROJECT_NUMBER@cloudservices.gserviceaccount.com
    

Una vez que hayas obtenido la dirección de correo de la cuenta de servicio, puedes ir a una de las siguientes secciones:

Conceder a un MIG acceso a todas las imágenes de un proyecto

Ahora que tienes la dirección de correo de una cuenta de servicio, puedes añadirla a otro proyecto y concederle el rol Usuario de imagen de Compute (roles/compute.imageUser).

Consola

  1. En la Google Cloud consola, ve a la página Gestión de identidades y accesos del proyecto de imagen.

    Ir a IAM

  2. Para añadir un miembro, haz clic en Dar acceso.

  3. En el campo Nuevos principales, añade la dirección de correo de la cuenta de servicio.

  4. En la lista Rol, coloca el cursor sobre Compute y selecciona Usuario de imagen de Compute.

  5. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, añade una vinculación de rol condicional.

  6. Haz clic en Guardar.

  7. Vuelve al proyecto de la cuenta de servicio.

Ahora puedes crear una plantilla de instancia a partir de una imagen del proyecto de imagen y crear un MIG a partir de la plantilla de instancia.

gcloud

Añade una cuenta de servicio del proyecto de imagen con el comando gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' --role='roles/compute.imageUser'

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto que contiene las imágenes que quieres compartir
  • SERVICE_ACCOUNT_EMAIL: el correo de la cuenta de servicio

Ahora puedes crear una plantilla de instancia a partir de una imagen del proyecto de imagen y crear un MIG a partir de la plantilla de instancia.

REST

  1. Obtén la política de gestión de identidades y accesos del proyecto de imagen con el método projects.getIamPolicy:

     POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
     

    Sustituye PROJECT_ID por el ID del proyecto de la imagen.

  2. Para asignar el rol roles/compute.imageUser a la cuenta de servicio, edita la política con un editor de texto:

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    Sustituye SERVICE_ACCOUNT_EMAIL por el correo de la cuenta de servicio.

  3. Escribe la política actualizada con el projects.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de gestión de identidades y accesos actualizada del paso anterior.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

    Sustituye PROJECT_ID por el ID de producto del proyecto de imagen.

    Ahora puedes crear una plantilla de instancia a partir de una imagen del proyecto de imagen y crear un MIG a partir de la plantilla de instancia.

Conceder a un MIG acceso a imágenes específicas de un proyecto

Ahora que tienes la dirección de correo de una cuenta de servicio, puedes añadirla a otro proyecto y concederle el rol de usuario de imagen de Compute (roles/compute.imageUser) para determinadas imágenes.

Consola

  1. En la Google Cloud consola, ve a la página Imágenes del proyecto de imagen.

    Ir a Imágenes

  2. Seleccione las casillas situadas junto a las imágenes que quiera compartir.

  3. Para desplegar la columna de permisos, haz clic en Mostrar panel de información.

  4. En el panel Permisos, haz clic en Añadir principal.

  5. En el campo Nuevos principales, introduce la dirección de correo de la cuenta de servicio con la que quieras compartir la imagen. Por ejemplo, test123@example.domain.com.

  6. En la lista Rol, elige Compute y selecciona Usuario de imagen de Compute.

  7. Opcional: Para controlar aún más el acceso de los usuarios a los Google Cloud recursos, añade una vinculación de rol condicional.

  8. Haz clic en Guardar.

  9. Vuelve al proyecto de la cuenta de servicio.

Ahora puedes crear una plantilla de instancia a partir de una imagen del proyecto de imagen y crear un MIG a partir de la plantilla de instancia.

gcloud

Para conceder acceso a una imagen específica a una cuenta de servicio, usa el comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' \
    --role='roles/compute.imageUser'

Haz los cambios siguientes:

  • IMAGE_NAME: el nombre de la imagen que quieras compartir
  • SERVICE_ACCOUNT_EMAIL: el correo de la cuenta de servicio

Ahora puedes crear una plantilla de instancia a partir de una imagen del proyecto de imagen y crear un MIG a partir de la plantilla de instancia.

REST

  1. Para obtener la política de gestión de identidades y accesos de una imagen, usa el método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto de la imagen
    • IMAGE_NAME: el nombre de la imagen que quieres compartir
  2. Para asignar el rol roles/compute.imageUser a la cuenta de servicio, edita la política con un editor de texto:

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    Sustituye SERVICE_ACCOUNT_EMAIL por el correo de la cuenta de servicio.

  3. Escribe la política actualizada con el método images.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de gestión de identidades y accesos actualizada del paso anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto de la imagen
    • IMAGE_NAME: el nombre de la imagen que quieres compartir

    Ahora puedes crear una plantilla de instancia a partir de una imagen del proyecto de imagen y crear un MIG a partir de la plantilla de instancia.

Controlar el uso de tus imágenes y capturas compartidas

Después de compartir tus imágenes con otros usuarios, puedes controlar dónde emplean esos recursos en tu organización. Define la restricción constraints/compute.storageResourceUseRestrictions para especificar los proyectos en los que los usuarios pueden usar tus recursos de almacenamiento.

Para definir estas restricciones, debes tener permiso para modificar las políticas de tu organización. Por ejemplo, el resourcemanager.organizationAdmin rol tiene permiso para definir estas restricciones.

  1. Para encontrar el ID de tu organización, usa el comando gcloud organization list:

    gcloud organizations list
    
  2. Para obtener los ajustes de políticas de tu organización, usa el comando gcloud resource-manager org-policies describe:

    gcloud resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization ORGANIZATION_ID > org-policy.yaml
    

    Sustituye ORGANIZATION_ID por tu ID de organización numérico de 12 dígitos.

  3. Abre el archivo org-policy.yaml en un editor de texto y modifica la restricción compute.storageResourceUseRestrictions. Añade las restricciones que necesites o elimina las que ya no quieras. Cuando termines de editar el archivo, guarda los cambios. Por ejemplo, puede definir la siguiente entrada de restricción en su archivo de política:

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/organization-id
    
  4. Aplica el archivo org-policy.yaml a tu organización con el comando gcloud resource-manager org-policies set-policy:

    gcloud resource-manager org-policies set-policy \
       --organization=ORGANIZATION_ID org-policy.yaml
    

    Sustituye ORGANIZATION_ID por tu ID de organización numérico de 12 dígitos.

Cuando termines de configurar las restricciones en tu política de organización, pruébalas para asegurarte de que crean las restricciones que quieres.

Usar imágenes de otro proyecto

Si alguien te da acceso a una o varias imágenes de otro proyecto, puedes acceder a ellas en el proyecto especificando el proyecto de la imagen en tus solicitudes.

Por ejemplo, para crear una instancia con una imagen compartida de otro proyecto, sigue los pasos que se indican en Crear una instancia a partir de una imagen compartida.

También puedes crear volúmenes de disco de arranque a partir de imágenes de otro proyecto. Para obtener información sobre cómo crear un disco de arranque a partir de una imagen, consulta Crear un disco persistente de arranque independiente.

Revocar el acceso a imágenes compartidas

Cuando un usuario ya no necesite acceder a tus recursos de Compute Engine, revoca su acceso mediante la Google Cloud consola, la CLI de Google Cloud o REST.

Consola

  1. En la Google Cloud consola, ve a la página Imágenes del proyecto de imagen.

    Ir a Imágenes

  2. Seleccione las casillas situadas junto a las imágenes que quiera actualizar.

  3. Para desplegar la columna de permisos, haz clic en Mostrar panel de información.

  4. Despliega el rol del que quieras quitar usuarios.

  5. Para quitar un usuario de ese rol, haz clic en Eliminar.

gcloud

Para quitar un usuario de un rol en una imagen, usa el gcloud compute images remove-iam-policy-binding comando con las marcas --member y --role:

gcloud compute images remove-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Haz los cambios siguientes:

  • IMAGE_NAME: el nombre de la imagen (por ejemplo, my_image)
  • MEMBER: la identidad que quieras eliminar

    Debe tener el formato user|group|serviceAccount:email o domain:domain. Por ejemplo:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: el rol del que quieres quitar la identidad

Si vas a revocar el acceso a un recurso que está en fase beta, usa el comando gcloud beta compute.

REST

  1. Lee la política actual con el método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta imagen
    • IMAGE_NAME: el nombre de la imagen

    Compute Engine devuelve la política actual en la respuesta.

  2. Para eliminar miembros y sus roles asociados, edita la política con un editor de texto.

  3. Escribe la política actualizada con el método images.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de gestión de identidades y accesos actualizada del paso anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/global/images/IMAGE_NAME:setIamPolicy
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto al que pertenece esta imagen
    • IMAGE_NAME: el nombre de la imagen

Siguientes pasos