Usar imágenes de otros proyectos

En esta página se describe cómo configurar tu proyecto para que Deployment Manager pueda crear instancias de máquina virtual de Compute Engine con imágenes de sistema operativo que pertenezcan a otro proyecto.

Por ejemplo, supongamos que tienes un proyecto llamado Awesome Project en el que Deployment Manager crea y gestiona instancias de VM. Ahora, supongamos que necesitas usar imágenes privadas que pertenecen a otro proyecto llamado "Imágenes de la base de datos". Para conceder acceso a estas imágenes, el propietario de Database Images debe asignar el rol de gestión de identidades y accesos roles/compute.imageUser a la cuenta de servicio de las APIs de Google de Awesome Project. De esta forma, Awesome Project podrá usar imágenes del proyecto Database Images.

También puedes usar este proceso para conceder acceso a imágenes de otros proyectos a grupos de instancias gestionados.

Antes de empezar

Limitaciones

Estas son las restricciones para usar esta función:

  • Debes asignar el rol compute.imageUser a nivel de proyecto a la cuenta de servicio de las APIs de Google de tu proyecto.
  • Si se asigna el rol compute.imageUser, se conceden permisos para todas las imágenes del proyecto en cuestión. No es posible compartir imágenes específicas.
  • Debes conceder este rol a usuarios específicos, no a allAuthenticatedUsers ni a allUsers.

Conceder acceso a imágenes

Para conceder acceso a imágenes que pertenecen a otro proyecto, el propietario del proyecto que posee las imágenes debe conceder acceso a la cuenta de servicio de las APIs de Google del proyecto que quiera usar las imágenes.

  1. Ve a la página Gestión de identidades y accesos de la Google Cloud consola del proyecto que necesita acceder a imágenes privadas propiedad de otro proyecto.

    Ir a la página de gestión de identidades y accesos

  2. Si se te solicita, selecciona tu proyecto en la lista. Recuerda seleccionar el proyecto que necesita acceder a las imágenes almacenadas en otro proyecto.
  3. Busca Cuenta de servicio de las APIs de Google, que tiene una dirección de correo con el siguiente formato:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. Anota la dirección de correo que aparece arriba. A continuación, el propietario del proyecto en el que se encuentran las imágenes deseadas puede asignar el rol roles/compute.imageUser a la cuenta de servicio de las APIs de Google.

    Consola

    1. En la Google Cloud consola, ve a la página Gestión de identidades y accesos del proyecto que contiene las imágenes a las que quieres acceder.

      Ir a la página de gestión de identidades y accesos

    2. Selecciona el proyecto en la lista de proyectos.
    3. Haga clic en el botón Añadir para añadir un nuevo miembro.
    4. En el cuadro Miembros, introduce la dirección de correo de la cuenta de servicio.
    5. Despliega el menú Roles y selecciona Compute Engine > Usuario de imagen de Compute.
    6. Haz clic en Añadir para añadir la cuenta.

    gcloud

    Con la CLI de Google Cloud, añade un enlace a la política de gestión de identidades y accesos del proyecto:

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

    donde:

    • [PROJECT_ID] es el ID del proyecto que contiene las imágenes que quieres compartir.
    • [SERVICE_ACCOUNT_EMAIL] es el correo de la cuenta de servicio.

    Por ejemplo:

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

    API

    En la API, haz una solicitud POST a la siguiente URL, donde [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 enlaces que quieras aplicar a este proyecto. El rol roles/compute.imageUser debe formar parte de la vinculación. Por ejemplo:

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

    }

Usar imágenes de otros proyectos en tu configuración

Una vez que se ha concedido acceso a las imágenes de otro proyecto, los usuarios del proyecto pueden usar las imágenes especificando el ID del proyecto al que pertenecen las imágenes en sus plantillas o configuraciones:

image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]

Por ejemplo, si el ID del proyecto de imagen es database-images, puede proporcionar el siguiente URI de imagen en su configuración:

resources:
- name: a-special-vm
  type: compute.v1.instances
  properties:
    machineType: zones/us-central1-a/machineTypes/f1-micro
    image: projects/database-images/global/images/example-database-image
    ...

Una vez que hayas añadido la imagen, termina de crear la configuración y, a continuación, implementa la configuración.

Siguientes pasos