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 los recursos de Compute Engine.

Antes de comenzar

Limitaciones

Compartir recursos de almacenamiento tiene las siguientes restricciones:

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

  • Puedes establecer 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 les permite usar estas imágenes en sus propios proyectos.

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

Console

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

    Ir a la página 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. En el siguiente ejemplo, se agrega una vinculación al proyecto.

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

en la 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 otorgas acceso. Por ejemplo, usa user para usuarios individuales, serviceAccount para una cuenta de servicio y group para un grupo de Google.
  • [ACCOUNT] es la dirección de correo electrónico de la cuenta a la que le otorgas esta función. Por ejemplo, para una cuenta de servicio, esto podría ser my-sa@my-project-123.iam.gserviceaccount.com.
  • [ROLE] es la función que deseas otorgar al usuario. Para imágenes, especifica roles/compute.imageUser. Para instantáneas, especifica roles/compute.storageAdmin.

Por ejemplo, esto otorga la función roles/compute.imageUser a john@example.com para que pueda acceder a las imágenes de un proyecto llamado 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 deseas 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 administrados o no administrados. Si creas un grupo de instancias administrado, Compute Engine usa la cuenta de servicio de las API de Google para llamar a la API de Compute Engine y realizar acciones relevantes relacionadas con el grupo, como volver a crear 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 la API que pertenece 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 que son 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 crees 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. Ve a la página de IAM en GCP Console del proyecto en el que deseas crear grupos de instancias administrados.

    Ir a la página 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 IAM del proyecto que tiene las imágenes a las que deseas tener acceso.

      Ir a la página 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 la lista desplegable Funciones y selecciona Compute Engine > Usuario de imagen de Compute (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 el 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 la 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 deseas 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 de la vinculación. 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. Establece la restricción constraints/compute.storageResourceUseRestrictions para definir los proyectos en los que los usuarios pueden usar sus 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 la 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 termines de editar el archivo, guarda los cambios. Por ejemplo, puedes configurar la siguiente entrada de restricción en el archivo de políticas:

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

    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 termines 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 otorgó la función compute.imageUser, puedes acceder a las imágenes del proyecto si especificas el proyecto de imagen en tus 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, luego, inicia una instancia de VM.

Por ejemplo, el siguiente comando crea una instancia con una imagen llamada 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, consulta Crea un disco de arranque persistente independiente a partir de una imagen.

Próximos pasos

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine