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
- Si deseas usar los ejemplos de línea de comandos de esta guía, instala la herramienta de línea de comandos de gcloud.
- Si deseas usar los ejemplos de la API en esta guía, configura el acceso a la API.
- Lee sobre la configuración de Deployment Manager.
- Lee sobre las imágenes privadas de Compute Engine.
- Lee la documentación de Identity and Access Management (IAM).
- Lee acerca de las funciones de IAM de Deployment Manager, en particular, la función
roles/compute.imageUser
.
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
oallUsers
.
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.
- 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.
- 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.
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
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
- En Google Cloud Console, ve a la página de IAM del proyecto que contiene las imágenes a las que deseas tener acceso.
- Selecciona el proyecto de la lista de proyectos.
- Haz clic en el botón Agregar para agregar un miembro nuevo.
- En la casilla Miembros, ingresa la dirección de correo electrónico de la cuenta de servicio.
- Expande el menú desplegable Funciones y selecciona Compute Engine > Usuario de imagen de Compute.
- 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?
- Obtén más información sobre cómo compartir imágenes.
- Obtén más información sobre las imágenes de Compute Engine.
- Lee sobre otras funciones IAM que puedes otorgar.
- Obtén más información sobre las cuentas de servicio.