Conditions préalables à l'importation et à l'exportation d'images de VM


Ce document décrit les conditions préalables à l'importation et à l'exportation d'images sur Compute Engine.

Vous pouvez partager des instances de machine virtuelle (VM), des fichiers de disque virtuel et des images système à partir d'autres environnements cloud ou de votre environnement sur site en important et en exportant des images depuis Cloud Storage. La checklist suivante récapitule les exigences que vous devez remplir avant d'importer et d'exporter des images :

  1. Configurer l'accès à un bucket Cloud Storage
  2. Attribuer les rôles requis à votre compte utilisateur
  3. Attribuer les rôles requis au compte de service Cloud Build
  4. Attribuer les rôles requis au compte de service Compute Engine

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud. Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine comme suit :

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init
    2. Définissez une région et une zone par défaut.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init

Configurer l'accès à un bucket Cloud Storage

Vous devez avoir accès à un bucket Cloud Storage que l'outil d'importation ou d'exportation peut utiliser. Si vous n'avez pas de bucket Cloud Storage, consultez la page Créer un bucket Cloud Storage.

Pour configurer l'accès à votre bucket Cloud Storage, consultez les sections Attribuer les rôles requis à votre compte utilisateur et Attribuer les rôles requis à votre compte de service Compute Engine.

  • Si vous exportez une image, l'outil d'exportation l'importe dans le bucket Cloud Storage.

  • Si vous importez une image, vous devez d'abord importer l'image dans le bucket Cloud Storage. L'outil d'importation télécharge le fichier du bucket Cloud Storage vers Compute Engine, puis crée une image dans Compute Engine à partir de ce fichier de disque.

Accorder les rôles IAM requis

L'outil d'importation et d'exportation d'images de VM nécessite que les comptes suivants effectuent l'opération en son nom :

  • Compte utilisateur : compte à partir duquel vous exécutez les commandes d'importation et d'exportation.
  • Compte de service Cloud Build : Compte de service Cloud Build par défaut créé lorsque l'outil d'importation ou d'exportation active l'API Cloud Build.
  • Compte de service Compute Engine : compte de service Compute Engine par défaut ou personnalisé qui est requis pour le workflow d'importation et d'exportation.

Attribuer les rôles requis à votre compte utilisateur

Pour importer ou exporter des images, votre compte utilisateur a besoin des rôles suivants :

  • Rôle Administrateur de l'espace de stockage (roles/storage.admin)
  • Rôle Lecteur (roles/viewer)
  • Rôle Administrateur IAM de projet (roles/resourcemanager.projectIamAdmin)
  • Rôle Éditeur Cloud Build (roles/cloudbuild.builds.editor)

Console

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

    Accéder à IAM et administration

  2. Recherchez votre compte, puis cliquez sur Modifier.

  3. Dans la liste Sélectionner un rôle, sélectionnez les rôles suivants :

    • Cloud Storage > Administrateur de l'espace de stockage
    • Projet > Lecteur
    • Resource Manager > Administrateur IAM de projet
    • Cloud Build > Éditeur Cloud Build
  4. Enregistrez les modifications.

gcloud

Dans les étapes suivantes, vous allez utiliser la commande gcloud projects add-iam-policy-binding pour attribuer les rôles requis au niveau du projet.

  1. Attribuez le rôle roles/storage.admin :

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

    Remplacez l'élément suivant :

    • PROJECT_ID : ID de projet Google Cloud de votre projet.
    • MEMBER : compte qui exécute les commandes d'importation et d'exportation, par exemple user:export-user@gmail.com.
  2. Attribuez le rôle roles/viewer :

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/viewer'
    
  3. Attribuez le rôle roles/resourcemanager.projectIamAdmin :

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. Attribuez le rôle roles/cloudbuild.builds.editor :

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/cloudbuild.builds.editor'
    

REST

  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.

  2. Pour attribuer les rôles requis à votre compte, modifiez la stratégie à l'aide d'un éditeur de texte.

    Par exemple, pour accorder le rôle requis à votre compte user:export-user@gmail.com, ajoutez la liaison suivante à la stratégie :

    {
       {
         "role":"roles/storage.admin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/viewer",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/resourcemanager.projectIamAdmin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/cloudbuild.builds.editor",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
    }
    
  3. Pour écrire la stratégie mise à jour, utilisez 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
    

Attribuer les rôles requis au compte de service Cloud Build

Lorsque vous utilisez la console Google Cloud ou gcloud CLI pour importer ou exporter des images pour la première fois, l'outil tente d'activer l'API Cloud Build et d'attribuer les rôles requis au compte de service Cloud Build.

  • Rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator)
  • Rôle Utilisateur du compte de service (roles/iam.serviceAccountUser)
  • Rôle Administrateur de Compute (roles/compute.admin)

    Pour éviter d'accorder le rôle Administrateur de Compute, vous pouvez créer un rôle personnalisé avec les autorisations IAM Compute Engine suivantes et l'attribuer au compte de service Cloud Build :

  • Rôle d'utilisateur de réseau de Compute (roles/compute.networkUser)

    Ce rôle n'est requis que lorsque vous importez ou exportez des images qui utilisent un VPC partagé.

    Dans le projet VPC partagé, attribuez le rôle "Utilisateur de réseau de Compute" au compte de service Cloud Build qui est situé dans le projet dans lequel vous importez ou exportez des images.

Toutefois, vous pouvez accorder manuellement ces rôles pour vous assurer que les autorisations requises sont en vigueur :

Console

  1. Après avoir activé l'API Cloud Build, accédez à la page IAM et administration du projet ou de l'organisation.

    Accéder à IAM et administration

  2. Recherchez le compte de service Cloud Build et cliquez sur Modifier.

  3. Si les rôles requis ne sont pas répertoriés, procédez comme suit :

    1. Cliquez sur Ajouter un autre rôle.
    2. Dans la liste Sélectionner un rôle, sélectionnez les rôles requis que vous souhaitez ajouter :

      • Compte de service > Créateur de jetons du compte de service
      • Compte de service > Utilisateur du compte de service
      • Compute Engine > Administrateur de Compute

        Vous pouvez également sélectionner le rôle Personnalisé. Consultez la section Autorisations requises pour le rôle personnalisé plus haut dans ce document.

    3. Cliquez sur Enregistrer afin d'enregistrer les modifications.

  4. Facultatif : si vous importez ou exportez des images qui utilisent un VPC partagé, sélectionnez le rôle "Utilisateur de réseau de Compute" dans le projet de VPC partagé :

    1. Dans le sélecteur de projet situé en haut de la console, sélectionnez le projet hôte de VPC partagé.
    2. Sur la page IAM et administration, cliquez sur Accorder l'accès.
    3. Dans le champ Nouveau compte principal, saisissez l'adresse e-mail du compte de service Cloud Build :
       PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
       
      Remplacez PROJECT_NUMBER par le numéro unique du projet dans lequel vous importez ou exportez des images.
    4. Dans la liste Sélectionner un rôle, sélectionnez Compute Engine > Utilisateur de réseau de Compute.
    5. Cliquez sur Enregistrer afin d'enregistrer les modifications.

gcloud

Dans les étapes suivantes, vous allez utiliser la commande gcloud projects add-iam-policy-binding pour attribuer les rôles requis au niveau du projet.

  1. Attribuez le rôle roles/compute.admin au compte de service Cloud Build. Pour éviter d'attribuer le rôle roles/compute.admin, vous pouvez créer un rôle personnalisé avec les autorisations requises, puis attribuer ce rôle au compte de service Cloud Build. Consultez la section Autorisations requises pour le rôle personnalisé plus haut dans ce document.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.admin'
    

    Remplacez l'élément suivant :

  2. Attribuez le rôle roles/iam.serviceAccountUser :

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. Attribuez le rôle roles/iam.serviceAccountTokenCreator :

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. Facultatif : Si vous exportez ou importez des images qui utilisent des VPC partagés, accordez le rôle roles/compute.networkUser :

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.networkUser'
    

    Remplacez les éléments suivants :

    • HOST_PROJECT_ID : ID du projet hôte où se trouve le VPC partagé.
    • PROJECT_NUMBER : numéro unique du projet dans lequel vous importez ou exportez des images.

REST

  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.

  2. Pour attribuer les rôles requis à votre compte, modifiez la stratégie à l'aide d'un éditeur de texte.

    Par exemple, pour accorder les rôles requis à serviceAccount:12345@cloudbuild.gserviceaccount.com, ajoutez la liaison suivante à la stratégie :

    {
       {
         "role":"roles/compute.admin",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/iam.serviceAccountUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
      {
         "roles":"roles/iam.serviceAccountTokenCreator",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    

    Pour éviter d'attribuer le rôle roles/compute.admin, vous pouvez créer un rôle personnalisé avec les autorisations requises, puis attribuer ce rôle au compte de service Cloud Build. Consultez la section Autorisations requises pour le rôle personnalisé plus haut dans ce document.

  3. Facultatif : Si vous exportez ou importez des images qui utilisent un VPC partagé, accordez le rôle roles/compute.networkUser dans le projet de VPC partagé.

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

    Remplacez HOST_PROJECT_ID par l'ID du projet de VPC partagé.

    Ajoutez la liaison IAM suivante au compte de service Cloud Build :

    {
       {
         "roles":"roles/compute.networkUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    
  4. Pour écrire la stratégie mise à jour, utilisez 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
    

Pour en savoir plus sur la gestion des accès aux ressources, consultez la page Accorder, modifier et révoquer les accès à des ressources.

Attribuer les rôles requis au compte de service Compute Engine

Lorsque vous utilisez la console Google Cloud ou gcloud CLI pour importer ou exporter des images pour la première fois, l'outil tente d'attribuer les rôles requis au compte de service Compute Engine par défaut. Par défaut, ce compte dispose du rôle IAM Éditeur (roles/editor) sur le projet, ce qui est suffisant pour le processus. Votre compte de service Compute Engine doit disposer des rôles suivants :

  • Rôle Administrateur Compute Storage (roles/compute.storageAdmin) : requis pour l'exportation et l'importation d'images de VM
  • Rôle Lecteur des objets de l'espace de stockage (roles/storage.objectViewer) : requis pour importer des images de VM
  • Rôle Administrateur des objets de l'espace de stockage (roles/storage.objectAdmin) : requis pour exporter des images de VM

Toutefois, si vous avez modifié les rôles et les autorisations par défaut du compte de service Compute Engine, vérifiez que les rôles suivants sont toujours appliqués au compte de service.

Console

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

    Accéder à IAM et administration

  2. Recherchez le compte de service Compute Engine, puis cliquez sur Modifier.

  3. Dans la liste Sélectionner un rôle, sélectionnez les rôles suivants :

    • Compute Engine > Administrateur Compute Storage
    • Cloud Storage > Lecteur des objets de l'espace de stockage
    • Cloud Storage > Administrateur des objets de l'espace de stockage
  4. Enregistrez les modifications.

gcloud

Dans les étapes suivantes, vous allez utiliser la commande gcloud projects add-iam-policy-binding pour attribuer les rôles requis au niveau du projet.

  1. Attribuez le rôle roles/compute.storageAdmin :

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/compute.storageAdmin'
    
  2. Si vous importez une image, attribuez le rôle roles/storage.objectViewer :

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectViewer'
    
  3. Si vous exportez une image, attribuez le rôle roles/storage.objectAdmin :

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectAdmin'
    

REST

  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.

  2. Pour attribuer les rôles requis à votre compte, modifiez la stratégie à l'aide d'un éditeur de texte.

    Par exemple, pour attribuer les rôles requis à serviceAccount:12345-compute@developer.gserviceaccount.com afin d'importer une image, ajoutez la liaison suivante à la stratégie :

    {
       {
         "role":"roles/compute.storageAdmin",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/storage.objectViewer",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
    }
    
  3. Pour écrire la stratégie mise à jour, utilisez 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
    

Si vous ne souhaitez pas utiliser le compte de service Compute Engine par défaut, vous pouvez spécifier un compte de service géré par l'utilisateur à l'aide de l'option --compute-service-account dans les commandes d'importation et d'exportation gcloud. Pour plus d'informations sur l'utilisation du compte de service Compute Engine personnalisé, consultez les ressources suivantes :

Étape suivante