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

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'
    

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.

  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 Cloud Console ou l'outil gcloud 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 :

  • Facultatif : Rôle Utilisateur de réseau de Compute (roles/compute.networkUser)

    Pour exporter ou importer des images qui utilisent des VPC partagés, vous devez attribuer ce rôle au compte de service Cloud Build.

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.

      • Facultatif : Compute Engine > Utilisateur de réseau de Compute

  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.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_NUM@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_NUM@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_NUM@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_NUM@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.networkUser'
    

    Remplacez HOST_PROJECT_ID par l'ID du projet dans lequel se trouve le VPC partagé.

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.

  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"
         ]
       }
       {
         "roles":"roles/compute.networkUser",
         "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. 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 Cloud Console ou l'outil gcloud 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_NUM-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_NUM-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_NUM-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectAdmin'
    

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.

  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