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
- Si quieres usar los ejemplos de línea de comandos de esta guía, instala la herramienta de línea de comandos`gcloud`.
- Si quieres usar los ejemplos de API de esta guía, configura el acceso a la API.
- Consulta información sobre las configuraciones de Deployment Manager.
- Consulta información sobre las imágenes privadas de Compute Engine.
- Consulta la documentación sobre la gestión de identidades y accesos (IAM).
- Consulta información sobre los roles de gestión de identidades y accesos de Deployment Manager, en concreto, el rol
roles/compute.imageUser
.
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 aallUsers
.
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.
- 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.
- 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.
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
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
- 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.
- Selecciona el proyecto en la lista de proyectos.
- Haga clic en el botón Añadir para añadir un nuevo miembro.
- En el cuadro Miembros, introduce la dirección de correo de la cuenta de servicio.
- Despliega el menú Roles y selecciona Compute Engine > Usuario de imagen de Compute.
- 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
- Consulta más información sobre cómo compartir imágenes.
- Consulta más información sobre las imágenes de Compute Engine.
- Consulta otros roles de gestión de identidades y accesos que puedes conceder.
- Más información sobre las cuentas de servicio