Administrar el acceso a imágenes personalizadas


Para permitir que los usuarios creen, eliminen, utilicen o compartan sus imágenes personalizadas, debe otorgarles las funciones de Gestión de acceso e identidad (IAM) adecuadas. Este documento describe los permisos de IAM necesarios para crear y administrar imágenes personalizadas y cómo otorgárselos a los usuarios.

Para obtener información general sobre cómo otorgar acceso a los recursos de Compute Engine, consulte Administrar el acceso a los recursos de Compute Engine . Para obtener información sobre IAM, lea la documentación de IAM .

Antes de comenzar

  • Lea la documentación de IAM .
  • Lea acerca de los roles de IAM de Compute Engine , en particular, el rol de Usuario de Compute Image ( roles/compute.imageUser ).
  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    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.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

Roles requeridos

Para obtener los permisos que necesita para administrar el acceso a imágenes personalizadas, solicite a su administrador que le otorgue las siguientes funciones de IAM:

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

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

Permisos requeridos

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

  • Para otorgar a los usuarios o cuentas de servicio los permisos necesarios para crear, comparta imágenes personalizadas:
    • resourcemanager.projects.getIamPolicy en el proyecto
    • resourcemanager.projects.setIamPolicy en el proyecto
  • Para otorgar a los usuarios o cuentas de servicio los permisos necesarios para eliminar imágenes personalizadas:
    • resourcemanager.projects.getIamPolicy en el proyecto
    • resourcemanager.projects.setIamPolicy en el proyecto
    • compute.images.getIamPolicy en la imagen
    • compute.images.setIamPolicy en la imagen
  • Para revocar el acceso de la cuenta de usuario o de servicio a imágenes personalizadas:
    • resourcemanager.projects.getIamPolicy en el proyecto
    • resourcemanager.projects.setIamPolicy en el proyecto
  • Para crear una instancia usando una imagen compartida:
    • compute.instances.create en el proyecto.
    • Para usar una imagen personalizada para crear la VM: compute.images.useReadOnly en la imagen
    • Para usar una instantánea para crear la VM: compute.snapshots.useReadOnly en la instantánea
    • Para usar una plantilla de instancia para crear la VM: compute.instanceTemplates.useReadOnly en la plantilla de instancia
    • Para asignar una red heredada a la VM: compute.networks.use en el proyecto
    • Para 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 heredada: compute.networks.useExternalIp en el proyecto
    • Para especificar una subred para la VM: compute.subnetworks.use en el proyecto o en la subred elegida
    • Para asignar una dirección IP externa a la VM cuando se usa una red VPC: compute.subnetworks.useExternalIp en el proyecto o en la subred elegida
    • Para configurar metadatos de instancia de VM para la VM: compute.instances.setMetadata en el proyecto
    • Para configurar etiquetas para la VM: compute.instances.setTags en la VM
    • Para configurar etiquetas para la VM: compute.instances.setLabels en la VM
    • Para configurar una cuenta de servicio para que la use la VM: compute.instances.setServiceAccount en la VM
    • Para crear un nuevo disco para la VM: compute.disks.create en el proyecto
    • Para conectar un disco existente en modo de solo lectura o lectura-escritura: compute.disks.use en el disco
    • Para conectar un disco existente en modo de solo lectura: compute.disks.useReadOnly en el disco

Es posible que también pueda obtener estos permisos con roles personalizados u otros roles predefinidos .

Limitaciones

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

Dar permiso para crear imágenes personalizadas

Puede brindar a los usuarios la posibilidad de crear imágenes personalizadas en su organización o proyecto.

Compute Engine ofrece la función de administrador de Compute Storage predefinida ( roles/compute.storageAdmin ) que puedes asignar a los usuarios para que puedan crear, eliminar y administrar recursos relacionados con el almacenamiento, incluidas imágenes, discos e instantáneas. Si necesita un rol que solo permita la creación de imágenes, debe crear un rol personalizado . En su rol personalizado, incluya los siguientes permisos:

  • compute.images.create para crear nuevas imágenes.
  • compute.images.list para enumerar imágenes en el proyecto.
  • compute.disks.use si la imagen se crea desde un disco
  • compute.disks.list si los usuarios necesitan enumerar todos los discos en un proyecto

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

Consola

  1. En la consola de Google Cloud, vaya a la página de IAM del proyecto u organización.

    Ir a IAM

  2. Para agregar un nuevo miembro, haga clic en Conceder acceso .

  3. En el campo Nuevos directores , ingrese la dirección de correo electrónico de la identidad a la que desea otorgar acceso.

    Por ejemplo:

    • Correo electrónico de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidad externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Seleccionar una función , seleccione Compute Engine > Compute Storage Admin o seleccione una función personalizada si creó una.

  5. Opcional: Para controlar aún más el acceso del usuario a Google Cloud recursos, agregue enlace de rol condicional .

  6. Guarde sus cambios.

nube de 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'

Reemplace lo siguiente:

  • ORGANIZATION_ID o PROJECT_ID : el ID de la organización o el ID del proyecto (por ejemplo, my-organization-1 o my-project-1
  • MEMBER : una identidad válida a la que desea otorgarle el rol

    Por ejemplo:

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

DESCANSAR

  1. Lea la política existente con el método getIamPolicy del recurso. Para proyectos, utilice el método projects.getIamPolicy .

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

    Reemplace PROJECT_ID con el ID del proyecto (por ejemplo, my-project-1 .

    Para organizaciones, utilice el método organizations.getIamPolicy .

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

    Reemplace ORGANIZATION_ID con el ID de la organización; por ejemplo, 123456578920 .

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

  2. Para agregar o eliminar miembros y sus roles asociados, edite la política con un editor de texto. Utilice 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 el rol roles/compute.storageAdmin a group:admins@example.com , agregue el siguiente enlace a la política:

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

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

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

    Reemplace PROJECT_ID con el ID del proyecto.

Dar permisos para eliminar imágenes personalizadas

Dependiendo de sus necesidades, puede otorgar permiso a los usuarios para hacer lo siguiente:

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

Dar permiso a nivel de proyecto permite a los usuarios eliminar todas las imágenes que pertenecen a ese proyecto. Otorgar permiso a nivel de organización permite al usuario eliminar cualquier imagen que pertenezca a esa organización, independientemente del proyecto.

Compute Engine ofrece la función de administrador de Compute Storage predefinida ( roles/compute.storageAdmin ) que puedes asignar a los usuarios para que puedan crear, eliminar y administrar recursos relacionados con el almacenamiento, incluidas imágenes, discos e instantáneas. Si necesita una función que solo permita la eliminación de imágenes, debe crear una función personalizada . En su rol personalizado, incluya los siguientes permisos:

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

Consola

Para dar permiso para eliminar imágenes específicas, haga lo siguiente:

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

    Ir a Imágenes

  2. Seleccione las imágenes a las que desea otorgar permisos.

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

  4. Para agregar uno o más miembros, haga clic en Agregar director .

  5. En el campo Nuevos directores , ingrese la dirección de correo electrónico de la identidad con la que desea compartir la imagen.

    Por ejemplo:

    • Correo electrónico de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidad externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  6. En la lista Función , mantenga el puntero sobre Compute Engine y seleccione Administrador de almacenamiento , o seleccione una función personalizada de la lista Personalizada .

  7. Opcional: Para controlar aún más el acceso del usuario a Google Cloud recursos, agregue enlace de rol condicional .

  8. Guarde sus cambios.

Para otorgar permiso para eliminar imágenes de un proyecto u organización, haga lo siguiente:

  1. Vaya a la página de IAM del proyecto u organización.

    Ir a IAM

  2. Haga clic en Conceder acceso .

  3. En el campo Nuevos directores , ingrese la dirección de correo electrónico de la identidad a la que desea otorgar acceso. Por ejemplo:

    • Correo electrónico de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidad externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Función , mantenga el puntero sobre Compute Engine y seleccione Administrador de almacenamiento , o seleccione una función personalizada de la lista Personalizada .

  5. Opcional: Para controlar aún más el acceso del usuario a Google Cloud recursos, agregue enlace de rol condicional .

  6. Guarde sus cambios.

nube de gcloud

Para otorgar permisos para eliminar 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'

Para otorgar permisos para eliminar 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'

Para otorgar permisos para eliminar 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'

Reemplace lo siguiente:

  • ORGANIZATION_ID o PROJECT_ID o IMAGE_NAME : el ID numérico de la organización de 12 dígitos, 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 desea otorgarle el rol

    Por ejemplo:

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

DESCANSAR

  1. Lea la política existente con el método getIamPolicy respectivo del recurso. Para proyectos, utilice el método projects.getIamPolicy :

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

    Reemplace PROJECT_ID con el ID del proyecto.

    Para organizaciones, utilice el método organizations.getIamPolicy :

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

    Reemplace ORGANIZATION_ID con el ID numérico de la organización de 12 dígitos.

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

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

    Reemplace lo siguiente:

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

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

  2. Para agregar o eliminar miembros y sus roles asociados, puede editar la política con un editor de texto. Utilice 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 el rol roles/compute.storageAdmin al user:test-email@example.com , agregue el siguiente enlace a la política:

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

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

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

    Reemplace PROJECT_ID con el ID del proyecto.

Dar permisos para compartir imágenes personalizadas dentro de una organización

Si su proyecto pertenece a una organización, la organización puede tener varios otros proyectos con distintos niveles de acceso a otros proyectos. Cuando crea imágenes personalizadas, puede compartirlas con otros usuarios de otros proyectos dentro de la organización.

Compute Engine ofrece las siguientes funciones de IAM predefinidas que puedes usar para la administración de imágenes:

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

Como alternativa, también puede crear su propia función de IAM personalizada .

Como práctica recomendada, le recomendamos que mantenga todas sus imágenes personalizadas en un único proyecto dedicado a alojar estas imágenes. Esta práctica mejora la gestión de esas imágenes y le permite otorgar acceso a equipos específicos solo a las imágenes que necesitan. También puede otorgar acceso a los equipos a todo el proyecto de imagen, pero debido a que el acceso del equipo a todo el proyecto de imagen viola el principio de privilegio mínimo, no lo recomendamos.

El siguiente ejemplo muestra cómo agregar un grupo para que los usuarios de ese grupo tengan acceso a la imagen.

Consola

  1. En la consola de Google Cloud, vaya 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, haga clic en Mostrar panel de información .

  4. Para agregar uno o más miembros, haga clic en Agregar director .

  5. En el campo Nuevos directores , ingrese la dirección de correo electrónico de la identidad con la que desea compartir la imagen.

    Por ejemplo:

    • Correo electrónico de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidad externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  6. En la lista Función , mantenga el puntero sobre Compute Engine y seleccione Usuario de imagen o Administrador de almacenamiento , o seleccione una función personalizada.

  7. Opcional: Para controlar aún más el acceso del usuario a Google Cloudrecursos, agregue enlace de rol condicional .

  8. Guarde sus cambios.

Para permitir que los usuarios inicien imágenes personalizadas compartidas desde la consola de Google Cloud, otorgue a los usuarios la función de IAM de Visor ( roles/viewer ) para el proyecto de imagen. Otorgar esta función ayuda a garantizar que las imágenes compartidas aparezcan en la lista de selección de imágenes.

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

    Ir a IAM

  2. Haga clic en Conceder acceso .

  3. En el campo Nuevos directores , ingrese la dirección de correo electrónico de la identidad con la que desea compartir la imagen. Por ejemplo:

    • Correo electrónico de la cuenta de Google: test-user@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Identidad de un proveedor de identidad externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Cuenta de servicio: server@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
  4. En la lista Función , mantenga el puntero sobre Proyecto y seleccione Visor .

  5. Opcional: Para controlar aún más el acceso del usuario a Google Cloudrecursos, agregue enlace de rol condicional .

  6. Guarde sus cambios.

nube de gcloud

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

Reemplace lo siguiente:

  • IMAGE_NAME : el nombre de la imagen; por ejemplo, custom-centos-8
  • MEMBER : una identidad válida para la cual desea otorgar el rol

    Por ejemplo:

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

Opcionalmente, para permitir que los usuarios vean estas imágenes compartidas en sus solicitudes images.list , otorgue a los usuarios la función de IAM de Visor ( roles/viewer ) para el proyecto de imagen mediante el comando gcloud projects add-iam-policy-binding . Si no necesita que sus usuarios puedan ver la lista de imágenes compartidas, puede omitir este paso.

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

DESCANSAR

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

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

    Reemplace lo siguiente:

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

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

  2. Para agregar o eliminar miembros y sus roles asociados, edite la política con un editor de texto. Utilice 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 , agregue el siguiente enlace a la política:

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

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

    Reemplace lo siguiente:

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

Opcionalmente, para permitir que los usuarios vean estas imágenes compartidas en sus solicitudes images.list , otorgue a los usuarios el rol de IAM de Visor ( roles/viewer ) para el proyecto de imagen mediante el método projects.setIamPolicy . Si no necesita que sus usuarios puedan ver la lista de imágenes compartidas, puede omitir este paso.

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

Dar permisos para compartir imágenes personalizadas entre organizaciones

Crear un catálogo de imágenes personalizadas puede resultar útil para compartir imágenes con socios, usuarios o contratistas que están fuera de su organización. Para compartir sus imágenes con usuarios fuera de la organización, agréguelos como Usuarios de imágenes a su proyecto:

Consola

  1. En la consola de Google Cloud, vaya 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, haga clic en Mostrar panel de información .

  4. Para agregar uno o más miembros, haga clic en Agregar director .

  5. En el campo Nuevos directores , ingrese la dirección de correo electrónico del grupo con el que desea compartir la imagen. Por ejemplo, admins@example.com .

  6. En la lista Función , mantenga el puntero sobre Compute Engine y seleccione Compute Image User .

  7. Opcional: Para controlar aún más el acceso del usuario a Google Cloudrecursos, agregue enlace de rol condicional .

  8. Guarde sus cambios.

Para permitir que los usuarios inicien imágenes personalizadas compartidas desde la consola de Google Cloud, otorgue a los usuarios la función de IAM de Visor ( roles/viewer ) para el proyecto de imagen. Otorgar esta función ayuda a garantizar que las imágenes compartidas aparezcan en la lista de selección de imágenes.

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

    Ir a IAM

  2. Haga clic en Conceder acceso .

  3. En el campo Nuevos directores , ingrese la dirección de correo electrónico de la identidad con la que desea compartir la imagen. Por ejemplo, admins@example.com .

  4. En la lista Función , mantenga el puntero sobre Proyecto y seleccione Visor .

  5. Opcional: Para controlar aún más el acceso del usuario a Google Cloudrecursos, agregue enlace de rol condicional .

  6. Guarde sus cambios.

nube de 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'

Reemplace lo siguiente:

  • IMAGE_NAME : el nombre de la imagen; por ejemplo, custom-centos-8
  • MEMBER : una identidad válida para la cual desea otorgar el rol; por ejemplo, group:admins@example.com

Opcionalmente, para permitir que los usuarios vean estas imágenes compartidas en sus solicitudes images.list , otorgue a los usuarios la función de IAM de Visor ( roles/viewer ) para el proyecto de imagen mediante el comando gcloud projects add-iam-policy-binding . Si no necesita que sus usuarios puedan ver la lista de imágenes compartidas, puede omitir este paso.

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

DESCANSAR

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

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

    Reemplace lo siguiente:

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

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

  2. Para agregar o eliminar miembros y sus roles asociados, puede editar la política con un editor de texto. Utilice 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 , agregue el siguiente enlace a la política:

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

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

    Reemplace lo siguiente:

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

    Opcionalmente, para permitir que los usuarios vean estas imágenes compartidas en sus solicitudes images.list , otorgue a los usuarios el rol de IAM de Visor ( roles/viewer ) para el proyecto de imagen mediante el método projects.setIamPolicy . Si no necesita que sus usuarios puedan ver la lista de imágenes compartidas, puede omitir este paso.

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

Dar permisos para compartir imágenes personalizadas públicamente

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

Sólo puedes compartir recursos, como imágenes, con todos los usuarios autenticados; No puede compartir proyectos u organizaciones con todos los usuarios autenticados. Esta restricción y la jerarquía de recursos ayudan a evitar que una organización comparta inadvertidamente todo su proyecto con todos los usuarios autenticados de Compute Engine.

El siguiente ejemplo muestra cómo otorgar a todos los usuarios autenticados de Compute Engine la función de Usuario de Compute Image ( roles/compute.imageUser ) para una imagen personalizada.

nube de 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'

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

DESCANSAR

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

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

    Reemplace lo siguiente:

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

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

  2. Para agregar o eliminar miembros y sus roles asociados, edite la política con un editor de texto:

    {
     "members": [
       "allAuthenticatedUsers"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. Escriba la política actualizada utilizando el método setIamPolicy . Por ejemplo, para establecer una política en una imagen específica, utilice el método images.setIamPolicy . En el cuerpo de la solicitud, proporcione la política de IAM actualizada del paso anterior.

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

    Reemplace lo siguiente:

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

Otorgar acceso a imágenes a un grupo de instancias administrado

Compute Engine te permite crear grupos de instancias, ya sea como grupos de instancias administrados o no administrados . Si crea un grupo de instancias administrado (MIG), Compute Engine utiliza 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 recrear instancias en mal estado y actualizar instancias.

Si desea crear un MIG utilizando una imagen de otro proyecto, otorgue el rol de Usuario de Compute Image ( roles/compute.imageUser ) a la cuenta de servicio de API que pertenece al proyecto que crea el MIG. Por ejemplo:

  1. El proyecto A quiere crear un MIG utilizando imágenes propiedad del proyecto B.
  2. El Proyecto B otorga a la cuenta de servicio del Proyecto A la función Compute Image User.
  3. El Proyecto A ahora puede usar imágenes del Proyecto B para crear MIG.

Después de otorgar la función Compute Image User, puede acceder a la imagen desde otros proyectos mediante la consola o la URL de la imagen cuando crea la plantilla de instancia para el grupo administrado.

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

  1. En la consola de Google Cloud, vaya a la página IAM del proyecto a cuya cuenta de servicio desea otorgar acceso.

    Ir a IAM

  2. Si se le solicita, seleccione su proyecto de la lista.

  3. Busque el Agente de servicios de API de Google , que tiene la dirección de correo electrónico en el siguiente formato:

    PROJECT_NUMBER@cloudservices.gserviceaccount.com
    

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

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

Ahora que tiene la dirección de correo electrónico de una cuenta de servicio, puede agregar la dirección a otro proyecto y otorgarle la función Compute Image User ( roles/compute.imageUser ).

Consola

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

    Ir a IAM

  2. Para agregar un nuevo miembro, haga clic en Conceder acceso .

  3. En el campo Nuevos directores , agregue la dirección de correo electrónico de la cuenta de servicio.

  4. En la lista Función , mantenga el puntero sobre Computar y seleccione Computar usuario de imagen .

  5. Opcional: Para controlar aún más el acceso del usuario a Google Cloudrecursos, agregue enlace de rol condicional .

  6. Haga clic en Guardar .

  7. Vuelva al proyecto de la cuenta de servicio.

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

nube de gcloud

Agrega una cuenta de servicio desde el proyecto de imagen usando 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'

Reemplace lo siguiente:

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

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

DESCANSAR

  1. Obtenga la política de IAM del proyecto de imagen mediante el método projects.getIamPolicy :

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

    Reemplace PROJECT_ID con el ID del proyecto de imagen.

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

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

    Reemplace SERVICE_ACCOUNT_EMAIL con el correo electrónico de la cuenta de servicio.

  3. Escriba la política actualizada utilizando projects.setIamPolicy . En el cuerpo de la solicitud, proporcione la política de IAM actualizada del paso anterior.

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

    Reemplace PROJECT_ID con el ID del producto del proyecto de imagen.

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

Otorgar acceso MIG a imágenes específicas en un proyecto

Ahora que tiene la dirección de correo electrónico de una cuenta de servicio, puede agregar la dirección a otro proyecto y otorgar el rol de Usuario de Compute Image ( roles/compute.imageUser ) para ciertas imágenes.

Consola

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

    Ir a Imágenes

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

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

  4. En el panel Permisos , haga clic en Agregar entidad principal .

  5. En el campo Nuevos directores , ingrese el correo electrónico de la cuenta de servicio con la que desea compartir la imagen. Por ejemplo, test123@example.domain.com .

  6. En la lista Función , elija Computar y seleccione Computar usuario de imagen .

  7. Opcional: Para controlar aún más el acceso del usuario a Google Cloud recursos, agregue enlace de rol condicional .

  8. Haga clic en Guardar .

  9. Vuelva al proyecto de la cuenta de servicio.

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

nube de gcloud

Para otorgar acceso a una cuenta de servicio 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'

Reemplace lo siguiente:

  • IMAGE_NAME : el nombre de la imagen que deseas compartir
  • SERVICE_ACCOUNT_EMAIL : el correo electrónico de la cuenta de servicio

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

DESCANSAR

  1. Obtenga la política de IAM de una imagen utilizando el método images.getIamPolicy :

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

    Reemplace lo siguiente:

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

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

    Reemplace SERVICE_ACCOUNT_EMAIL con el correo electrónico de la cuenta de servicio.

  3. Escriba la política actualizada utilizando el método images.setIamPolicy . En el cuerpo de la solicitud, proporcione la política de IAM actualizada del paso anterior.

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

    Reemplace lo siguiente:

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

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

Controla el uso de tus imágenes e instantáneas compartidas

Después de compartir sus imágenes con otros usuarios, puede controlar dónde esos usuarios emplean esos recursos dentro de su organización. Establezca la restricción constraints/compute.storageResourceUseRestrictions para definir los proyectos donde los usuarios pueden usar sus recursos de almacenamiento.

Debe tener permiso para modificar las políticas de su organización para establecer estas restricciones. Por ejemplo, el rol resourcemanager.organizationAdmin tiene permiso para establecer estas restricciones.

  1. Encuentra el ID de la organización de tu organización usando el comando gcloud organization list :

    gcloud organizations list
    
  2. Obtén la configuración de políticas existente para tu 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
    

    Reemplace ORGANIZATION_ID con su ID de organización numérico de 12 dígitos.

  3. Abra el archivo org-policy.yaml en un editor de texto y modifique la restricción compute.storageResourceUseRestrictions . Agregue las restricciones que necesite o elimine las restricciones que ya no necesite. Cuando termine de editar el archivo, guarde los cambios. Por ejemplo, puede establecer la siguiente entrada de restricción en su archivo de política:

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

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

    Reemplace ORGANIZATION_ID con su ID de organización numérico de 12 dígitos.

Cuando termine de configurar las restricciones en la política de su organización, pruebe esas restricciones para asegurarse de que creen las restricciones que desea.

Usar imágenes de otro proyecto

Si alguien le otorga acceso a una o más imágenes en otro proyecto, puede acceder a estas imágenes en el proyecto especificando el proyecto de imagen en sus solicitudes.

Por ejemplo, para crear una instancia usando una imagen compartida de otro proyecto, siga los pasos que se enumeran en Crear una instancia a partir de una imagen compartida .

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

Revocar el acceso a imágenes compartidas

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

Consola

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

    Ir a Imágenes

  2. Seleccione las casillas de verificación junto a las imágenes que desea actualizar.

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

  4. Expanda el rol para el cual desea eliminar usuarios.

  5. Para eliminar a un usuario de esa función, haga clic en Eliminar .

nube de gcloud

Para eliminar a 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'

Reemplace lo siguiente:

  • IMAGE_NAME : el nombre de la imagen; por ejemplo, my_image
  • MEMBER : la identidad que desea eliminar

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

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE : el rol del cual desea eliminar la identidad

Si estás revocando el acceso a un recurso que está en versión beta, usa un comando gcloud beta compute en su lugar.

DESCANSAR

  1. Lea 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
    

    Reemplace lo siguiente:

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

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

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

  3. Escriba la política actualizada utilizando el método images.setIamPolicy . En el cuerpo de la solicitud, proporcione 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
    

    Reemplace lo siguiente:

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

¿Qué sigue?