Prerequisiti per l'importazione e l'esportazione di immagini VM


Questo documento descrive i prerequisiti per l'importazione e l'esportazione di immagini su Compute Engine.

Puoi condividere istanze di macchine virtuali (VM), file di dischi virtuali e immagini macchina da altri ambienti cloud o dal tuo ambiente on-premise importando ed esportando immagini da Cloud Storage. Il seguente elenco di controllo riassume i requisiti che devi soddisfare prima di importare ed esportare le immagini:

  1. Configura l'accesso a un bucket Cloud Storage
  2. Concedi i ruoli richiesti al tuo account utente
  3. Concedi i ruoli richiesti al service account Cloud Build
  4. Concedi i ruoli richiesti al service account Compute Engine

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso ai Google Cloud servizi e alle API. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.
      3. REST

        Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        Per saperne di più, consulta la sezione Autenticarsi per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud .

Configurare l'accesso a un bucket Cloud Storage

Devi avere accesso a un bucket Cloud Storage che lo strumento di importazione o esportazione può utilizzare. Se non hai un bucket Cloud Storage, consulta Creare un bucket Cloud Storage.

Per configurare l'accesso al tuo bucket Cloud Storage, consulta Concedere i ruoli richiesti al tuo account e Service account Compute Engine.

  • Se esporti un'immagine, lo strumento di esportazione la carica nel bucket Cloud Storage.

  • Se importi un'immagine, devi prima caricarla nel bucket Cloud Storage. Lo strumento di importazione scarica il file dal bucket Cloud Storage a Compute Engine, quindi crea un'immagine in Compute Engine da questo file del disco.

Concedi i ruoli IAM richiesti

Lo strumento di importazione ed esportazione di immagini VM richiede i seguenti account per eseguire l'operazione per suo conto:

  • Account utente. L'account da cui esegui i comandi di importazione ed esportazione.
  • Service account Cloud Build. Un account di servizio Cloud Build predefinito creato quando lo strumento di importazione o esportazione abilita l'API Cloud Build.
  • Service account Compute Engine. Un account di servizio Compute Engine predefinito o personalizzato richiesto per il flusso di lavoro di importazione ed esportazione.

Concedi i ruoli richiesti al tuo account utente

Per importare o esportare immagini, il tuo account utente richiede i seguenti ruoli:

  • Ruolo Amministratore Storage (roles/storage.admin)
  • Ruolo Visualizzatore (roles/viewer)
  • Ruolo Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin)
  • Ruolo Editor Cloud Build (roles/cloudbuild.builds.editor)

Console

  1. Vai alla pagina IAM e amministrazione del progetto o dell'organizzazione.

    Vai a IAM e amministrazione

  2. Individua il tuo account e fai clic su Modifica.

  3. Nell'elenco Seleziona un ruolo, seleziona i seguenti ruoli:

    • Cloud Storage > Amministratore Storage
    • Progetto > Visualizzatore
    • Resource Manager > Amministratore IAM progetto
    • Cloud Build > Editor Cloud Build
  4. Salva le modifiche.

gcloud

Nei passaggi seguenti, utilizzerai il gcloud projects add-iam-policy-binding comando per concedere i ruoli richiesti a livello di progetto.

  1. Concedi il ruolo roles/storage.admin:

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

    Sostituisci quanto segue:

    • PROJECT_ID: l'Google Cloud ID progetto del tuo progetto
    • MEMBER: l'account che esegue i comandi di importazione ed esportazione, ad esempio user:export-user@gmail.com
  2. Concedi il ruolo roles/viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/viewer'
    
  3. Concedi il ruolo roles/resourcemanager.projectIamAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. Concedi il ruolo roles/cloudbuild.builds.editor:

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

REST

  1. Leggi le norme esistenti con il metodo getIamPolicy della risorsa. Per i progetti, utilizza il metodo projects.getIamPolicy.

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

    Sostituisci PROJECT_ID con l'ID progetto, ad esempio my-project-1.

  2. Per concedere i ruoli richiesti al tuo account, modifica il criterio con un editor di testo.

    Ad esempio, per concedere il ruolo richiesto al tuo account user:export-user@gmail.com, aggiungi il seguente binding al criterio:

    {
       {
         "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. Per scrivere la policy aggiornata, utilizza il metodo setIamPolicy.

    Ad esempio, per impostare una policy a livello di progetto, utilizza il metodo project.setIamPolicy. Nel corpo della richiesta, fornisci il criterio IAM aggiornato del passaggio precedente.

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

Concedi i ruoli richiesti al account di servizio Cloud Build

Quando utilizzi la console Google Cloud o gcloud CLI per importare o esportare immagini per la prima volta, lo strumento tenta di attivare l'API Cloud Build e concedere i ruoli richiesti al service account Cloud Build.

  • Ruolo Creatore token service account (roles/iam.serviceAccountTokenCreator)
  • Ruolo Service Account User (roles/iam.serviceAccountUser)
  • Ruolo Amministratore Compute (roles/compute.admin)

    Per evitare di concedere il ruolo Amministratore Compute, puoi creare un ruolo personalizzato con le seguenti autorizzazioni IAM di Compute Engine e concederlo all'account di servizio Cloud Build:

  • Ruolo Utente di rete Compute (roles/compute.networkUser)

    Questo ruolo è obbligatorio solo quando importi o esporti immagini che utilizzano il VPC condiviso.

    Nel progetto VPC condiviso, concedi il ruolo Utente di rete Compute al account di servizio Cloud Build che si trova nel progetto in cui importi o esporti le immagini.

Tuttavia, puoi concedere manualmente questi ruoli per assicurarti che le autorizzazioni richieste siano effettive:

Console

  1. Dopo aver abilitato l'API Cloud Build, vai alla pagina IAM e amministrazione del progetto o dell'organizzazione.

    Vai a IAM e amministrazione

  2. Individua il account di servizio Cloud Build e fai clic su Modifica.

  3. Se i ruoli richiesti non sono elencati, procedi nel seguente modo:

    1. Fai clic su Aggiungi un altro ruolo.
    2. Nell'elenco Seleziona un ruolo, seleziona i ruoli richiesti che vuoi aggiungere:

      • Service Account > Creatore token service account
      • Service Account > Service Account User
      • Compute Engine > Amministratore Compute

        In alternativa, puoi selezionare il ruolo Personalizzato. Consulta Autorizzazioni richieste per il ruolo personalizzato in precedenza in questo documento.

    3. Fai clic su Salva per salvare le modifiche.

  4. (Facoltativo) Se importi o esporti immagini che utilizzano il VPC condiviso, seleziona il ruolo Utente di rete Compute nel progetto VPC condiviso:

    1. Nel selettore dei progetti nella parte superiore della console, seleziona il progetto host VPC condiviso.
    2. Nella pagina IAM e amministrazione, fai clic su Concedi l'accesso.
    3. Nel campo Nuove entità, inserisci l'indirizzo email dell'account di servizio Cloud Build:
       PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
       
      Sostituisci PROJECT_NUMBER con il numero univoco del progetto in cui importi o esporti le immagini.
    4. Nell'elenco Seleziona un ruolo, seleziona Compute Engine > ruolo Utente rete Compute.
    5. Fai clic su Salva per salvare le modifiche.

gcloud

Nei passaggi seguenti, utilizzerai il gcloud projects add-iam-policy-binding comando per concedere i ruoli richiesti a livello di progetto.

  1. Concedi il ruolo roles/compute.admin al service account Cloud Build. Per evitare di concedere il ruolo roles/compute.admin, puoi creare un ruolo personalizzato con le autorizzazioni richieste e poi concederlo al account di servizio Cloud Build. Consulta la sezione Autorizzazioni richieste per il ruolo personalizzato all'inizio di questo documento.

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

    Sostituisci quanto segue:

  2. Concedi il ruolo roles/iam.serviceAccountUser:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. Concedi il ruolo roles/iam.serviceAccountTokenCreator:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. (Facoltativo) Se esporti o importi immagini che utilizzano il VPC condiviso, concedi il ruolo roles/compute.networkUser:

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

    Sostituisci quanto segue:

    • HOST_PROJECT_ID: l'ID del progetto host in cui si trova la reteVPC condivisoa
    • PROJECT_NUMBER: il numero univoco del progetto in cui importi o esporti le immagini

REST

  1. Leggi le norme esistenti con il metodo getIamPolicy della risorsa. Per i progetti, utilizza il metodo projects.getIamPolicy.

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

    Sostituisci PROJECT_ID con l'ID progetto, ad esempio my-project-1.

  2. Per concedere i ruoli richiesti al tuo account, modifica il criterio con un editor di testo.

    Ad esempio, per concedere i ruoli richiesti a serviceAccount:12345@cloudbuild.gserviceaccount.com, aggiungi il seguente binding al criterio:

    {
       {
         "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"
         ]
       }
    }
    

    Per evitare di concedere il ruolo roles/compute.admin, puoi creare un ruolo personalizzato con le autorizzazioni richieste e poi concederlo al account di servizio Cloud Build. Consulta la sezione Autorizzazioni richieste per il ruolo personalizzato all'inizio di questo documento.

  3. (Facoltativo) Se esporti o importi immagini che utilizzano il VPC condiviso, concedi il ruolo roles/compute.networkUser nel progetto VPC condiviso.

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

    Sostituisci HOST_PROJECT_ID con l'ID del progetto VPC condiviso.

    Aggiungi il seguente binding IAM al service account Cloud Build:

    {
       {
         "roles":"roles/compute.networkUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    
  4. Per scrivere la policy aggiornata, utilizza il metodo setIamPolicy.

    Ad esempio, per impostare una policy a livello di progetto, utilizza il metodo project.setIamPolicy. Nel corpo della richiesta, fornisci il criterio IAM aggiornato del passaggio precedente.

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

Per ulteriori informazioni sulla gestione dell'accesso alle risorse, vedi Concessione, modifica e revoca dell'accesso alle risorse.

Concedi i ruoli richiesti al account di servizio Compute Engine

Quando utilizzi la console Google Cloud o gcloud CLI per importare o esportare immagini per la prima volta, lo strumento tenta di concedere i ruoli richiesti all'account di servizio Compute Engine predefinito.

A seconda della configurazione della policy dell'organizzazione, al account di servizio predefinito potrebbe essere concesso automaticamente il ruolo Editor nel tuo progetto. Ti consigliamo vivamente di disattivare la concessione automatica dei ruoli applicando il vincolo iam.automaticIamGrantsForDefaultServiceAccounts del criterio dell'organizzazione. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo vincolo viene applicato per impostazione predefinita.

Se disattivi la concessione automatica dei ruoli, devi decidere quali ruoli concedere agli account di servizio predefiniti e poi concederli personalmente.

Se l'account di servizio predefinito dispone già del ruolo Editor, ti consigliamo di sostituirlo con ruoli meno permissivi.Per modificare in modo sicuro i ruoli dell'account di servizio, utilizza Policy Simulator per visualizzare l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.

Il account di servizio Compute Engine deve avere i seguenti ruoli:

  • Ruolo Amministratore archiviazione Compute (roles/compute.storageAdmin): richiesto sia per l'esportazione che per l'importazione di immagini VM
  • Ruolo Storage Object Viewer (roles/storage.objectViewer): richiesto per l'importazione di immagini VM
  • Ruolo Amministratore oggetti Storage (roles/storage.objectAdmin): richiesto per l'esportazione di immagini VM

Console

  1. Vai alla pagina IAM e amministrazione del progetto o dell'organizzazione.

    Vai a IAM e amministrazione

  2. Individua il account di servizio Compute Engine e fai clic su Modifica.

  3. Nell'elenco Seleziona un ruolo, seleziona i seguenti ruoli:

    • Compute Engine > Amministratore spazio di archiviazione Compute
    • Cloud Storage > Storage Object Viewer
    • Cloud Storage > Amministratore oggetti Storage
  4. Salva le modifiche.

gcloud

Nei passaggi seguenti, utilizzerai il gcloud projects add-iam-policy-binding comando per concedere i ruoli richiesti a livello di progetto.

  1. Concedi il ruolo roles/compute.storageAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/compute.storageAdmin'
    
  2. Se importi un'immagine, concedi il ruolo roles/storage.objectViewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectViewer'
    
  3. Se esporti un'immagine, concedi il ruolo 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. Leggi le norme esistenti con il metodo getIamPolicy della risorsa. Per i progetti, utilizza il metodo projects.getIamPolicy.

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

    Sostituisci PROJECT_ID con l'ID progetto, ad esempio my-project-1.

  2. Per concedere i ruoli richiesti al tuo account, modifica il criterio con un editor di testo.

    Ad esempio, per concedere i ruoli richiesti a serviceAccount:12345-compute@developer.gserviceaccount.com per importare un'immagine, aggiungi il seguente binding al criterio:

    {
       {
         "role":"roles/compute.storageAdmin",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/storage.objectViewer",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
    }
    
  3. Per scrivere la policy aggiornata, utilizza il metodo setIamPolicy.

    Ad esempio, per impostare una policy a livello di progetto, utilizza il metodo project.setIamPolicy. Nel corpo della richiesta, fornisci il criterio IAM aggiornato del passaggio precedente.

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

Se non vuoi utilizzare il account di servizio Compute Engine predefinito, puoi specificare un service account gestito dall'utente utilizzando il flag --compute-service-account nei comandi di importazione ed esportazione gcloud. Per ulteriori informazioni sull'utilizzo di un account di servizio Compute Engine personalizzato, consulta le seguenti risorse:

Passaggi successivi