Usa imágenes de otros proyectos

En esta página, se indica 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 de otro proyecto.

Por ejemplo, imagina que tienes un proyecto llamado “Proyecto increíble”, en el que Deployment Manager crea y administra las instancias de VM. Supongamos que necesitas usar las imágenes privadas de otro proyecto llamado “Imágenes de base de datos”. A fin de otorgar acceso a estas imágenes, el propietario de “Imágenes de base de datos” debe otorgar la función de IAM roles/compute.imageUser a la cuenta de servicio de las API de Google de “Proyecto increíble” para que puede usar imágenes del proyecto de “Imágenes de base de datos”.

También puedes usar este proceso para otorgar a los grupos de instancias administrados acceso a las imágenes de otros proyectos.

Antes de comenzar

Limitaciones

El uso de esta función tiene las siguientes restricciones:

  • Debes otorgar el rol compute.imageUser a nivel del proyecto a la cuenta de servicio de las APIs de Google de tu proyecto.
  • Cuando se otorga la función compute.imageUser, se conceden permisos a todas las imágenes en el proyecto específico. No se pueden compartir imágenes específicas.
  • Debes otorgar esta función a usuarios específicos y no a allAuthenticatedUsers o allUsers.

Otorga acceso a las imágenes

Para otorgar acceso a las imágenes de otro proyecto, el propietario del proyecto que tiene las imágenes debe conceder el acceso a la cuenta de servicio de las API de Google del proyecto en el que se usarán.

  1. Ve a la página de IAM en la consola de Google Cloud del proyecto que necesita acceso a imágenes privadas propiedad de otro proyecto.

    Ve a la página IAM

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

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. Toma nota de la dirección de correo electrónico anterior. A continuación, el propietario del proyecto en el que se encuentran las imágenes deseadas puede otorgar la función roles/compute.imageUser a la cuenta de servicio de las API de Google.

    Console

    1. En Google Cloud Console, ve a la página de IAM del proyecto que contiene 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 el menú desplegable Funciones y selecciona Compute Engine > Usuario de imagen de Compute.
    6. Haz clic en Agregar para agregar la cuenta.

    gcloud

    Con Google Cloud CLI, agrega una vinculación a la política de IAM para el 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 deseas compartir.
    • [SERVICE_ACCOUNT_EMAIL] es el correo electrónico 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, 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 aplicarle al proyecto. La función roles/compute.imageUser debe ser 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.gservbiceaccount.com"
               ]
           }
           ]
       }
    

    }

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

Después de que un proyecto obtiene acceso a imágenes de otro proyecto, los usuarios del proyecto pueden usar las imágenes si especifican el ID del proyecto al que pertenecen las imágenes en tus plantillas o configuraciones:

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

Por ejemplo, si el ID del proyecto de imagen es database-images, entonces puedes proporcionar el siguiente URI de la imagen en tu 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
    ...

Después de agregar la imagen, termina de crear tu configuración; luego, impleméntala.

¿Qué sigue?