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
- Si vous voulez vous servir des exemples de ligne de commande de ce guide, installez l'outil de ligne de commande gcloud.
- Si vous voulez utiliser les exemples d'API de ce guide, configurez l'accès aux API.
- Consultez la documentation relative aux configurations Deployment Manager.
- Consultez la documentation relative aux images privées Compute Engine.
- Consultez la documentation propre à Identity and Access Management (IAM).
- Découvrez les rôles IAM de Deployment Manager, en particulier le rôle
roles/compute.imageUser
.
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
ouallUsers
.
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.
- Accédez à la page IAM de la console Google Cloud du projet qui doit accéder aux images privées appartenant à un autre projet.
- 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.
Recherchez le compte de service des API Google, dont l'adresse e-mail est au format suivant :
[PROJECT_NUMBER]@cloudservices.gserviceaccount.com
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
- Toujours dans la console Google Cloud, accédez à la page IAM du projet contenant les images auxquelles vous souhaitez accéder.
- Sélectionnez le projet dans la liste des projets.
- Cliquez sur le bouton Ajouter pour ajouter un nouveau membre.
- Dans la zone Membres, saisissez l'adresse e-mail du compte de service.
- Développez la liste déroulante Rôles et sélectionnez Compute Engine > Utilisateur d'images Compute.
- 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 ?
- En savoir plus sur le partage d'images.
- En savoir plus sur les images Compute Engine.
- En savoir plus sur les autres rôles IAM que vous pouvez accorder.
- En savoir plus sur les comptes de service