Administra el acceso a imágenes personalizadas

Para permitir que los usuarios creen, borren, usen o compartan tus imágenes personalizadas, debes otorgarles las funciones de administración de identidades y accesos (IAM) adecuadas. Usa IAM para lo siguiente:

Para obtener información general sobre cómo otorgar acceso a los recursos de Compute Engine, consulta Administra el acceso a los recursos de Compute Engine. Si quieres obtener información sobre IAM, consulta la documentación de IAM.

Antes de comenzar

Limitaciones

No puedes otorgar a un usuario la función allUsers en las imágenes.

Otorga permisos para crear imágenes personalizadas

Puedes otorgar a los usuarios la capacidad de crear imágenes personalizadas en la organización o el proyecto.

Compute Engine ofrece la función predefinida de administrador de almacenamiento, que puedes asignar a los usuarios a fin de habilitarlos a crear, borrar y administrar recursos relacionados con el almacenamiento, como las instantáneas, las imágenes y los discos. Si necesitas una función que solo permita la creación de imágenes, debes crear una función personalizada. En la función personalizada, incluye los siguientes permisos según sea necesario:

  • compute.images.create para crear imágenes nuevas
  • compute.images.list para mostrar las imágenes del proyecto
  • compute.disks.use para las imágenes que se creen desde un disco
  • compute.disks.list para que los usuarios puedan ver una lista de discos del proyecto

Otorgar al usuario la posibilidad de crear imágenes personalizadas dentro de la organización implica que las pueda crear en todos los proyectos que formen parte de esta.

Console

  1. En Google Cloud Console, ve a la página IAM y administración de la organización o el proyecto.

    Ir a IAM y administración

  2. Haz clic en el botón Agregar para agregar un miembro nuevo.

  3. En el campo Miembros nuevos, ingresa la dirección de correo electrónico de la identidad a la que deseas otorgar acceso. Por ejemplo:

    • Correo electrónico de la Cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Selecciona una función, elige Compute Engine > Administrador de almacenamiento de Compute o selecciona una función personalizada en caso de que hayas creado una.

  5. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  6. Guarda los cambios.

gcloud

Para otorgar la función roles/compute.storageAdmin a nivel de organización, usa este comando:

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

Para otorgar la función roles/compute.storageAdmin a nivel de proyecto, usa este comando:

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

Reemplaza los siguientes elementos:

  • organization-id o project-id: Es el ID de la organización o el ID del proyecto, por ejemplo, my-organization-1 o my-project-1.
  • member: Es una identidad válida a la que deseas otorgar la función. 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

API

Para modificar una política de IAM directamente a través de la API, haz lo siguiente:

  1. Lee la política existente con el método getIamPolicy. Para los proyectos, usa la siguiente URL y reemplaza project-id por el ID del proyecto. Por ejemplo, my-project-1.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

    Para las organizaciones, usa la siguiente URL y reemplaza organization-id por el ID numérico de 12 dígitos de la organización. Por ejemplo, 123456578920.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/organization-id:getIamPolicy

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

  2. Edita la política con un editor de texto para agregar o quitar miembros y sus funciones asociadas. Por ejemplo, para otorgar la función roles/compute.storageAdmin a 1email@example.com`, agrega la siguiente vinculación nueva a la política:

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

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    Reemplaza project-id por el ID del proyecto. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

Otorgar permisos para borrar imágenes personalizadas

Según tus necesidades, puedes otorgar permiso a los usuarios para realizar las siguientes acciones:

  • Borrar una imagen específica
  • Borrar imágenes que pertenezcan a un proyecto específico
  • Borrar imágenes de cualquier proyecto dentro de una organización

Si otorgas permiso a nivel de proyecto, los usuarios podrán borrar todas las imágenes que pertenezcan a ese proyecto. Si otorgas permiso a nivel de organización, el usuario podrá borrar cualquier imagen que pertenezca a esa organización, sin importar el proyecto.

Compute Engine ofrece la función predefinida de administrador de almacenamiento, que puedes asignar a los usuarios a fin de habilitarlos a crear, borrar y administrar recursos relacionados con el almacenamiento, como las instantáneas, las imágenes y los discos. Si necesitas una función que solo permita la eliminación de imágenes, debes crear una función personalizada. En la función personalizada, incluye los siguientes permisos según sea necesario:

  • compute.images.delete para borrar imágenes
  • compute.images.list para mostrar las imágenes del proyecto o la organización, si es necesario
  • compute.images.get para obtener las imágenes

Console

A fin de otorgar permiso para borrar imágenes específicas, sigue estos pasos:

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

    Ir a Imágenes

  2. Selecciona las imágenes a las que deseas otorgar permisos.

  3. A la derecha, haz clic en Mostrar panel de información para expandir la columna de permisos.

  4. Haz clic en Agregar miembros para agregar uno o más miembros.

  5. En el campo Miembros nuevos, ingresa la dirección de correo electrónico de la identidad con la que deseas compartir la imagen. Por ejemplo:

    • Correo electrónico de la Cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  6. En la lista Función, ve a Compute Engine y selecciona Administrador de almacenamiento o selecciona una función personalizada de la lista Personalizada.

  7. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  8. Guarda los cambios.

A fin de otorgar permiso para borrar imágenes de un proyecto o una organización, sigue estos pasos:

  1. Ve a la página IAM y administración de la organización o el proyecto.

    Ir a IAM y administración

  2. En la parte superior de la página, haz clic en el botón Agregar.

  3. En el campo Miembros nuevos, ingresa la dirección de correo electrónico de la identidad a la que deseas otorgar acceso. Por ejemplo:

    • Correo electrónico de la Cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Función, ve a Compute Engine y selecciona Administrador de almacenamiento o selecciona una función personalizada de la lista Personalizada.

  5. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  6. Guarda los cambios.

gcloud

A fin de otorgar a los usuarios permisos para borrar imágenes a nivel de organización, usa este comando:

gcloud organizations add-iam-policy-binding organization-id \
    --member='member' \
    --role='role'

A fin de otorgar permisos para borrar imágenes a nivel de proyecto, usa este comando:

gcloud projects add-iam-policy-binding project-id \
    --member='member' \
    --role='role'

A fin de otorgar permisos para borrar una imagen específica, usa este comando:

gcloud compute images add-iam-policy-binding image-name \
    --member='member' \
    --role='role'

Reemplaza los siguientes elementos:

  • organization-id, project-id o image-name: Es el ID numérico de 12 dígitos de la organización, el ID del proyecto o el nombre de la imagen, por ejemplo, 123456578920, my-project-1 o my-custom-image.
  • member: Es una identidad válida a la que deseas otorgar la función. 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: Es la función que se asigna a esta identidad, por ejemplo, roles/compute.storageAdmin o una función personalizada, como roles/customImageDeletionRole.

API

A fin de otorgar permisos para borrar imágenes a través de la API, sigue estos pasos:

  1. Lee la política existente con el método getIamPolicy correspondiente del recurso. Para proyectos, usa la siguiente URL:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

    Reemplaza project-id por el ID del proyecto.

    Para las organizaciones, usa lo siguiente:

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/organization-id:getIamPolicy

    Reemplaza organization-id por el ID numérico de 12 dígitos de la organización.

    Para una imagen específica, usa lo siguiente:

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy

    Reemplaza project-id por el ID del proyecto y image-name por el nombre de la imagen.

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

  2. Edita la política con un editor de texto para agregar o quitar miembros y sus funciones asociadas. Agrega usuarios con el formato user|group|serviceAccount:email o domain:domain:

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

    Por ejemplo, para otorgar roles/compute.storageAdmin a user:email@example.com, agrega la siguiente vinculación nueva a la política:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.storageAdmin"
    }
    
  3. Escribe la política actualizada con setIamPolicy(). Por ejemplo:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    Reemplaza project-id por el ID del proyecto. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

Comparte imágenes personalizadas dentro de una organización

Si tu proyecto pertenece a una organización, esta puede tener otros proyectos con distintos niveles de acceso a más proyectos. Cuando creas imágenes personalizadas, las puedes compartir con los usuarios de otros proyectos que formen parte de la organización.

Compute Engine predefine las siguientes funciones de IAM seleccionadas que puedes usar para administrar imágenes:

  • roles/compute.imageUser: Permiso para mostrar, leer y usar imágenes en las solicitudes, sin tener permisos adicionales sobre la imagen.
  • roles/compute.storageAdmin: Permisos para crear, modificar y borrar instantáneas, imágenes y discos.

Como alternativa, también puedes crear tu propia función de IAM personalizada.

Como práctica recomendada, Google sugiere mantener todas las imágenes personalizadas en un único proyecto dedicado a alojar solo estas imágenes. Esto facilita la administración de esas imágenes y te permite que equipos específicos puedan acceder solo a las imágenes que necesitan. También puedes otorgar a los equipos acceso a todo el proyecto de imagen, pero no lo recomendamos porque se infringe el principio de privilegio mínimo.

En el siguiente ejemplo, se muestra cómo agregar un grupo para que los usuarios de este tengan acceso a la imagen.

Console

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

    Ir a Imágenes

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

  3. A la derecha, haz clic en Mostrar panel de información para expandir la columna de permisos.

  4. Haz clic en Agregar miembros para agregar uno o más miembros.

  5. En el campo Miembros nuevos, ingresa la dirección de correo electrónico de la identidad con la que deseas compartir la imagen. Por ejemplo:

    • Correo electrónico de la Cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  6. En la lista Función, ve a Compute Engine y selecciona Usuario de imagen o Administrador de almacenamiento, o bien selecciona una función personalizada.

  7. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  8. Guarda los cambios.

Para permitir que los usuarios inicien imágenes personalizadas compartidas desde Cloud Console, también debes agregar a los usuarios al proyecto de imagen como visualizadores del proyecto. Así se garantiza que estas imágenes compartidas aparezcan en la lista de selección de imágenes.

  1. En Google Cloud Console, ve a la página IAM y administración.

    Ir a IAM y administración

  2. En la parte superior de la página, haz clic en el botón AGREGAR.

  3. En el campo Miembros nuevos, ingresa la dirección de correo electrónico de la identidad con la que deseas compartir la imagen. Por ejemplo:

    • Correo electrónico de la Cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Función, ve a Proyecto y selecciona Visualizador.

  5. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  6. Guarda los cambios.

gcloud

Con la herramienta de línea de comandos de gcloud, actualiza la política de IAM para una imagen específica.

gcloud compute images add-iam-policy-binding image-name \
    --member='member' \
    --role='role'

Reemplaza la siguiente información:

  • image-name: Es el nombre de la imagen. Por ejemplo, custom-centos-8.
  • member: Es una identidad válida a la que deseas otorgar la función. 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 es la función que se debe asignar a esta identidad, como roles/compute.imageUser, roles/compute.storageAdmin o una función personalizada.

Como alternativa, a fin de que los usuarios puedan ver estas imágenes compartidas en sus solicitudes images.list, agrégalos al proyecto de imagen como visualizadores del proyecto. Si no es necesario que los usuarios vean la lista de imágenes compartidas, puedes omitir este paso.

gcloud projects add-iam-policy-binding project-id \
    --member='member' \
    --role='roles/viewer'

API

Para modificar una política de IAM directamente a través de la API, haz lo siguiente:

  1. Lee la política existente con el método getIamPolicy correspondiente del recurso.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto al que pertenece esta imagen.
    • image-name: Es el nombre de la imagen.

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

  2. Edita la política con un editor de texto para agregar o quitar usuarios y sus funciones asociadas. Agrega usuarios con el formato user|group|serviceAccount:email o domain:domain:

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

      { "members": [ "user:email@example.com" ], "role":"roles/compute.imageUser" }

  3. Escribe la política actualizada con setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto al que pertenece esta imagen.
    • image-name: Es el nombre de la imagen.

    En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

Como alternativa, a fin de que los usuarios puedan ver estas imágenes compartidas en sus solicitudes images.list, agrégalos al proyecto de imagen como visualizadores del proyecto. Si no es necesario que los usuarios vean la lista de imágenes compartidas, puedes omitir este paso.

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

Comparte imágenes personalizadas entre organizaciones

Crear un catálogo de imágenes personalizadas puede ser útil para compartir imágenes con socios, usuarios o contratistas ajenos a la organización. Sigue estas instrucciones para compartir imágenes con usuarios ajenos a la organización mediante la opción de agregarlos al proyecto como usuarios de imagen.

Console

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

    Ir a Imágenes

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

  3. A la derecha, haz clic en Mostrar panel de información para expandir la columna de permisos.

  4. Haz clic en Agregar miembros para agregar uno o más miembros.

  5. En el campo Miembros nuevos, ingresa la dirección de correo electrónico del grupo con el que deseas compartir la imagen. Por ejemplo, admins@example.com

  6. En la lista Función, ve a Compute Engine y selecciona Usuario de Compute Image.

  7. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  8. Guarda los cambios.

Para permitir que los usuarios inicien imágenes personalizadas compartidas desde Cloud Console, también debes agregarlos al proyecto de imagen como visualizadores del proyecto. Así se garantiza que estas imágenes compartidas aparezcan en la lista de selección de imágenes.

  1. En Google Cloud Console, ve a la página IAM y administración.

    Ir a IAM y administración

  2. En la parte superior de la página, haz clic en el botón Agregar.

  3. En el campo Miembros nuevos, ingresa la dirección de correo electrónico de la identidad con la que deseas compartir la imagen. Por ejemplo, admins@example.com

  4. En la lista Función, ve a Proyecto y selecciona Visualizador.

  5. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  6. Guarda los cambios.

gcloud

Con la herramienta de línea de comandos de gcloud, ejecuta el siguiente comando:

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

Reemplaza la siguiente información:

  • image-name: Es el nombre de la imagen. Por ejemplo, custom-centos-8.
  • member: Es una identidad válida a la que deseas otorgar la función. Por ejemplo, group:admins@example.com.

Como alternativa, a fin de que los usuarios puedan ver estas imágenes compartidas en sus solicitudes images.list, agrégalos al proyecto de imagen como visualizadores del proyecto. Si no es necesario que los usuarios vean la lista de imágenes compartidas, puedes omitir este paso.

gcloud projects add-iam-policy-binding project-id \
    --member='member' \
    --role='roles/viewer'

API

Para modificar la política de IAM de una imagen directamente a través de la API, haz lo siguiente:

  1. Lee la política existente con el método getIamPolicy correspondiente del recurso.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto al que pertenece esta imagen.
    • image-name: Es el nombre de la imagen.

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

  2. Edita la política con un editor de texto para agregar o quitar usuarios y sus funciones asociadas. Agrega usuarios con 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 o domain:example.domain.com. Por ejemplo, para otorgar la función roles/compute.imageUser a email@example.com, agrega lo siguiente:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. Escribe la política actualizada con setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto al que pertenece esta imagen.
    • image-name: Es el nombre de la imagen.

    En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

    Como alternativa, a fin de que los usuarios puedan ver estas imágenes compartidas en sus solicitudes images.list, agrégalos al proyecto de imagen como visualizadores del proyecto. Si no es necesario que los usuarios vean la lista de imágenes compartidas, puedes omitir este paso.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

Comparte imágenes personalizadas de manera pública

Puedes compartir las imágenes personalizadas con todos los usuarios autenticados de Compute Engine, sin importar si forman parte de la organización o el proyecto.

Solo puedes compartir recursos, como imágenes, con los usuarios autenticados; no puedes compartir organizaciones ni proyectos con todos los usuarios autenticados. Esta restricción, junto con la jerarquía de recursos, ayuda a evitar que una organización comparta de manera involuntaria el proyecto entero con todos los usuarios autenticados de Compute Engine.

En el siguiente ejemplo, se muestra cómo otorgar a todos los usuarios autenticados de Compute Engine la función roles/compute.imageUser en una imagen personalizada.

gcloud

Reemplaza image-name en el siguiente comando por el nombre del recurso, por ejemplo, my_image:

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

API

Para modificar una política de IAM directamente a través de la API, haz lo siguiente:

  1. Lee la política existente con el método getIamPolicy. Por ejemplo:

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto al que pertenece esta imagen.
    • image-name: Es el nombre de la imagen.

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

  2. Edita la política con un editor de texto para agregar o quitar miembros y sus funciones asociadas.

    {
      "members": [
        "allAuthenticatedUsers"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. Escribe la política actualizada con setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto al que pertenece esta imagen.
    • image-name: Es el nombre de la imagen.

    En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

Otorga acceso a las imágenes a un grupo de instancias administrado

Compute Engine te permite crear grupos de instancias, ya sean administrados o no administrados. Si creas un grupo de instancias administrado, Compute Engine usa la cuenta de servicio de las API de Google para llamar a la API de Compute Engine y realizar acciones relacionadas con el grupo, como actualizar instancias y volver a crear las que están en mal estado.

Si deseas crear un grupo de instancias administrado mediante una imagen de otro proyecto, otorga la función roles/compute.imageUser a la cuenta de servicio de las API que pertenezca al proyecto en el que se creará el grupo de instancias administrado. Por ejemplo:

  1. En el proyecto A, se quiere crear un grupo de instancias administrado con imágenes que son propiedad del proyecto B.
  2. Desde el proyecto B, se le otorga a la cuenta de servicio del proyecto A la función roles/compute.imageUser.
  3. Ahora en el proyecto A se pueden usar imágenes del proyecto B para crear grupos de instancias administrados.

Después de otorgar la función roles/compute.imageUser, puedes acceder a la imagen desde los otros proyectos mediante la consola o la URL de la imagen cuando creas la plantilla de instancias para el grupo administrado.

Ingresa la dirección de correo electrónico de la cuenta de servicio

Para obtener la dirección de correo electrónico de una cuenta de servicio, sigue los pasos que se indican a continuación:

  1. En Cloud Console, ve a la página IAM del proyecto a cuya cuenta de servicio quieras otorgar acceso.

    Ir a IAM

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

  3. Busca la cuenta de servicio de las API de Google, que tiene la dirección de correo electrónico con el siguiente formato:

    project-number@cloudservices.gserviceaccount.com
    
  4. Toma nota de la dirección de correo electrónico anterior.

Después de recuperar la dirección de correo electrónico de la cuenta de servicio, sigue uno de los vínculos que se indican a continuación:

Otorga a un grupo de instancias administrado acceso a todas las imágenes de un proyecto

Ahora que tienes la dirección de correo electrónico de una cuenta de servicio, puedes agregar esta dirección a otro proyecto y otorgarle la función roles/compute.imageUser.

Console

  1. En Google Cloud Console, ve a la página IAM y administración del proyecto de imagen.

    Ir a IAM y administración

  2. Para agregar un miembro nuevo, haz clic en Agregar.

  3. En el campo Miembros nuevos, agrega la dirección de correo electrónico de la cuenta de servicio.

  4. En la lista Función, ve a Compute y selecciona Usuario de imagen de Compute.

  5. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  6. Haz clic en Guardar.

  7. Vuelve al proyecto de la cuenta de servicio.

Ahora puedes crear una plantilla de instancias basada en una imagen del proyecto de imagen y crear un grupo de instancias administrado basado en la plantilla de instancias.

gcloud

Agrega una cuenta de servicio del proyecto de imagen:

gcloud projects add-iam-policy-binding project-id \
  --member 'serviceAccount:service-account-email' --role 'roles/compute.imageUser'

Reemplaza los siguientes elementos:

  • project-id: Es el ID del proyecto que contiene las imágenes que deseas compartir.
  • service-account-email: Es el correo electrónico de la cuenta de servicio.

Ahora puedes crear una plantilla de instancias basada en una imagen del proyecto de imagen y crear un grupo de instancias administrado basado en la plantilla de instancias.

API

  1. Obtén la política de IAM del proyecto de imagen; para ello, reemplaza project-id por el ID del proyecto de imagen.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

  2. Edita la política con un editor de texto para otorgar la función roles/compute.imageUser a la cuenta de servicio. Por ejemplo:

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:service-account-email"
          ]
        }
      ]
    }
    

    Reemplaza service-account-email por el correo electrónico de la cuenta de servicio.

  3. Escribe la política actualizada:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    Reemplaza project-id por el ID del producto del proyecto de imagen. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

    Ahora puedes crear una plantilla de instancias basada en una imagen del proyecto de imagen y crear un grupo de instancias administrado basado en la plantilla de instancias.

Otorga a un grupo de instancias administrado acceso a imágenes específicas de un proyecto

Ahora que tienes la dirección de correo electrónico de una cuenta de servicio, puedes agregar esta dirección a otro proyecto y otorgarle la función roles/compute.imageUser para ciertas imágenes.

Console

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

    Ir a Imágenes

  2. Selecciona las casillas de verificación que aparecen junto a las imágenes que deseas compartir.

  3. Haz clic en Mostrar panel de información para expandir la columna de permisos.

  4. En el panel Permisos, haz clic en Agregar miembros.

  5. En el campo Miembros nuevos, ingresa el correo electrónico de la cuenta de servicio con la que deseas compartir la imagen. Por ejemplo, test123@example.domain.com

  6. En la lista Función, elige Compute y selecciona Usuario de imagen de Compute.

  7. Opcional: Agrega vinculación de función condicional para controlar aún más el acceso de los usuarios a los recursos de Google Cloud.

  8. Haz clic en Guardar.

  9. Vuelve al proyecto de la cuenta de servicio.

Ahora puedes crear una plantilla de instancias basada en una imagen del proyecto de imagen y crear un grupo de instancias administrado basado en la plantilla de instancias.

gcloud

Para otorgar a una cuenta de servicio acceso a una imagen específica, usa el siguiente comando:

gcloud compute images add-iam-policy-binding image-name \
  --member 'serviceAccount:service-account-email' \
  --role 'roles/compute.imageUser'

Reemplaza la siguiente información:

  • image-name: Es el nombre de la imagen que deseas compartir.
  • service-account-email: Es el correo electrónico de la cuenta de servicio.

Ahora puedes crear una plantilla de instancias basada en una imagen del proyecto de imagen y crear un grupo de instancias administrado basado en la plantilla de instancias.

API

  1. Obtén la política de IAM de una imagen.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto de imagen.
    • image-name: Es el nombre de la imagen que deseas compartir.
  2. Edita la política con un editor de texto para otorgar la función roles/compute.imageUser a la cuenta de servicio. Por ejemplo:

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:service-account-email"
          ]
        }
      ]
    }
    

    Reemplaza service-account-email por el correo electrónico de la cuenta de servicio.

  3. Escribe la política actualizada:

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto de imagen.
    • image-name: Es el nombre de la imagen que deseas compartir.

    En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

    Ahora puedes crear una plantilla de instancias basada en una imagen del proyecto de imagen y crear un grupo de instancias administrado basado en la plantilla de instancias.

Restringe el uso de las imágenes o instantáneas compartidas

Después de compartir las imágenes con otros usuarios, puedes controlar el lugar en el que ellos pueden emplear tales recursos dentro de la organización. Establece la restricción constraints/compute.storageResourceUseRestrictions para definir los proyectos en los que los usuarios pueden usar tus recursos de almacenamiento.

Debes tener permiso para modificar las políticas de tu organización a fin de configurar estas restricciones. Por ejemplo, la función resourcemanager.organizationAdmin tiene permiso para establecer estas restricciones.

  1. Busca el ID de tu organización.

    gcloud organizations list
    
  2. Obtén la configuración de políticas existente para la organización. Reemplaza organization-id por el ID de 12 dígitos de la organización.

    gcloud beta resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization organization-id > org-policy.yaml
    
  3. Abre el archivo org-policy.yaml en un editor de texto y modifica la restricción compute.storageResourceUseRestrictions. Agrega las restricciones que necesites o quita las que ya no necesitas. Cuando termines de editar el archivo, guarda los cambios. Por ejemplo, puedes configurar la siguiente entrada de restricción en el archivo de políticas:

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/organization-id
    
  4. Aplica el archivo policy.yaml a tu organización. Reemplaza organization-id por el ID de 12 dígitos de la organización.

    gcloud beta resource-manager org-policies set-policy \
        --organization organization-id org-policy.yaml
    

Cuando termines de configurar las restricciones en la política de la organización, prueba esas restricciones para asegurarte de que creen las limitaciones que necesites.

Usa imágenes de otro proyecto

Si alguien te otorgó acceso a una o más imágenes de otro proyecto, puedes acceder a estas imágenes en el proyecto si especificas el proyecto de imagen en las solicitudes.

Por ejemplo, para crear una VM con una imagen compartida de otro proyecto, sigue estos pasos:

Console

  1. Ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. Selecciona el proyecto y haz clic en Continuar.
  3. Haz clic en Crear instancia.
  4. Especifica un Nombre para la VM. Consulta Convención de asignación de nombres de recursos.
  5. Opcional: Cambia la Zona para esta VM. Compute Engine aleatoriza la lista de zonas dentro de cada región para fomentar el uso en múltiples zonas.
  6. Selecciona una Configuración de máquina para la VM.
  7. En la sección Disco de arranque, haz clic en Cambiar para configurar tu disco de arranque. Luego, sigue estos pasos:
    1. Selecciona la pestaña Imágenes personalizadas.
    2. Selecciona el proyecto de imagen de la lista desplegable Mostrar imágenes de.
    3. Selecciona la imagen que deseas de la lista desplegable Imágenes.
    4. Haga clic en Seleccionar.
  8. Para permitir el tráfico HTTP o HTTPS a la VM, selecciona Permitir tráfico HTTP o Permitir tráfico HTTPS.

    Cloud Console agrega una etiqueta de red a tu VM y crea la regla de firewall de entrada correspondiente que permite todo el tráfico entrante en tcp:80 (HTTP) o tcp:443 (HTTPS). La etiqueta de red asocia la regla de firewall con la VM. Para obtener más información, consulta la Descripción general de las reglas de firewall en la documentación de la nube privada virtual.

  9. Haz clic en Crear para crear e iniciar la VM.

gcloud

Crea una VM con el comando gcloud compute instances create command y usa las marcas --image y --image-project para especificar el nombre de la imagen y el proyecto donde la imagen reside:

 gcloud compute instances create VM_NAME \
        --image=IMAGE \
        --image-project=IMAGE_PROJECT
    

Reemplaza lo siguiente:

  • VM_NAME: Es el nombre de la VM nueva.
  • IMAGE: Es el nombre de la imagen
  • IMAGE_PROJECT: Es el proyecto al que pertenece la imagen.

Si el comando se ejecuta con éxito, gcloud responde con las propiedades de la VM nueva:

    Created [https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-b/instances/example-instance].
    NAME                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    example-instance     us-central1-b  e2-standard-2               10.240.0.4   104.198.53.60  RUNNING

API

Sigue las instrucciones de la API para crear una VM a partir de una imagen pública, pero especifica el campo image en el cuerpo de la solicitud. Para agregar discos en blanco, no especifiques un origen de la imagen. De manera opcional, puedes especificar las propiedades diskSizeGb, diskType y labels.

    [...
    image: "projects/PROJECT_ID/global/images/IMAGE_NAME
    {
     "initializeParams": {
        "diskSizeGb": "SIZE_GB",
        "sourceImage": "IMAGE"
           }
     }
     ...]

Reemplaza lo siguiente:

  • PROJECT_ID: Proyecto que contiene la imagen
  • IMAGE_NAME: Imagen de origen
  • SIZE_GB: Es el tamaño del disco
  • IMAGE: Imagen de origen para el disco que no es de arranque
  • Para los discos en blanco, no especifiques un origen de la imagen.

También puedes crear discos persistentes de arranque basados en imágenes de otro proyecto. Para obtener información sobre cómo crear un disco de arranque a partir de una imagen, consulta Crea un disco de arranque persistente independiente.

Revoca el acceso a las imágenes compartidas

Una vez que un usuario ya no necesita acceder a tus recursos de Compute Engine, puedes revocar su acceso mediante Google Cloud Console, la herramienta de línea de comandos de gcloud o la API de Compute Engine.

Console

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

    Ir a Imágenes

  2. Selecciona las casillas de verificación que están junto a las imágenes que deseas actualizar.

  3. Haz clic en Mostrar panel de información para expandir la columna de permisos.

  4. Expande la función de la que deseas quitar usuarios.

  5. Haz clic en  Borrar para quitar un usuario de esa función.

gcloud

Para quitar un usuario de una función en una imagen, usa el subcomando remove-iam-policy-binding con las marcas --member y --role.

gcloud compute images remove-iam-policy-binding image-name \
    --member='member' \
    --role='role'

Reemplaza los siguientes elementos:

  • image-name: Es el nombre de la imagen. Por ejemplo, my_image.
  • member: Es la identidad que deseas quitar. 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: Es la función de la que deseas quitar la identidad.

Si quieres revocar el acceso a un recurso que, por el momento, se encuentra en versión Beta, usa un comando gcloud beta compute en su lugar.

API

Para modificar una política de IAM directamente a través de la API, haz lo siguiente:

  1. Lee la política existente con el método getIamPolicy correspondiente del recurso.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto al que pertenece esta imagen.
    • image-name: Es el nombre de la imagen.

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

  2. Edita la política con un editor de texto para quitar los miembros de las funciones asociadas.

  3. Escribe la política actualizada con setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/global/images/image-name:setIamPolicy

    Reemplaza los siguientes elementos:

    • project-id: Es el ID del proyecto al que pertenece esta imagen.
    • image-name: Es el nombre de la imagen.

      En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

¿Qué sigue?