Partager des images et des instantanés

Vous pouvez partager des images et des instantanés avec des utilisateurs extérieurs à votre projet ou à votre organisation. Les utilisateurs ayant un accès en lecture à ces ressources peuvent s'en servir pour effectuer des opérations dans d'autres projets et organisations. Par exemple, si vous accordez à un utilisateur un accès en lecture à une image ou à un instantané de votre projet, il peut créer des disques persistants dans ses propres projets à l'aide de ces ressources. Partagez l'accès en lecture à vos images et à vos instantanés en utilisant les rôles IAM.

Dans certains cas, il est possible que vous vouliez que les utilisateurs autorisés aient accès aux ressources de stockage uniquement lorsqu'ils se servent de ces ressources dans le cadre de votre organisation ou de certains projets. Afin de limiter les projets pour lesquels les utilisateurs peuvent créer des ressources à l'aide de vos images et de vos instantanés, définissez la contrainte d'utilisation des ressources de stockage comme stratégie d'organisation.

Pour en savoir plus sur les rôles IAM, lisez la documentation relative à IAM.

Pour en savoir plus sur les stratégies IAM au niveau des ressources, qui vous permettent d'accorder l'accès à des ressources spécifiques (telles que des images) plutôt qu'à un projet entier, consultez la page Accorder un accès à des ressources Compute Engine.

Avant de commencer

Limites

Le partage des ressources de stockage présente les restrictions suivantes :

  • Vous ne pouvez pas accorder à allAuthenticatedUsers ou allUsers des rôles autorisant l'accès aux images ou aux instantanés.

  • Vous ne pouvez définir la contrainte constraints/compute.storageResourceUseRestrictions qu'au niveau de l'organisation.

  • Vous devez vous servir de l'API Compute Engine pour créer des images ou des instantanés à partir de ressources en dehors de votre projet. Par exemple, vous pouvez référencer des images et des instantanés de projets distants lorsque vous exécutez des méthodes vous obligeant à spécifier un chemin d'accès à une image ou à un instantané. Voici quelques exemples de ces méthodes :

Partager des ressources de stockage entre projets et organisations

Vous pouvez partager l'accès aux images et aux instantanés avec d'autres utilisateurs en leur attribuant les rôles ou autorisations IAM ci-dessous au niveau des ressources, du projet, du dossier ou de l'organisation.

  • Images : rôle roles/compute.imageUser ou autorisation compute.images.useReadOnly.
  • Instantanés : rôle roles/compute.storageAdmin ou autorisation compute.snapshots.useReadOnly.

Ces rôles et autorisations vous permettent de partager des images et des instantanés avec d'autres membres de l'équipe en dehors du projet contenant les images et les instantanés. Par exemple, votre entreprise peut avoir un projet spécifique avec des images qualifiées que le reste de votre entreprise peut utiliser. Vous pouvez accorder le rôle roles/compute.imageUser au niveau du projet aux membres de l'équipe pour leur permettre d'utiliser ces images dans leurs propres projets.

Pour accorder le rôle de partage d'images, utilisez la console GCP, l'outil de ligne de commande gcloud ou l'API. Pour apprendre à utiliser IAM, consultez la documentation IAM.

Console

  1. Accédez à la page IAM dans la Console GCP.

    Accéder à la page IAM

  2. Si vous y êtes invité, sélectionnez votre projet.
  3. Si vous ajoutez un nouvel utilisateur, procédez comme suit :
    1. Cliquez sur Ajouter en haut de la page.
    2. Indiquez une ou plusieurs adresses e-mail du compte auquel vous souhaitez accorder l'accès.
    3. Accordez un ou plusieurs rôles au membre.
      • Images : sélectionnez Compute Engine > Utilisateur d'images Compute dans le sélecteur de rôle.
      • Instantanés : sélectionnez Compute Engine > Administrateur Compute Storage dans le sélecteur de rôle.
  4. Enregistrez les modifications.

gcloud

À l'aide de l'outil de ligne de commande gcloud, ajoutez une liaison vers la stratégie Cloud IAM pour l'image ou le projet de l'image. L'exemple suivant ajoute une liaison au projet.

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member [MEMBER_TYPE]:[ACCOUNT] --role [ROLE]

où :

  • [PROJECT_ID] est l'ID du projet contenant les images que vous souhaitez partager.
  • [MEMBER_TYPE] est le type de compte auquel vous donnez accès. Par exemple, utilisez user pour des utilisateurs individuels, serviceAccount pour un compte de service, et group pour un groupe Google.
  • [ACCOUNT] est l'adresse e-mail du compte auquel vous attribuez ce rôle. Par exemple, pour un compte de service, cela peut être my-sa@my-project-123.iam.gserviceaccount.com.
  • [ROLE] est le rôle que vous voulez accorder à l'utilisateur. Pour les images, spécifiez roles/compute.imageUser. Pour les instantanés, spécifiez roles/compute.storageAdmin.

Par exemple, les éléments suivants attribuent le rôle roles/compute.imageUser à l'adresse e-mail john@example.com afin qu'elle puisse accéder aux images du projet database-images :

gcloud projects add-iam-policy-binding database-images \
    --member user:john@example.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 doit faire partie de la liaison. Exemple :

{
   "policy": {
       "version": "0",
       "bindings": [
       {
           "role": "roles/compute.admin",
           "members": [
               "user:example@gmail.com"
           ]
       },
       {
           "role": "roles/compute.imageUser",
           "members": [
               "user:john@gmail.com"
           ]
       }
       ]
   }

}

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

Compute Engine vous permet de créer des groupes d'instances gérés ou non gérés. Si vous créez un groupe d'instances géré, Compute Engine se sert du compte de service des API Google pour appeler l'API Compute Engine et effectuer les actions correspondantes associées au groupe, comme recréer des instances non opérationnelles et mettre à jour des instances. Si vous souhaitez créer un groupe d'instances géré avec une image provenant d'un autre projet, vous pouvez accorder le rôle compute.imageUser au compte de service des API appartenant au projet qui crée le groupe d'instances géré.

Supposons, par exemple, que le projet A souhaite créer des groupes d'instances gérés à l'aide d'images appartenant au projet B. Le propriétaire du projet B doit accorder le rôle compute.imageUser sur son projet au compte de service des API Google du projet A. Ainsi, ce compte peut se servir des images du projet B pour créer des groupes d'instances gérés dans le projet A.

Après avoir accordé le rôle compute.imageUser, vous pouvez fournir l'URL de l'image spécifique lorsque vous créez le modèle d'instance du groupe.

Suivez ces étapes pour obtenir l'adresse e-mail du compte de service et accorder l'accès au compte :

  1. Accédez à la page IAM de la console GCP du projet à partir duquel vous souhaitez créer des groupes d'instances gérés.

    Accéder à la page IAM

  2. Si vous y êtes invité, sélectionnez votre projet dans la liste.
  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, accordez au compte l'accès au projet qui est propriétaire des images.

    Console

    1. Depuis la console Google Cloud Platform, accédez à la page IAM du projet contenant les images auxquelles vous voulez 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 (version bêta).
    6. Cliquez sur Ajouter pour ajouter le compte.

    gcloud

    À l'aide de l'outil de ligne de commande gcloud, ajoutez une liaison à la stratégie Cloud IAM pour l'image ou le projet d'images. L'exemple suivant ajoute une liaison au niveau du 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"
               ]
           }
           ]
       }
    }
    

Restreindre l'utilisation de vos images et instantanés partagés

Après avoir partagé des images et des instantanés avec d'autres utilisateurs, vous pouvez contrôler les emplacements 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.

    gcloud organizations list
    
  2. Obtenez les paramètres de stratégie existants de votre organisation.

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

    [ORGANIZATION_ID] est l'ID de votre organisation.

  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 policy.yaml à votre organisation.

    gcloud beta resource-manager org-policies set-policy
    --organization [ORGANIZATION_ID] org-policy.yaml
    

    [ORGANIZATION_ID] est l'ID de votre organisation.

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 nécessaires.

Utiliser des images d'un autre projet

Si quelqu'un vous a accordé le rôle compute.imageUser, vous pouvez accéder aux images du projet en spécifiant le projet d'image dans vos requêtes. Par exemple, pour obtenir une liste d'images mises à votre disposition, exécutez la commande suivante :

gcloud compute images list --project [IMAGE_PROJECT]

Pour apprendre à créer des ressources à partir d'une image, comme une instance, consultez la page Créer et démarrer une instance.

Par exemple, la commande suivante permet de créer une instance à l'aide d'une image appelée database-image-a appartenant au projet database-images :

gcloud compute instances create test-instance --image database-image-a --image-project database-images

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

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Compute Engine