Administrar 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. En este documento, se describen los permisos de IAM necesarios para crear y administrar imágenes personalizadas y cómo otorgarlos a los usuarios.

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

  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras 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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

      Roles obligatorios

      Para obtener los permisos que necesitas para administrar el acceso a las imágenes personalizadas, pídele a tu administrador que te otorgue los siguientes roles de IAM:

      Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

      Estos roles predefinidos contienen los permisos necesarios para administrar el acceso a las imágenes personalizadas. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

      Permisos necesarios

      Se requieren los siguientes permisos para administrar el acceso a las imágenes personalizadas:

      • Para otorgar a los usuarios o a las cuentas de servicio los permisos necesarios para crear y compartir imágenes personalizadas, haz lo siguiente:
        • resourcemanager.projects.getIamPolicy en el proyecto
        • resourcemanager.projects.setIamPolicy en el proyecto
      • Para otorgar a los usuarios o a las cuentas de servicio los permisos necesarios para borrar imágenes personalizadas, haz lo siguiente:
        • 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 las imágenes personalizadas, haz lo siguiente:
        • resourcemanager.projects.getIamPolicy en el proyecto
        • resourcemanager.projects.setIamPolicy en el proyecto
      • Para crear una VM con una imagen compartida, haz lo siguiente:
        • compute.instances.create en el proyecto
        • Para usar una imagen personalizada con el fin de crear la VM, sigue estos pasos: compute.images.useReadOnly en la imagen
        • Si deseas usar una instantánea para crear la VM, sigue estos pasos: compute.snapshots.useReadOnly en la instantánea
        • Para usar una plantilla de instancias a fin de crear la VM, haz lo siguiente: compute.instanceTemplates.useReadOnly en la plantilla de instancias
        • Para asignar una red heredada a la VM: compute.networks.use en el proyecto
        • Si deseas especificar una dirección IP estática para la VM; compute.addresses.use en el proyecto
        • Para asignar una dirección IP externa a la VM cuando se usa una red y punto heredado; compute.networks.useExternalIp en el proyecto
        • A fin de 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
        • A fin de configurar los metadatos de la instancia de VM para la VM y los puntos, sigue estos pasos: compute.instances.setMetadata en el proyecto
        • A fin de configurar etiquetas para la VM y los puntos; compute.instances.setTags en la VM
        • Si deseas configurar etiquetas para la VM, haz lo siguiente: compute.instances.setLabels en la VM
        • A fin de configurar una cuenta de servicio para que la VM la usecompute.instances.setServiceAccount en la VM
        • Si deseas crear un disco nuevo para la VM: compute.disks.create en el proyecto
        • Para conectar un disco existente en modo de solo lectura o de lectura y escritura, haz lo siguiente: compute.disks.use en el disco
        • Para conectar un disco existente en modo de solo lectura y dos puntos, sigue estos pasos: compute.disks.useReadOnly en el disco

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

      Limitaciones

      En las imágenes, no puedes otorgar funciones al tipo de membresía especial allUsers.

      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 de administrador de Compute Storage predefinida (roles/compute.storageAdmin) que puedes asignar a los usuarios a fin de que puedan crear, borrar y administrar. Recursos relacionados con el almacenamiento, incluidas las imágenes, las instantáneas y los discos. Si necesitas una función que permita solo la creación de imágenes, debes crear una función personalizada. En la función personalizada, se incluyen los siguientes permisos:

      • 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 los usuarios que deban enumerar todos los discos de un proyecto

      Si le das a un usuario la capacidad de crear imágenes personalizadas a nivel de la organización, este puede crear imágenes personalizadas para cualquier proyecto dentro de la organización.

      Console

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

        Ir a IAM

      2. Para agregar un miembro nuevo, haz clic en Otorgar acceso.

      3. En el campo Principales nuevas, 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: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, agrega vinculaciones de funciones condicionales.

      6. Guarde los cambios.

      gcloud

      Para otorgar la función 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 otorgar la función 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'
      

      Reemplaza lo siguiente:

      • 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: Una identidad válida a la que deseas otorgar la función.

        Por ejemplo:

        • Correo electrónico de la Cuenta de Google: user:user@gmail.com
        • Grupo de Google: group:admins@googlegroups.com
        • Cuenta de servicio: serviceAccount:server@example.gserviceaccount.com
        • Dominio de Google Workspace: domain:example.com

      REST

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

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

        Reemplaza PROJECT_ID por el ID del proyecto para my-project-1.

        Para las organizaciones, usa el método organizations.getIamPolicy.

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

        Reemplaza ORGANIZATION_ID por el ID del proyecto para 123456578920.

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

      2. Para agregar o quitar miembros y sus funciones asociadas, edita la política con un editor de texto. Usa el siguiente formato para agregar miembros:

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

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

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

        Por ejemplo, para establecer una política a nivel de proyecto, usa el método project.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

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

        Reemplaza PROJECT_ID por el ID del proyecto.

      Otorga 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 de administrador de almacenamiento de Compute predefinida (roles/compute.storageAdmin), 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 permita solo la eliminación de imágenes, debes crear una función personalizada. En la función personalizada, se incluyen los siguientes permisos:

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

      Console

      A fin de otorgar permiso para borrar imágenes específicas, haz lo siguiente:

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

        Ir a Imágenes

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

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

      4. Para agregar uno o más miembros, haz clic en Agregar principal.

      5. En el campo Principales nuevas, 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, mantén el puntero sobre Compute Engine y selecciona Administrador de almacenamiento o selecciona una función personalizada de la lista personalizada.

      7. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, agrega vinculaciones de funciones condicionales.

      8. Guarde los cambios.

      A fin de otorgar permiso para borrar imágenes de un proyecto o una organización, haz lo siguiente:

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

        Ir a IAM

      2. Haz clic en Grant access.

      3. En el campo Principales nuevas, 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, mantén el puntero sobre Compute Engine y selecciona Administrador de almacenamiento o selecciona una función personalizada de la lista personalizada.

      5. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, agrega vinculaciones de funciones condicionales.

      6. Guarde los cambios.

      gcloud

      Si deseas otorgar permisos para borrar imágenes 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='ROLE'
      

      Si deseas otorgar permisos para borrar imágenes a nivel de proyecto, usa el comando gcloud projects add-iam-policy-binding:

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

      Si deseas otorgar permisos para borrar 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'
      

      Reemplaza lo siguiente:

      • 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: Una identidad válida a la que deseas otorgar la función.

        Por ejemplo:

        • Correo electrónico de la Cuenta de Google: user:user@gmail.com
        • Grupo de Google: group:admins@googlegroups.com
        • Cuenta de servicio: serviceAccount:server@example.gserviceaccount.com
        • Dominio de Google Workspace: domain:example.com
      • ROLE: Es la función que se asigna a esta identidad, por ejemplo, la función roles/compute.storageAdmin o una función personalizada, como roles/customImageDeletionRole.

      REST

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

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

        Reemplaza PROJECT_ID por el ID del proyecto.

        Para las organizaciones, usa el método organizations.getIamPolicy:

        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 el método images.getIamPolicy:

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

        Reemplaza lo siguiente:

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

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

      2. Para agregar o quitar miembros y sus funciones asociadas, puedes editar la política con un editor de texto. Usa el siguiente formato para agregar miembros:

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

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

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

        Por ejemplo, para establecer una política a nivel de proyecto, usa el método project.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

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

        Reemplaza PROJECT_ID por el ID del proyecto.

      Otorga permisos para compartir 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 ofrece las siguientes funciones predefinidas de IAM que puedes usar para administrar imágenes:

      • Usuario de imagen de Compute (roles/compute.imageUser): permiso para mostrar, leer y usar imágenes en las solicitudes, sin tener permisos adicionales sobre la imagen
      • Administrador de Compute Storage (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, te sugerimos que mantengas todas tus imágenes personalizadas en un único proyecto dedicado a alojarlas. Esta práctica 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 la consola de Google Cloud, ve a la página Imágenes.

        Ir a Imágenes

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

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

      4. Para agregar uno o más miembros, haz clic en Agregar principal.

      5. En el campo Principales nuevas, 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, mantén el puntero sobre Compute Engine y selecciona Usuario de imagen o Administrador de almacenamiento, o selecciona una función personalizada.

      7. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, agrega vinculaciones de funciones condicionales.

      8. Guarde los cambios.

      Para permitir que los usuarios inicien imágenes personalizadas compartidas desde la consola de Google Cloud, otorga a los usuarios la función de IAM de visualizador (roles/viewer) en el proyecto de imagen. Si otorgas esta función, ayudas a garantizar que las imágenes compartidas aparezcan en la lista de selección de imágenes.

      1. En la consola de Google Cloud, ve a la página IAM.

        Ir a IAM

      2. Haz clic en Grant access.

      3. En el campo Principales nuevas, 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, mantén el puntero sobre Proyecto y selecciona Visualizador.

      5. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, agrega vinculaciones de funciones condicionales.

      6. Guarde los cambios.

      gcloud

      Para actualizar la política de IAM 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'
      

      Reemplaza lo siguiente:

      • 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:

        • user:test-user@gmail.com
        • group:admins@example.com
        • serviceAccount:test123@example.domain.com
        • domain:example.domain.com
      • ROLE: Es la función a la que se asigna esta identidad, como roles/compute.imageUser, roles/compute.storageAdmin o una función personalizada.

      De forma opcional, permite que los usuarios vean estas imágenes compartidas en su images.list otorga a los usuarios la función de visualizador de IAM (roles/viewer) para el proyecto de imagen mediante el comando gcloud projects add-iam-policy-binding. 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'
      

      REST

      1. Lee la política existente con el método getIamPolicy correspondiente del recurso. Por ejemplo, para obtener la política en 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
        

        Reemplaza lo siguiente:

        • 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. Para agregar o quitar miembros y sus funciones asociadas, edita la política con un editor de texto. Usa el siguiente formato para agregar miembros:

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

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

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

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

        Reemplaza lo siguiente:

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

      De forma opcional, permite que los usuarios vean estas imágenes compartidas en su images.list otorga a los usuarios la función de visualizador de IAM (roles/viewer) para el proyecto de imagen mediante el comando projects.setIamPolicy. 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
      

      Otorga permisos para compartir 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. Para compartir las imágenes con usuarios fuera de la organización, agrégalos como usuarios de imagen a tu proyecto:

      Console

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

        Ir a Imágenes

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

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

      4. Para agregar uno o más miembros, haz clic en Agregar principal.

      5. En el campo Principales nuevas, 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, mantén 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, agrega vinculaciones de funciones condicionales.

      8. Guarde los cambios.

      Para permitir que los usuarios inicien imágenes personalizadas compartidas desde la consola de Google Cloud, otorga a los usuarios la función de IAM de visualizador (roles/viewer) en el proyecto de imagen. Si otorgas esta función, ayudas a garantizar que las imágenes compartidas aparezcan en la lista de selección de imágenes.

      1. En la consola de Google Cloud, ve a la página IAM.

        Ir a IAM

      2. Haz clic en Grant access.

      3. En el campo Principales nuevas, 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, mantén el puntero sobre Proyecto y selecciona Visualizador.

      5. Opcional: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, agrega vinculaciones de funciones condicionales.

      6. Guarde los cambios.

      gcloud

      Para otorgar la función 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'
      

      Reemplaza lo siguiente:

      • IMAGE_NAME: Es el nombre de la imagen, por ejemplo, custom-centos-8.
      • MEMBER: Una identidad válida a la que deseas otorgar la función, por ejemplo, group:admins@example.com.

      De forma opcional, permite que los usuarios vean estas imágenes compartidas en su images.list otorga a los usuarios la función de visualizador de IAM (roles/viewer) para el proyecto de imagen mediante el comando gcloud projects add-iam-policy-binding. 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'
      

      REST

      1. Lee la política existente con el método getIamPolicy correspondiente del recurso. Por ejemplo, para obtener la política en 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
        

        Reemplaza lo siguiente:

        • 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. Para agregar o quitar miembros y sus funciones asociadas, puedes editar la política con un editor de texto. Usa el siguiente formato para agregar miembros:

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

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

        {
          "members": [
            "user:test-user@example.com"
          ],
          "role":"roles/compute.imageUser"
        }
        
      3. Escribe la política actualizada mediante el método setIamPolicy. Por ejemplo, para establecer 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 IAM actualizada del paso anterior.

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

        Reemplaza lo siguiente:

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

        De forma opcional, permite que los usuarios vean estas imágenes compartidas en su images.list otorga a los usuarios la función de visualizador de IAM (roles/viewer ) para el proyecto de imagen mediante la projects.setIamPolicy método. 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
        

      Otorga permisos para compartir 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 de usuario de imagen de Compute (roles/compute.imageUser) a una imagen personalizada.

      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'
      

      Reemplaza IMAGE_NAME con el nombre del recurso, por ejemplo, my_image.

      REST

      1. Lee la política existente con el método getIamPolicy. Por ejemplo, para obtener la política en 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
        

        Reemplaza lo siguiente:

        • 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. Para agregar o quitar miembros y sus funciones asociadas, edita la política con un editor de texto:

        {
         "members": [
           "allAuthenticatedUsers"
         ],
         "role":"roles/compute.imageUser"
        }
        
      3. Escribe la política actualizada mediante el método setIamPolicy. Por ejemplo, para establecer 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 IAM actualizada del paso anterior.

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

        Reemplaza lo siguiente:

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

      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 el agente 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 MIG con una imagen de otro proyecto, otorga la función de usuario de imagen de Compute (roles/compute.imageUser) a la cuenta de servicio de las API que pertenece al proyecto que crea el MIG. Por ejemplo:

      1. En el proyecto A, se quiere crear un MIG mediante 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 de usuario de imagen de Compute.
      3. Ahora en el proyecto A se pueden usar imágenes del proyecto B para crear MIG.

      Después de otorgar la función, 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

      1. En la consola de Google Cloud, 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 el agente 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
        

      Después de recuperar la dirección de correo electrónico de la cuenta de servicio, puedes ir a una de las siguientes secciones:

      Otorga a un MIG 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 de usuario de imagen de Compute (roles/compute.imageUser).

      Console

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

        Ir a IAM

      2. Para agregar un miembro nuevo, haz clic en Otorgar acceso.

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

      4. En la lista Función, mantén el puntero 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, agrega vinculaciones de funciones condicionales.

      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 MIG basado en la plantilla de instancias.

      gcloud

      Agrega 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'
      

      Reemplaza lo siguiente:

      • 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 MIG basado en la plantilla de instancias.

      REST

      1. Obtén la política de IAM del proyecto de imagen con el método projects.getIamPolicy:

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

        Reemplaza PROJECT_ID con el ID del proyecto de administración.

      2. Para otorgar la función 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"
              ]
            }
          ]
        }
        

        Reemplaza SERVICE_ACCOUNT_EMAIL por el correo electrónico de la cuenta de servicio.

      3. Escribe la política actualizada mediante projects.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

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

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

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

      Otorga a un MIG 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 otorgar la función de usuario de imagen de Compute (roles/compute.imageUser) a ciertas imágenes.

      Console

      1. En la consola de Google Cloud, 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. Para expandir la columna de permisos, haz clic en Mostrar panel de información.

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

      5. En el campo Principales nuevas, 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: Para controlar aún más el acceso de los usuarios a los recursos de Google Cloud, agrega vinculaciones de funciones condicionales.

      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 MIG basado en la plantilla de instancias.

      gcloud

      Para otorgar a una cuenta de servicio acceso a una imagen específica, 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'
      

      Reemplaza lo siguiente:

      • 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 MIG basado en la plantilla de instancias.

      REST

      1. Obtén la política de IAM de una imagen mediante el método images.getIamPolicy:

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

        Reemplaza lo siguiente:

        • PROJECT_ID: Es el ID del proyecto de imagen.
        • IMAGE_NAME: Es el nombre de la imagen que deseas compartir.
      2. Para otorgar la función 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"
              ]
            }
          ]
        }
        

        Reemplaza SERVICE_ACCOUNT_EMAIL por el correo electrónico de la cuenta de servicio.

      3. Escribe la política actualizada mediante el método images.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

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

        Reemplaza lo siguiente:

        • PROJECT_ID: Es el ID del proyecto de imagen.
        • IMAGE_NAME: Es el nombre de la imagen que deseas compartir.

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

      Controla el uso de las instantáneas o imágenes 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 mediante el comando gcloud organization list:

        gcloud organizations list
        
      2. Obtén la configuración de políticas existente para la organización mediante el comando gcloud resource-manager org-policies describe:

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

        Reemplaza ORGANIZATION_ID por el ID de 12 dígitos de la organización.

      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 org-policy.yaml a tu organización mediante el comando gcloud resource-manager org-policies set-policy:

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

        Reemplaza ORGANIZATION_ID por el ID de 12 dígitos de la organización.

      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 deseas.

      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. En la consola de Google Cloud, ve a la página Crea una instancia.

        Ir a Crear una instancia

      2. Especifica un Nombre para la VM. Para obtener más información, consulta Convención de asignación de nombres de recursos.
      3. Opcional: Cambia la Zona para esta VM. Si seleccionas Cualquiera, Google elige de forma automática una zona por ti según el tipo de máquina y la disponibilidad.
      4. Selecciona una Configuración de máquina para la VM.
      5. En la sección Disco de arranque, haz clic en Cambiar para configurarlo y, luego, haz lo que se indica a continuación:
        1. Selecciona la pestaña Imágenes personalizadas.
        2. Para elegir el proyecto de imagen, haz clic en Seleccionar un proyecto y, luego, haz lo siguiente:
          1. Selecciona el proyecto que contiene la imagen.
          2. Haz clic en Abrir.
        3. En la lista Imagen, haz clic en la imagen que deseas importar.
        4. Selecciona el tipo y tamaño de tu disco de arranque.
        5. Para confirmar las opciones del disco de arranque, haz clic en Seleccionar.
      6. Para permitir el tráfico HTTP o HTTPS a la VM, en la sección Firewall, elige Permitir tráfico HTTP o Permitir tráfico HTTPS.

        La consola de Google Cloud agrega una etiqueta de red a tu instancia 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 Descripción general de las reglas de firewall en la documentación del firewall de nueva generación de Cloud.

      7. Para iniciar y crear una VM, haz clic en Crear.

      gcloud

      1. In the Google Cloud console, activate Cloud Shell.

        Activate Cloud Shell

        At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

      2. 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

      Terraform

      El proceso para crear una VM con una imagen compartida en Terraform es el mismo que si crearas una VM con una imagen disponible de forma pública.

      1. En la consola de Google Cloud, ve a la página Instancias de VM.

        Ir a Instancias de VM

      2. Haz clic en Crear instancia.
      3. Especifica los parámetros que desees.
      4. En la parte superior o inferior de la página, haz clic en Código equivalente y, luego, en la pestaña Terraform para ver el código de Terraform.

      REST

      El proceso para crear una VM con una imagen compartida en la API es el mismo que si crearas una VM con una imagen disponible de forma pública. Para crear la VM a partir de una imagen personalizada, usa el método instances.insert.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
      
      {
         "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
         "name":"VM_NAME",
         
         "disks":[
            {
               "initializeParams":{
                  "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
               },
               "boot":true
            }
         ],
         
         
         "networkInterfaces":[
            {
               "network":"global/networks/NETWORK_NAME"
            }
         ],
         
        
         "shieldedInstanceConfig":{
            "enableSecureBoot":"ENABLE_SECURE_BOOT"
         }
      }
      

      Reemplaza lo siguiente:

      • PROJECT_ID: ID del proyecto en el que se creará la VM
      • ZONE: Zona en la que se creará la VM
      • MACHINE_TYPE_ZONE: Zona que contiene el tipo de máquina que se usará para la VM nueva
      • MACHINE_TYPE: El tipo de máquina, predefinido o personalizado de la VM nueva
      • VM_NAME: Nombre de la VM nueva
      • IMAGE_PROJECT: nombre del proyecto que contiene la imagen compartida
      • IMAGE o IMAGE_FAMILY: especifica una de las siguientes opciones:
        • IMAGE: nombre de la imagen compartida. Por ejemplo, "sourceImage": "projects/finance-project-1234/global/images/finance-debian-image-v2".
        • IMAGE_FAMILY: si la imagen compartida se crea como parte de una familia de imágenes personalizadas, especifica esa familia de imágenes personalizada.

          Esto crea la VM a partir de la imagen de SO no obsoleta más reciente de tu familia de imágenes personalizadas. Por ejemplo, si especificas "sourceImage": "projects/finance-project-1234/global/images/family/finance-debian-family", Compute Engine crea una VM a partir de la última versión de la imagen de SO en la familia de imágenes personalizadas finance-debian-family.

      • NETWORK_NAME: La red de VPC que deseas usar para la VM. Puedes especificar default para usar tu red predeterminada
      • ENABLE_SECURE_BOOT: Si eliges una imagen que admite funciones de VM protegida, Compute Engine habilita de forma predeterminada el módulo virtual de plataforma de confianza (vTPM) y la supervisión de la integridad. Compute Engine no habilita el Inicio seguro de forma predeterminada.

        Si especificas true para enableSecureBoot, Compute Engine crea una VM con las tres funciones de VM protegida habilitadas. Después de que Compute Engine inicie la VM, debes detenerla para modificar las opciones de VM protegida.

      También puedes crear discos persistentes de arranque a partir de imágenes en 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 la consola de Google Cloud, Google Cloud CLI o REST.

      Console

      1. En la consola de Google Cloud, 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. Para expandir la columna de permisos, haz clic en Mostrar panel de información.

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

      5. Para quitar un usuario de esa función, haz clic en Borrar.

      gcloud

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

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

      Reemplaza lo siguiente:

      • IMAGE_NAME: Es el nombre de la imagen, por ejemplo, my_image.
      • MEMBER: 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.

      REST

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

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

        Reemplaza lo siguiente:

        • 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. Para quitar miembros y sus funciones asociadas, edita la política con un editor de texto.

      3. Escribe la política actualizada mediante el método images.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

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

        Reemplaza lo siguiente:

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

      ¿Qué sigue?