Utiliser des images provenant d'autres projets

Cette page explique comment configurer votre projet pour que Deployment Manager puisse créer des instances de machines virtuelles Compute Engine à l'aide d'images de système d'exploitation appartenant à un autre projet.

Supposons par exemple que vous avez un projet nommé "Projet incroyable", dans lequel Deployment Manager crée et gère des instances de machines virtuelles. Supposons maintenant que vous devez utiliser des images privées appartenant à un projet différent nommé "Images de bases de données". Pour vous permettre d'accéder à ces images, le propriétaire du projet "Images de bases de données" doit accorder le rôle IAM roles/compute.imageUser au compte de service des API Google de "Projet incroyable". Votre projet pourra ensuite utiliser les images du projet "Images de bases de données".

Vous pouvez également utiliser ce processus pour accorder l'accès aux images d'autres projets aux groupes d'instances gérés.

Avant de commencer

Limites

Les limites suivantes s'appliquent à l'utilisation de cette fonctionnalité :

  • Vous devez attribuer le rôle compute.imageUser au niveau du projet au compte de service des API Google de votre projet.
  • En accordant le rôle compute.imageUser, vous accordez des autorisations pour toutes les images du projet concerné. Il n'est pas possible de partager des images spécifiques.
  • Vous devez accorder ce rôle à des utilisateurs spécifiques, et non à allAuthenticatedUsers ou allUsers.

Accorder l'accès aux images

Le propriétaire du projet contenant les images doit autoriser le compte de service des API Google du projet qui a besoin de les utiliser à accéder aux images.

  1. Accédez à la page IAM de la console Google Cloud du projet qui doit accéder aux images privées appartenant à un autre projet.

    Accéder à la page IAM

  2. Si vous y êtes invité, sélectionnez votre projet dans la liste. N'oubliez pas que vous devez sélectionner le projet qui doit accéder aux images stockées dans un autre projet.
  3. Recherchez le compte de service des API Google, dont l'adresse e-mail est au format suivant :

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. Notez l'adresse e-mail ci-dessus. Ensuite, un propriétaire du projet contenant les images souhaitées peut accorder le rôle roles/compute.imageUser au compte de service des API Google.

    Console

    1. Toujours dans la console Google Cloud, accédez à la page IAM du projet contenant les images auxquelles vous souhaitez accéder.

      Accéder à la page IAM

    2. Sélectionnez le projet dans la liste des projets.
    3. Cliquez sur le bouton Ajouter pour ajouter un nouveau membre.
    4. Dans la zone Membres, saisissez l'adresse e-mail du compte de service.
    5. Développez la liste déroulante Rôles et sélectionnez Compute Engine > Utilisateur d'images Compute.
    6. Cliquez sur Ajouter pour ajouter le compte.

    gcloud

    Avec la Google Cloud CLI, ajoutez une liaison à la stratégie IAM pour le projet:

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

    où :

    • [PROJECT_ID] est l'ID du projet contenant les images que vous souhaitez partager.
    • [SERVICE_ACCOUNT_EMAIL] est l'adresse e-mail du compte de service.

    Exemple :

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

    API

    Dans l'API, effectuez une requête POST vers l'URL suivante, où [PROJECT_ID] est l'ID du projet contenant les images que vous souhaitez partager.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
    

    Le corps de la requête doit contenir la liste des liaisons que vous souhaitez appliquer à ce projet. Le rôle roles/compute.imageUser doit faire partie de la liaison. Exemple :

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

    }

Utiliser des images provenant d'autres projets dans votre configuration

Une fois qu'un projet a été autorisé à accéder aux images d'un autre projet, les utilisateurs du projet peuvent se servir des images en spécifiant l'ID du projet auquel les images appartiennent dans vos modèles ou configurations :

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

Par exemple, si l'ID du projet contenant les images est database-images, vous pouvez fournir l'URI d'image suivant dans votre configuration :

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
    ...

Après avoir ajouté l'image, terminez la création de votre configuration, puis déployez-la.

Et ensuite ?