Comparte imágenes o instantáneas

Puedes compartir imágenes o instantáneas con usuarios fuera de la organización o del proyecto. Los usuarios con acceso de lectura a esos recursos pueden usarlos para completar operaciones en otros proyectos y organizaciones. Por ejemplo, si otorgas a un usuario acceso de lectura para una imagen o instantánea en tu proyecto, puedes usar esos recursos a fin de crear discos persistentes en tus propios proyectos. Usa las funciones de IAM para compartir el acceso de lectura a las imágenes o instantáneas.

En algunas situaciones, es mejor que esos usuarios autorizados tengan acceso a estos recursos de almacenamiento solo cuando usan esos recursos dentro de la organización o de ciertos proyectos. Si quieres limitar los proyectos en los que los usuarios pueden usar tus imágenes o instantáneas para crear recursos, configura la restricción de uso de recursos de almacenamiento como una política de la organización.

Para obtener más información sobre las funciones de IAM, lee la documentación de IAM.

Para obtener información sobre las políticas de IAM a nivel de recursos, las cuales te permiten otorgar acceso a recursos específicos como imágenes en lugar de a un proyecto completo, consulta Otorga acceso a recursos de Compute Engine.

Antes de comenzar

Limitaciones

Compartir recursos de almacenamiento tiene las siguientes restricciones:

  • No puedes otorgar funciones a allAuthenticatedUsers o allUsers que permitan el acceso a imágenes o instantáneas.

  • Puedes configurar la restricción constraints/compute.storageResourceUseRestrictions solo a nivel de la organización.

  • Debes usar la API de Compute Engine para crear imágenes o instantáneas de recursos fuera del proyecto. Por ejemplo, puedes hacer referencia a imágenes o instantáneas en proyectos remotos cuando ejecutas métodos que requieren que especifiques una ruta a una imagen o instantánea. Estos son algunos ejemplos de estos métodos:

Comparte recursos de almacenamiento entre proyectos y organizaciones

Puedes compartir el acceso a imágenes o instantáneas con otros usuarios si les otorgas las siguientes funciones o permisos de IAM a nivel de recurso, proyecto, organización o carpeta.

  • Imágenes: la función roles/compute.imageUser o el permiso compute.images.useReadOnly.
  • Instantáneas: la función roles/compute.storageAdmin o el permiso compute.snapshots.useReadOnly.

Estas funciones y permisos te permiten compartir imágenes o instantáneas con otros miembros del equipo fuera del proyecto que posee las imágenes o instantáneas. Por ejemplo, la empresa podría tener un proyecto específico con imágenes calificadas que el resto de tu empresa pueda usar. Puedes otorgar la función roles/compute.imageUser a nivel de proyecto a los miembros de tu equipo, lo que permite a estos miembros del equipo usar estas imágenes en tus propios proyectos.

Para otorgar la función de uso compartido de imágenes, usa Console, la herramienta de línea de comandos de gcloud o la API. Si quieres aprender a usar IAM, lee la documentación de IAM.

Console

  1. Dirígete a la página de IAM en GCP Console.

    Ir a la página de IAM

  2. Si se solicita, selecciona tu proyecto.
  3. Sigue estos pasos si agregarás un usuario nuevo:
    1. Haz clic en Agregar en la parte superior de la página.
    2. Proporciona una o más direcciones de correo electrónico de la cuenta a la que deseas otorgar acceso.
    3. Otorga una o más funciones al miembro.
      • Imágenes: selecciona Compute Engine > Usuario de imagen de Compute en el selector de funciones.
      • Instantáneas: selecciona Compute Engine > Administrador de almacenamiento de Compute en el selector de funciones.
  4. Guarda los cambios.

gcloud

Con la herramienta de línea de comandos de gcloud, agrega una vinculación a la política de Cloud IAM para la imagen o el proyecto de imagen. El siguiente ejemplo agrega una vinculación al proyecto.

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member [MEMBER_TYPE]:[ACCOUNT] --role [ROLE]

en el que:

  • [PROJECT_ID] es el ID del proyecto que contiene las imágenes que deseas compartir.
  • [MEMBER_TYPE] es el tipo de cuenta a la que le otorgas acceso. Por ejemplo, usa user para usuarios individuales, serviceAccount para cuentas de servicio y group para Grupos de Google.
  • [ACCOUNT] es la dirección de correo electrónico de la cuenta a la que otorgarás esta función. Por ejemplo, para una cuenta de servicio, puede ser my-sa@my-project-123.iam.gserviceaccount.com.
  • [ROLE] es la función que deseas otorgar al usuario. Para las imágenes, especifica roles/compute.imageUser. Para las instantáneas, especifica roles/compute.storageAdmin.

Por ejemplo, lo siguiente otorga la función roles/compute.imageUser a john@example.com para que puedan acceder a las imágenes en un proyecto denominado database-images:

gcloud projects add-iam-policy-binding database-images \
    --member user:john@example.com --role roles/compute.imageUser

API

En la API, realiza una solicitud POST a la siguiente URL, en la que [PROJECT_ID] es el ID del proyecto que contiene las imágenes que quieres compartir.

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

El cuerpo de la solicitud debe contener la lista de vinculaciones que deseas aplicar al proyecto. La función debe ser parte de la vinculación. Como en el siguiente ejemplo:

{
   "policy": {
       "version": "0",
       "bindings": [
       {
           "role": "roles/compute.admin",
           "members": [
               "user:example@gmail.com"
           ]
       },
       {
           "role": "roles/compute.imageUser",
           "members": [
               "user:john@gmail.com"
           ]
       }
       ]
   }

}

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

Compute Engine te permite crear grupos de instancias, ya sean administradas o no administradas. Si creas un grupo de instancias administrado, Compute Engine usa la cuenta de servicio de las API de Google para llamar a la API de Compute Engine y realizar acciones relevantes relacionadas con el grupo, como recrear instancias en mal estado y actualizar instancias. Si deseas crear un grupo de instancias administrado con una imagen de otro proyecto, puedes otorgar la función compute.imageUser a la cuenta de servicio de las API que pertenecen al proyecto que crea el grupo de instancias administrado.

Por ejemplo, supongamos que el Proyecto A desea crear grupos de instancias administrados con imágenes propiedad del Proyecto B. El propietario del Proyecto B debe otorgar la función compute.imageUser a la cuenta de servicio de las API de Google del Proyecto A en el Proyecto B. Esto le otorga a la cuenta la capacidad usar las imágenes del Proyecto B para crear grupos de instancias administrados en el Proyecto A.

Después de otorgar la función compute.imageUser, puedes proporcionar la URL de la imagen específica cuando creas la plantilla de instancias para el grupo.

Sigue estos pasos para obtener el correo electrónico de la cuenta de servicio y otorgar acceso a la cuenta:

  1. Dirígete a la página de IAM en GCP Console del proyecto que creará los grupos de instancias administrados.

    Ir a la página de IAM

  2. Si se te solicita, selecciona tu proyecto de la lista.
  3. Busca la cuenta de servicio de las API de Google, que tiene la dirección de correo electrónico con el siguiente formato:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. Toma nota de la dirección de correo electrónico anterior. A continuación, otorga a la cuenta acceso al proyecto que posee las imágenes.

    Console

    1. En Google Cloud Platform Console, ve a la página de IAM del proyecto que tiene las imágenes a las que deseas tener acceso.

      Ir a la página de IAM

    2. Selecciona el proyecto de la lista de proyectos.
    3. Haz clic en el botón Agregar para agregar un miembro nuevo.
    4. En la casilla Miembros, ingresa la dirección de correo electrónico de la cuenta de servicio.
    5. Expande el menú desplegable Funciones y selecciona Compute Engine > Usuario de imagen de Compute (versión Beta).
    6. Haz clic en Agregar para agregar la cuenta.

    gcloud

    Con la herramienta de línea de comandos de gcloud, agrega una vinculación a la política de Cloud IAM para la imagen o proyecto de imagen. En el siguiente ejemplo, se agrega una vinculación a nivel de proyecto.

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

    en el que:

    • [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.

    Como en el siguiente ejemplo:

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/compute.imageUser

    API

    En la API, realiza una solicitud POST a la siguiente URL, en la que [PROJECT_ID] es el ID del proyecto que contiene las imágenes que quieres compartir.

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

    El cuerpo de la solicitud debe contener la lista de vinculaciones que deseas aplicar al proyecto. La función roles/compute.imageUser debe ser parte del vínculo. Como en el siguiente ejemplo:

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/compute.imageUser",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gservbiceaccount.com"
               ]
           }
           ]
       }
    }
    

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

Después de haber compartido imágenes o instantáneas con otros usuarios, puedes controlar dónde emplean esos recursos los usuarios. Configura la restricción constraints/compute.storageResourceUseRestrictions para definir los proyectos en los que los usuarios pueden usar tus recursos de almacenamiento.

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

  1. Busca el ID de tu organización.

    gcloud organizations list
    
  2. Obtén la configuración de políticas existentes para la organización.

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

    en el que [ORGANIZATION_ID] es el ID 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 hayas terminado de editar el archivo, guarda los cambios. Por ejemplo, puedes configurar la siguiente entrada de restricción en el archivo de políticas:

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/[ORGANIZATION_ID]
    
  4. Aplica el archivo policy.yaml a tu organización.

    gcloud beta resource-manager org-policies set-policy
    --organization [ORGANIZATION_ID] org-policy.yaml
    

    en el que [ORGANIZATION_ID] es el ID de la organización.

Cuando hayas terminado de configurar las restricciones en la política de la organización, prueba esas restricciones para asegurarte de que crean las restricciones que necesitas.

Usa imágenes de otro proyecto

Si alguien te otorga la función compute.imageUser, puedes acceder a las imágenes en el proyecto si especificas el proyecto de imagen en las solicitudes. Por ejemplo, usa esto para obtener una lista de imágenes disponibles:

gcloud compute images list --project [IMAGE_PROJECT]

Si quieres aprender a usar una imagen para crear recursos nuevos, como crear una instancia, lee Crea y también inicia una instancia.

Por ejemplo, el siguiente comando crea una instancia mediante una imagen denominada database-image-a del proyecto database-images:

gcloud compute instances create test-instance --image database-image-a --image-project database-images

Del mismo modo, puedes usar la imagen para crear discos persistentes. Para obtener información sobre cómo crear un disco a partir de una imagen, lee Crea un disco persistente de raíz independiente.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine