Gérer l'accès aux images personnalisées

Pour permettre aux utilisateurs de créer, supprimer, utiliser ou partager vos images personnalisées, vous devez leur accorder les rôles IAM (Identity and Access Management) appropriés. Ce document décrit les autorisations IAM requises pour créer et gérer des images personnalisées. Il explique également comment les accorder aux utilisateurs.

Pour obtenir des informations générales sur l'attribution de l'accès à des ressources Compute Engine, consultez la page Gérer l'accès aux ressources Compute Engine. Pour plus d'informations sur IAM, consultez la documentation IAM.

Avant de commencer

Limites

Sur les images, vous ne pouvez pas attribuer de rôles au type de membre spécial allUsers.

Accorder l'autorisation permettant de créer des images personnalisées

Vous pouvez autoriser des utilisateurs à créer des images personnalisées au sein de votre organisation ou de votre projet.

Compute Engine offre le rôle prédéfini d'administrateur de l'espace de stockage (roles/compute.storageAdmin). Vous pouvez attribuer ce rôle aux utilisateurs afin qu'ils puissent créer, supprimer et gérer des ressources liées au stockage, ce qui inclut les images, les disques et les instantanés. Si vous avez besoin d'un rôle permettant uniquement la création d'images, vous devez créer un rôle personnalisé. Dans votre rôle personnalisé, incluez les autorisations suivantes :

  • compute.images.create pour la création d'images
  • compute.images.list pour répertorier les images existant dans le projet
  • compute.disks.use si l'image est créée à partir d'un disque
  • compute.disks.list si les utilisateurs doivent répertorier tous les disques d'un projet

Si vous autorisez un utilisateur à créer des images personnalisées au niveau de l'organisation, celui-ci est habilité à créer des images personnalisées dans n'importe quel projet au sein de l'organisation.

Console

  1. Dans Google Cloud Console, accédez à la page IAM du projet ou de l'organisation.

    Accéder à IAM

  2. Pour ajouter un nouveau membre, cliquez sur Accorder l'accès.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'identité à laquelle vous souhaitez accorder l'accès.

    Exemple :

    • Adresse e-mail du compte Google : test-user@gmail.com
    • Groupe Google : admins@googlegroups.com
    • Compte de service : server@example.gserviceaccount.com
    • Domaine Google Workspace : example.com
  4. Dans la liste Sélectionner un rôle, sélectionnez Compute Engine > Administrateur Compute Storage, ou choisissez un rôle personnalisé si vous en avez créé un.

  5. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  6. Enregistrez les modifications.

gcloud

Pour accorder le rôle roles/compute.storageAdmin au niveau de l'organisation, utilisez la commande gcloud organizations add-iam-policy-binding :

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='roles/compute.storageAdmin'

Pour accorder le rôle roles/compute.storageAdmin au niveau d'un projet, utilisez la commande gcloud projects add-iam-policy-binding :

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/compute.storageAdmin'

Remplacez les éléments suivants :

  • ORGANIZATION_ID ou PROJECT_ID : ID de l'organisation ou du projet, par exemple my-organization-1 ou my-project-1.
  • MEMBER : identité valide à laquelle vous souhaitez accorder le rôle.

    Exemple :

    • Adresse e-mail du compte Google : user:user@gmail.com
    • Groupe Google : group:admins@googlegroups.com
    • Compte de service : serviceAccount:server@example.gserviceaccount.com
    • Domaine Google Workspace : domain:example.com

API

  1. Lisez la stratégie existante à l'aide de la méthode getIamPolicy de la ressource. Pour les projets, utilisez la méthode projects.getIamPolicy.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    Remplacez PROJECT_ID par l'ID du projet, par exemple my-project-1.

    Pour les organisations, utilisez la méthode organizations.getIamPolicy.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    Remplacez ORGANIZATION_ID par l'ID de votre organisation, par exemple 123456578920.

    Compute Engine affiche la stratégie actuelle dans la réponse.

  2. Pour ajouter ou supprimer des membres et les rôles qui leur sont associés, modifiez la stratégie à l'aide d'un éditeur de texte. Utilisez le format suivant pour ajouter des membres :

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Par exemple, pour accorder le rôle roles/compute.storageAdmin à group:admins@example.com, ajoutez la liaison suivante à la stratégie :

    {
     "members": [
       "group:admins@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. Écrivez la stratégie mise à jour à l'aide de la méthode setIamPolicy.

    Par exemple, pour définir une stratégie au niveau du projet, utilisez la méthode project.setIamPolicy. Dans le corps de la requête, indiquez la stratégie IAM mise à jour de l'étape précédente.

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

    Remplacez PROJECT_ID par l'ID du projet.

Accorder les autorisations permettant de supprimer des images personnalisées

Suivant vos besoins, vous pouvez autoriser les utilisateurs à :

  • supprimer une image spécifique ;
  • supprimer des images appartenant à un projet spécifique ;
  • supprimer des images dans n'importe quel projet au sein d'une organisation.

Accorder cette autorisation au niveau du projet permet aux utilisateurs de supprimer toute image appartenant à ce projet. Accorder cette autorisation au niveau de l'organisation permet à l'utilisateur de supprimer toute image appartenant à cette organisation, quel que soit le projet.

Compute Engine offre le rôle prédéfini d'administrateur de l'espace de stockage (roles/compute.storageAdmin). Vous pouvez attribuer ce rôle aux utilisateurs afin qu'ils puissent créer, supprimer et gérer des ressources liées au stockage, ce qui inclut les images, les disques et les instantanés. Si vous avez besoin d'un rôle permettant uniquement la suppression d'images, vous devez créer un rôle personnalisé. Dans votre rôle personnalisé, incluez les autorisations suivantes :

  • compute.images.delete pour la suppression d'images
  • compute.images.list si les utilisateurs doivent répertorier les images dans le projet ou l'organisation
  • compute.images.get pour obtenir les images

Console

Pour autoriser la suppression d'images spécifiques, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Images.

    Accéder à la page "Images"

  2. Sélectionnez les images sur lesquelles vous souhaitez accorder des autorisations.

  3. Pour développer la colonne des autorisations, cliquez sur Afficher le panneau d'informations.

  4. Pour ajouter un ou plusieurs membres, cliquez sur Ajouter un compte principal.

  5. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'identité avec laquelle vous souhaitez partager l'image.

    Exemple :

    • Adresse e-mail du compte Google : test-user@gmail.com
    • Groupe Google : admins@googlegroups.com
    • Compte de service : server@example.gserviceaccount.com
    • Domaine Google Workspace : example.com
  6. Dans la liste Rôles, placez le pointeur sur Compute Engine et sélectionnez Administrateur Storage ou sélectionnez un rôle personnalisé dans la liste Custom (Personnalisé).

  7. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  8. Enregistrez les modifications.

Pour accorder l'autorisation de supprimer des images au niveau d'un projet ou d'une organisation, procédez comme suit :

  1. Accédez à la page IAM du projet ou de l'organisation.

    Accéder à IAM

  2. Cliquez sur Accorder l'accès.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'identité à laquelle vous souhaitez accorder l'accès. Exemple :

    • Adresse e-mail du compte Google : test-user@gmail.com
    • Groupe Google : admins@googlegroups.com
    • Compte de service : server@example.gserviceaccount.com
    • Domaine Google Workspace : example.com
  4. Dans la liste Rôles, placez le pointeur sur Compute Engine et sélectionnez Administrateur Storage ou sélectionnez un rôle personnalisé dans la liste Custom (Personnalisé).

  5. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  6. Enregistrez les modifications.

gcloud

Pour autoriser les utilisateurs à supprimer des images au niveau de l'organisation, utilisez la commande gcloud organizations add-iam-policy-binding :

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='ROLE'

Pour autoriser les utilisateurs à supprimer des images au niveau d'un projet, utilisez la commande gcloud projects add-iam-policy-binding :

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='ROLE'

Pour autoriser les utilisateurs à supprimer une image spécifique, utilisez la commande gcloud compute images add-iam-policy-binding :

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Remplacez les éléments suivants :

  • ORGANIZATION_ID ou PROJECT_ID ou IMAGE_NAME : ID d'organisation numérique à 12 chiffres, ID de projet ou nom d'image, par exemple 123456578920, my-project-1 ou my-custom-image.
  • MEMBER : identité valide à laquelle vous souhaitez accorder le rôle.

    Exemple :

    • Adresse e-mail du compte Google : user:user@gmail.com
    • Groupe Google : group:admins@googlegroups.com
    • Compte de service : serviceAccount:server@example.gserviceaccount.com
    • Domaine Google Workspace : domain:example.com
  • ROLE : rôle à attribuer à cette identité, par exemple le rôle roles/compute.storageAdmin ou un rôle personnalisé tel que roles/customImageDeletionRole

API

  1. Lisez la stratégie existante à l'aide de la méthode getIamPolicy correspondante de la ressource. Pour les projets, utilisez la méthode projects.getIamPolicy :

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    Remplacez PROJECT_ID par l'ID du projet.

    Pour les organisations, utilisez la méthode organizations.getIamPolicy :

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    Remplacez ORGANIZATION_ID par l'ID d'organisation numérique à 12 chiffres.

    Pour une image spécifique, utilisez la méthode images.getIamPolicy :

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet
    • IMAGE_NAME : nom de l'image.

    Compute Engine affiche la stratégie actuelle dans la réponse.

  2. Pour ajouter ou supprimer des membres et les rôles qui leur sont associés, vous pouvez modifier la stratégie à l'aide d'un éditeur de texte. Utilisez le format suivant pour ajouter des membres :

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Par exemple, pour accorder le rôle roles/compute.storageAdmin à user:test-email@example.com, ajoutez la liaison suivante à la stratégie :

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. Écrivez la stratégie mise à jour à l'aide de la méthode setIamPolicy.

    Par exemple, pour définir une stratégie au niveau d'un projet, utilisez la méthode project.setIamPolicy. Dans le corps de la requête, indiquez la stratégie IAM mise à jour de l'étape précédente.

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

    Remplacez PROJECT_ID par l'ID du projet.

Partager des images personnalisées au sein d'une organisation

Si votre projet appartient à une organisation, celle-ci peut héberger plusieurs autres projets ayant différents niveaux d'accès les uns aux autres. Lorsque vous créez des images personnalisées, vous pouvez les partager avec des utilisateurs issus d'autres projets de l'organisation.

Compute Engine offre les rôles IAM prédéfinis suivants que vous pouvez utiliser pour la gestion des images :

  • Utilisateur d'images Compute (roles/compute.imageUser) : autorisation de répertorier, lire et utiliser des images dans vos requêtes sans disposer d'autres autorisations sur celles-ci
  • Administrateur Compute Storage (roles/compute.storageAdmin) : permet de créer, modifier et supprimer des disques, des images et des instantanés

Vous pouvez également créer votre propre rôle IAM personnalisé.

Il est recommandé de conserver toutes vos images personnalisées dans un projet unique dédié à l'hébergement de ces images. Cela permet d'améliorer la gestion de ces images et de restreindre l'accès des équipes uniquement aux images dont elles ont besoin. Vous pouvez également autoriser des équipes à accéder à l'intégralité du projet d'images. Toutefois, comme l'accès d'une équipe à l'ensemble du projet d'images enfreint le principe du moindre privilège, nous vous déconseillons de procéder ainsi.

L'exemple ci-dessous montre comment ajouter un groupe afin que les utilisateurs de ce groupe aient accès à l'image.

Console

  1. Dans la console Google Cloud, accédez à la page Images.

    Accéder à la page "Images"

  2. Sélectionnez l'image que vous souhaitez partager avec d'autres utilisateurs.

  3. Pour développer la colonne des autorisations, cliquez sur Afficher le panneau d'informations.

  4. Pour ajouter un ou plusieurs membres, cliquez sur Ajouter un compte principal.

  5. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'identité avec laquelle vous souhaitez partager l'image.

    Exemple :

    • Adresse e-mail du compte Google : test-user@gmail.com
    • Groupe Google : admins@googlegroups.com
    • Compte de service : server@example.gserviceaccount.com
    • Domaine Google Workspace : example.com
  6. Dans la liste Rôle, maintenez le pointeur sur Compute Engine et sélectionnez Utilisateur d'images ou Administrateur de l'espace de stockage, ou sélectionnez un rôle personnalisé.

  7. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  8. Enregistrez les modifications.

Pour permettre aux utilisateurs de lancer des images personnalisées partagées à partir de la console Google Cloud, accordez-leur le rôle IAM de lecteur (roles/viewer) pour le projet d'images. L'attribution de ce rôle permet de garantir que les images partagées apparaissent dans la liste de sélection d'images.

  1. Dans la console Google Cloud, accédez à la page IAM.

    Accéder à IAM

  2. Cliquez sur Accorder l'accès.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'identité avec laquelle vous souhaitez partager l'image. Exemple :

    • Adresse e-mail du compte Google : test-user@gmail.com
    • Groupe Google : admins@googlegroups.com
    • Compte de service : server@example.gserviceaccount.com
    • Domaine Google Workspace : example.com
  4. Dans la liste Rôle, maintenez le pointeur sur Projet et sélectionnez Lecteur.

  5. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  6. Enregistrez les modifications.

gcloud

Pour mettre à jour la stratégie IAM pour une image spécifique, utilisez la commande gcloud compute images add-iam-policy-binding :

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Remplacez les éléments suivants :

  • IMAGE_NAME : nom de l'image, par exemple custom-centos-8
  • MEMBER : identité valide à laquelle vous souhaitez accorder le rôle

    Exemple :

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE : rôle auquel attribuer cette identité, par exemple roles/compute.imageUser, roles/compute.storageAdmin ou un rôle personnalisé

Pour permettre aux utilisateurs de voir ces images partagées dans leurs requêtes images.list, vous pouvez également leur accorder le rôle IAM de lecteur (roles/viewer) pour le projet d'images à l'aide de la commande gcloud projects add-iam-policy-binding. Si vos utilisateurs n'ont pas besoin de pouvoir afficher la liste des images partagées, vous pouvez ignorer cette étape.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/viewer'

API

  1. Lisez la stratégie existante à l'aide de la méthode getIamPolicy de la ressource. Par exemple, pour obtenir la stratégie sur une image spécifique, utilisez la méthode images.getIamPolicy :

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet auquel appartient cette image.
    • IMAGE_NAME : nom de l'image.

    Compute Engine affiche la stratégie actuelle dans la réponse.

  2. Pour ajouter ou supprimer des membres et les rôles qui leur sont associés, modifiez la stratégie à l'aide d'un éditeur de texte. Utilisez le format suivant pour ajouter des membres :

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Par exemple, pour accorder roles/compute.imageUser à test-email@example.com, ajoutez la liaison suivante à la stratégie :

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. Écrivez la stratégie mise à jour à l'aide de la méthode setIamPolicy. Par exemple, pour définir une stratégie sur une image spécifique, utilisez la méthode project.setIamPolicy. Dans le corps de la requête, indiquez la stratégie IAM mise à jour de l'étape précédente.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet auquel appartient cette image.
    • IMAGE_NAME : nom de l'image.

Pour permettre aux utilisateurs de voir ces images partagées dans leurs requêtes images.list, vous pouvez également leur accorder le rôle IAM de lecteur (roles/viewer) pour le projet d'images à l'aide de la méthode projects.setIamPolicy. Si vos utilisateurs n'ont pas besoin de pouvoir afficher la liste des images partagées, vous pouvez ignorer cette étape.

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

Partager des images personnalisées entre organisations

La création d'un catalogue d'images personnalisées peut être utile pour partager des images avec des partenaires, des utilisateurs ou des sous-traitants qui ne font pas partie de votre organisation. Pour partager vos images avec des utilisateurs extérieurs à l'organisation, ajoutez-les à votre projet en tant qu'utilisateurs d'images :

Console

  1. Dans la console Google Cloud, accédez à la page Images.

    Accéder à la page "Images"

  2. Sélectionnez l'image que vous souhaitez partager avec d'autres utilisateurs.

  3. Pour développer la colonne des autorisations, cliquez sur Afficher le panneau d'informations.

  4. Pour ajouter un ou plusieurs membres, cliquez sur Ajouter un compte principal.

  5. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail du groupe avec lequel vous souhaitez partager l'image. Exemple :admins@example.com

  6. Dans la liste Rôle, maintenez le curseur sur Compute Engine, puis sélectionnez Utilisateur d'images Compute.

  7. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  8. Enregistrez les modifications.

Pour permettre aux utilisateurs de lancer des images personnalisées partagées à partir de la console Google Cloud, accordez-leur le rôle IAM de lecteur (roles/viewer) pour le projet d'images. L'attribution de ce rôle permet de garantir que les images partagées apparaissent dans la liste de sélection d'images.

  1. Dans la console Google Cloud, accédez à la page IAM.

    Accéder à IAM

  2. Cliquez sur Accorder l'accès.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'identité avec laquelle vous souhaitez partager l'image. Exemple :admins@example.com

  4. Dans la liste Rôle, maintenez le pointeur sur Projet et sélectionnez Lecteur.

  5. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  6. Enregistrez les modifications.

gcloud

Pour accorder le rôle roles/compute.imageUser aux utilisateurs, utilisez la commande gcloud compute images add-iam-policy-binding :

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='roles/compute.imageUser'

Remplacez les éléments suivants :

  • IMAGE_NAME : nom de l'image, par exemple custom-centos-8
  • MEMBER : identité valide à laquelle vous souhaitez accorder le rôle (par exemple, group:admins@example.com)

Pour permettre aux utilisateurs de voir ces images partagées dans leurs requêtes images.list, vous pouvez également leur accorder le rôle IAM de lecteur (roles/viewer) pour le projet d'images à l'aide de la commande gcloud projects add-iam-policy-binding. Si vos utilisateurs n'ont pas besoin de pouvoir afficher la liste des images partagées, vous pouvez ignorer cette étape.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/viewer'

API

  1. Lisez la stratégie existante à l'aide de la méthode getIamPolicy de la ressource. Par exemple, pour obtenir la stratégie sur une image spécifique, utilisez la méthode images.getIamPolicy :

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet auquel appartient cette image.
    • IMAGE_NAME : nom de l'image.

    Compute Engine affiche la stratégie actuelle dans la réponse.

  2. Pour ajouter ou supprimer des membres et les rôles qui leur sont associés, vous pouvez modifier la stratégie à l'aide d'un éditeur de texte. Utilisez le format suivant pour ajouter des membres :

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Par exemple, pour accorder roles/compute.imageUser à test-user@example.com, ajoutez la liaison suivante à la stratégie :

    {
      "members": [
        "user:test-user@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. Écrivez la stratégie mise à jour à l'aide de la méthode setIamPolicy. Par exemple, pour définir une stratégie sur une image spécifique, utilisez la méthode images.setIamPolicy. Dans le corps de la requête, indiquez la stratégie IAM mise à jour de l'étape précédente.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet auquel appartient cette image.
    • IMAGE_NAME : nom de l'image.

    Pour permettre aux utilisateurs de voir ces images partagées dans leurs requêtes images.list, vous pouvez également leur accorder le rôle IAM de lecteur (roles/viewer) pour le projet d'images à l'aide de la méthode projects.setIamPolicy. Si vos utilisateurs n'ont pas besoin de pouvoir afficher la liste des images partagées, vous pouvez ignorer cette étape.

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

Partager des images personnalisées en mode public

Vous pouvez partager vos images personnalisées avec tous les utilisateurs de Compute Engine authentifiés, indépendamment de leur appartenance à votre organisation ou à votre projet.

Le partage avec l'ensemble des utilisateurs authentifiés ne peut porter que sur des ressources, telles que des images. Il ne peut pas s'appliquer à des projets ou des organisations. Cette restriction, ainsi que la hiérarchisation des ressources, permettent d'éviter qu'une organisation partage involontairement l'intégralité d'un de ses projets avec tous les utilisateurs de Compute Engine authentifiés.

L'exemple suivant montre comment attribuer à tous les utilisateurs de Compute Engine authentifiés le rôle d'utilisateur d'image Compute (roles/compute.imageUser) sur une image personnalisée.

gcloud

Pour rendre les images publiques, utilisez la commande gcloud compute images add-iam-policy-binding :

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='allAuthenticatedUsers' \
    --role='roles/compute.imageUser'

Remplacez IMAGE_NAME par le nom de la ressource (par exemple, my_image).

API

  1. Lisez la stratégie existante à l'aide de la méthode getIamPolicy. Par exemple, pour obtenir la stratégie sur une image spécifique, utilisez la méthode images.getIamPolicy :

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet auquel appartient cette image.
    • IMAGE_NAME : nom de l'image.

    Compute Engine affiche la stratégie actuelle dans la réponse.

  2. Pour ajouter ou supprimer des membres et les rôles qui leur sont associés, modifiez la stratégie à l'aide d'un éditeur de texte :

    {
     "members": [
       "allAuthenticatedUsers"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. Écrivez la stratégie mise à jour à l'aide de la méthode setIamPolicy. Par exemple, pour définir une stratégie sur une image spécifique, utilisez la méthode images.setIamPolicy. Dans le corps de la requête, indiquez la stratégie IAM mise à jour de l'étape précédente.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet auquel appartient cette image.
    • IMAGE_NAME : nom de l'image.

Accorder l'accès aux images à un groupe d'instances géré

Compute Engine vous permet de créer des groupes de VM gérés ou non gérés. Si vous créez un groupe d'instances géré (MIG), Compute Engine utilise l'agent de service des API Google pour appeler l'API Compute Engine et effectuer les actions sur le groupe, telles que la recréation de VM non opérationnelles et la mise à jour de VM.

Si vous souhaitez créer un MIG à l'aide d'une image appartenant à un autre projet, attribuez le rôle Utilisateur d'images Compute (roles/compute.imageUser) au compte de service des API associé au projet qui crée le MIG. Exemple :

  1. Le projet A souhaite créer un groupe d'instances géré (MIG) à l'aide d'images appartenant au projet B.
  2. Le projet B accorde au compte de service du projet A le rôle d'utilisateur d'images Compute.
  3. Le projet A peut désormais utiliser les images du projet B pour créer des MIG.

Une fois que vous avez accordé le rôle Utilisateur d'images Compute, vous pouvez accéder à l'image depuis d'autres projets, en utilisant la console ou l'URL de l'image lorsque vous créez le modèle d'instance pour le groupe géré.

Récupérer l'adresse e-mail associée au compte de service

  1. Dans la console Google Cloud, accédez à la page IAM du projet associé au compte de service auquel vous souhaitez accorder l'accès.

    Accéder à IAM

  2. Si vous y êtes invité, sélectionnez votre projet dans la liste.

  3. Recherchez l'agent de service des API Google, dont l'adresse e-mail est au format suivant :

    PROJECT_NUMBER@cloudservices.gserviceaccount.com
    

Après avoir récupéré l'adresse e-mail du compte de service, vous pouvez accéder à l'une des sections suivantes :

Accorder à un groupe d'instances géré l'accès à toutes les images d'un projet

Maintenant que vous disposez de l'adresse e-mail d'un compte de service, vous pouvez l'ajouter à un autre projet et lui accorder le rôle Utilisateur d'images Compute (roles/compute.imageUser).

Console

  1. Dans Google Cloud Console, accédez à la page IAM du projet d'images.

    Accéder à IAM

  2. Pour ajouter un nouveau membre, cliquez sur Accorder l'accès.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail du compte de service.

  4. Dans la liste Rôle, maintenez le curseur sur Compute, puis sélectionnez Utilisateur d'images Compute.

  5. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  6. Cliquez sur Enregistrer.

  7. Revenez au projet associé au compte de service.

Vous pouvez maintenant créer un modèle d'instance basé sur une image du projet d'images, puis créer un groupe d'instances géré basé sur le modèle d'instance.

gcloud

Ajoutez un compte de service à partir du projet d'images à l'aide de la commande gcloud projects add-iam-policy-binding :

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

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant les images que vous souhaitez partager.
  • SERVICE_ACCOUNT_EMAIL : adresse e-mail du compte de service.

Vous pouvez maintenant créer un modèle d'instance basé sur une image du projet d'images, puis créer un groupe d'instances géré basé sur le modèle d'instance.

API

  1. Obtenez la stratégie IAM du projet d'images à l'aide de la méthode projects.getIamPolicy :

     POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
     

    Remplacez PROJECT_ID par l'ID du projet d'images.

  2. Pour accorder le rôle roles/compute.imageUser au compte de service, modifiez la stratégie à l'aide d'un éditeur de texte :

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    Remplacez SERVICE_ACCOUNT_EMAIL par l'adresse e-mail du compte de service.

  3. Écrivez la stratégie mise à jour à l'aide de projects.setIamPolicy. Dans le corps de la requête, indiquez la stratégie IAM mise à jour de l'étape précédente.

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

    Remplacez PROJECT_ID par l'ID du projet d'images.

    Vous pouvez maintenant créer un modèle d'instance basé sur une image du projet d'images, puis créer un groupe d'instances géré basé sur le modèle d'instance.

Accorder à un groupe d'instances géré l'accès à des images spécifiques d'un projet

Maintenant que vous disposez de l'adresse e-mail associée à un compte de service, vous pouvez l'ajouter à un autre projet et accorder le rôle d'utilisateur d'images Compute (roles/compute.imageUser) pour certaines images.

Console

  1. Dans la console Google Cloud, accédez à la page Images du projet d'images.

    Accéder à la page "Images"

  2. Cochez les cases figurant à côté des images que vous souhaitez partager.

  3. Pour développer la colonne des autorisations, cliquez sur Afficher le panneau d'informations.

  4. Dans le panneau Autorisations, cliquez sur Ajouter un compte principal.

  5. Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail du compte de service avec lequel vous souhaitez partager l'image. Exemple :test123@example.domain.com

  6. Dans la liste Rôle, sélectionnez Compute, puis Utilisateur d'images Compute.

  7. Facultatif : Pour contrôler davantage l'accès des utilisateurs aux ressources Google Cloud, ajoutez une liaison de rôle conditionnelle.

  8. Cliquez sur Enregistrer.

  9. Revenez au projet associé au compte de service.

Vous pouvez maintenant créer un modèle d'instance basé sur une image du projet d'images, puis créer un groupe d'instances géré basé sur le modèle d'instance.

gcloud

Pour autoriser un compte de service à accéder à une image spécifique, utilisez la commande gcloud compute images add-iam-policy-binding :

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' \
    --role='roles/compute.imageUser'

Remplacez les éléments suivants :

  • IMAGE_NAME : nom de l'image que vous souhaitez partager.
  • SERVICE_ACCOUNT_EMAIL : adresse e-mail du compte de service.

Vous pouvez maintenant créer un modèle d'instance basé sur une image du projet d'images, puis créer un groupe d'instances géré basé sur le modèle d'instance.

API

  1. Obtenez la stratégie IAM d'une image à l'aide de la méthode images.getIamPolicy :

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet d'images.
    • IMAGE_NAME : nom de l'image que vous souhaitez partager.
  2. Pour accorder le rôle roles/compute.imageUser au compte de service, modifiez la stratégie à l'aide d'un éditeur de texte :

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    Remplacez SERVICE_ACCOUNT_EMAIL par l'adresse e-mail du compte de service.

  3. Écrivez la stratégie mise à jour à l'aide de la méthode images.setIamPolicy. Dans le corps de la requête, indiquez la stratégie IAM mise à jour de l'étape précédente.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet d'images.
    • IMAGE_NAME : nom de l'image que vous souhaitez partager.

    Vous pouvez maintenant créer un modèle d'instance basé sur une image du projet d'images, puis créer un groupe d'instances géré basé sur le modèle d'instance.

Contrôler l'utilisation des images et instantanés partagés

Après avoir partagé vos images avec d'autres utilisateurs, vous pouvez contrôler les emplacements, au sein de votre organisation, où vos ressources sont utilisées. Définissez la contrainte constraints/compute.storageResourceUseRestrictions pour déterminer les projets dans lesquels les utilisateurs sont autorisés à exploiter vos ressources de stockage.

Vous devez être autorisé à modifier les stratégies de votre organisation pour définir ces contraintes. Par exemple, le rôle resourcemanager.organizationAdmin est autorisé à définir ces contraintes.

  1. Recherchez l'ID de votre organisation à l'aide de la commande gcloud organization list :

    gcloud organizations list
    
  2. Obtenez les paramètres des règles définies pour votre organisation à l'aide de la commande gcloud resource-manager org-policies describe :

    gcloud resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization ORGANIZATION_ID > org-policy.yaml
    

    Remplacez ORGANIZATION_ID par votre ID d'organisation numérique à 12 chiffres.

  3. Ouvrez le fichier org-policy.yaml dans un éditeur de texte, puis modifiez la contrainte compute.storageResourceUseRestrictions. Ajoutez les restrictions dont vous avez besoin ou supprimez celles qui ne vous sont pas nécessaires. Lorsque vous avez terminé de modifier le fichier, enregistrez vos modifications. Par exemple, vous pouvez définir l'entrée de contrainte suivante dans votre fichier de règles :

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/organization-id
    
  4. Appliquez le fichier org-policy.yaml à votre organisation à l'aide de la commande gcloud resource-manager org-policies set-policy :

    gcloud resource-manager org-policies set-policy \
       --organization=ORGANIZATION_ID org-policy.yaml
    

    Remplacez ORGANIZATION_ID par votre ID d'organisation numérique à 12 chiffres.

Lorsque vous avez terminé de configurer les contraintes de votre stratégie d'organisation, testez-les pour vous assurer qu'elles créent les restrictions que vous souhaitez.

Utiliser les images d'un autre projet

Si quelqu'un vous accorde l'accès à une ou plusieurs images hébergées dans un autre projet, vous pouvez accéder à celles-ci en spécifiant le projet d'images dans vos requêtes.

Par exemple, pour créer une VM à l'aide d'une image partagée d'un autre projet, procédez comme suit :

Console

  1. Accédez à la page Créer une instance dans Google Cloud Console.

    Accéder à la page Créer une instance

  2. Spécifiez un nom pour votre VM. Pour en savoir plus, consultez Recommandation pour l'attribution de noms aux ressources.
  3. Facultatif : modifiez la zone de cette VM. Compute Engine choisit de manière aléatoire la liste des zones de chaque région pour encourager l'utilisation dans plusieurs zones.
  4. Sélectionnez une configuration de machine pour votre VM.
  5. Dans la section Disque de démarrage, cliquez sur Modifier pour configurer le disque de démarrage, puis procédez comme suit :
    1. Sélectionnez l'onglet Images personnalisées.
    2. Pour sélectionner le projet d'image, cliquez sur Sélectionner un projet, puis procédez comme suit :
      1. Sélectionnez le projet contenant l'image.
      2. Cliquez sur Ouvrir.
    3. Dans la liste Image, cliquez sur l'image que vous souhaitez importer.
    4. Sélectionnez le type et la taille de votre disque de démarrage.
    5. Cliquez sur Sélectionner pour confirmer vos options de disque de démarrage.
  6. Dans la section Pare-feu, pour autoriser le trafic HTTP ou HTTPS vers la VM, sélectionnez Autoriser le trafic HTTP ou Autoriser le trafic HTTPS.

    La console Google Cloud ajoute un tag réseau à votre instance et crée la règle de pare-feu d'entrée correspondante, qui autorise l'intégralité du trafic entrant sur le port tcp:80 (HTTP) ou tcp:443 (HTTPS). Le tag réseau associe la règle de pare-feu à la VM. Pour en savoir plus, consultez la page Présentation des règles de pare-feu dans la documentation sur le cloud privé virtuel.

  7. Pour démarrer et créer une VM, cliquez sur Créer.

gcloud

Créez une VM à l'aide de la commande gcloud compute instances create command, et utilisez les options --image et --image-project pour spécifier le nom de l'image et le projet où se trouve l'image :

 gcloud compute instances create VM_NAME \
        --image=IMAGE \
        --image-project=IMAGE_PROJECT
    

Remplacez l'élément suivant :

  • VM_NAME : nom de la nouvelle VM.
  • IMAGE : nom de l'image
  • IMAGE_PROJECT : projet auquel appartient l'image.

Si la commande réussit, gcloud envoie une réponse contenant les propriétés de la nouvelle VM :

    Created [https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-b/instances/example-instance].
    NAME                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    example-instance     us-central1-b  e2-standard-2               10.240.0.4   104.198.53.60  RUNNING

API

Le processus de création d'une VM avec une image partagée dans l'API est identique à celui consistant à créer une VM à partir d'une image accessible publiquement. Pour créer la VM à partir d'une image partagée, utilisez la méthode instances.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
   "name":"VM_NAME",

   "disks":[
      {
         "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot":true
      }
   ],

   "networkInterfaces":[
      {
         "network":"global/networks/NETWORK_NAME"
      }
   ],

   "shieldedInstanceConfig":{
      "enableSecureBoot":"ENABLE_SECURE_BOOT"
   }
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet dans lequel créer la VM
  • ZONE : zone dans laquelle créer la VM
  • MACHINE_TYPE_ZONE : zone contenant le type de machine à utiliser pour la nouvelle VM
  • MACHINE_TYPE : type de machine prédéfini ou personnalisé pour la nouvelle VM
  • VM_NAME : nom de la nouvelle VM.
  • IMAGE_PROJECT : nom du projet contenant l'image partagée.
  • IMAGE ou IMAGE_FAMILY : spécifiez l'un des éléments suivants :
    • IMAGE : nom de l'image partagée. Exemple : "sourceImage": "projects/finance-project-1234/global/images/finance-debian-image-v2".
    • IMAGE_FAMILY : si l'image partagée est créée dans le cadre d'une famille d'images personnalisées, spécifiez cette famille.

      Cette action crée la VM à partir de l'image d'OS la plus récente et non obsolète de votre famille d'images personnalisée. Par exemple, si vous spécifiez "sourceImage": "projects/finance-project-1234/global/images/family/finance-debian-family", Compute Engine crée une VM à partir de la dernière version de l'image de l'OS dans la famille d'images finance-debian-family personnalisées.

  • NETWORK_NAME : réseau VPC que vous souhaitez utiliser pour la VM. Vous pouvez spécifier default pour utiliser votre réseau par défaut.
  • ENABLE_SECURE_BOOT : facultatif : si vous avez choisi une image compatible avec les fonctionnalités de VM protégée, Compute Engine active par défaut le module vTPM et la surveillance de l'intégrité. Compute Engine n'active pas le démarrage sécurisé par défaut.
    Si vous spécifiez true pour enableSecureBoot, Compute Engine crée une VM avec les trois fonctionnalités de VM protégée activées. Une fois que Compute Engine a démarré votre VM, vous devez l'arrêter pour modifier les options de VM protégée.

Vous pouvez également créer des disques persistants de démarrage à partir des images d'un autre projet. Pour en savoir plus sur la création d'un disque de démarrage à partir d'une image, consultez la section Créer un disque persistant de démarrage autonome.

Révoquer l'accès aux images partagées

Lorsqu'un utilisateur n'a plus besoin d'accéder à vos ressources Compute Engine, révoquez son accès à l'aide de la console Google Cloud, de Google Cloud CLI ou de l'API Compute Engine.

Console

  1. Dans la console Google Cloud, accédez à la page Images du projet d'images.

    Accéder à la page "Images"

  2. Cochez les cases figurant à côté des images que vous souhaitez mettre à jour.

  3. Pour développer la colonne des autorisations, cliquez sur Afficher le panneau d'informations.

  4. Développez le rôle au sein duquel vous souhaitez supprimer des utilisateurs.

  5. Pour supprimer un utilisateur de ce rôle, cliquez sur  Supprimer.

gcloud

Pour supprimer un utilisateur d'un rôle appliqué à une image, utilisez la commande gcloud compute images remove-iam-policy-binding avec les options --member et --role :

gcloud compute images remove-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Remplacez les éléments suivants :

  • IMAGE_NAME : nom de l'image, par exemple my_image
  • MEMBER : identité que vous souhaitez supprimer.

    Doit être au format user|group|serviceAccount:email ou domain:domain. Exemple :

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE : rôle dans lequel vous souhaitez supprimer l'identité.

Si vous révoquez l'accès à une ressource qui est en version bêta, exécutez plutôt une commande gcloud beta compute.

API

  1. Lisez la stratégie existante à l'aide de la méthode images.getIamPolicy :

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet auquel appartient cette image.
    • IMAGE_NAME : nom de l'image.

    Compute Engine affiche la stratégie actuelle dans la réponse.

  2. Pour supprimer des membres et les rôles qui leur sont associés, modifiez la stratégie à l'aide d'un éditeur de texte.

  3. Écrivez la stratégie mise à jour à l'aide de la méthode images.setIamPolicy. Dans le corps de la requête, indiquez la stratégie IAM mise à jour de l'étape précédente.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/global/images/IMAGE_NAME:setIamPolicy
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet auquel appartient cette image.
    • IMAGE_NAME : nom de l'image.

Étape suivante