Pré-requisitos para importar e exportar imagens de VMs


Este documento descreve os pré-requisitos para importar e exportar imagens no Compute Engine.

Pode partilhar instâncias de máquinas virtuais (MV), ficheiros de discos virtuais e imagens de máquinas de outros ambientes na nuvem ou do seu ambiente nas instalações, importando e exportando imagens do Cloud Storage. A seguinte lista de verificação resume os requisitos que tem de cumprir antes de importar e exportar imagens:

  1. Configure o acesso a um contentor do Cloud Storage
  2. Conceda as funções necessárias à sua conta de utilizador
  3. Conceda as funções necessárias à conta de serviço do Cloud Build
  4. Conceda as funções necessárias à conta de serviço do Compute Engine

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:

    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. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Configure o acesso a um contentor do Cloud Storage

Tem de ter acesso a um contentor do Cloud Storage que a ferramenta de importação ou exportação possa usar. Se não tiver um contentor do Cloud Storage, consulte o artigo Crie um contentor do Cloud Storage.

Para configurar o acesso ao seu contentor do Cloud Storage, consulte os artigos Conceda as funções necessárias à sua conta e Conta de serviço do Compute Engine.

  • Se estiver a exportar uma imagem, a ferramenta de exportação carrega a imagem para o contentor do Cloud Storage.

  • Se estiver a importar uma imagem, primeiro tem de carregar a imagem para o contentor do Cloud Storage. A ferramenta de importação transfere o ficheiro do contentor do Cloud Storage para o Compute Engine e, em seguida, cria uma imagem no Compute Engine a partir desse ficheiro de disco.

Conceda as funções de IAM necessárias

A ferramenta de importação e exportação de imagens de VMs requer que as seguintes contas realizem a operação em seu nome:

  • Conta de utilizador. A conta a partir da qual está a executar os comandos de importação e exportação.
  • Conta de serviço do Cloud Build. Uma conta de serviço do Cloud Build predefinida que é criada quando a ferramenta de importação ou exportação ativa a API Cloud Build.
  • Conta de serviço do Compute Engine. Uma conta de serviço do Compute Engine predefinida ou personalizada que é necessária para o fluxo de trabalho de importação e exportação.

Conceda as funções necessárias à sua conta de utilizador

Para importar ou exportar imagens, a sua conta de utilizador requer as seguintes funções:

  • Função de administrador de armazenamento (roles/storage.admin)
  • Função de visitante (roles/viewer)
  • Função de administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin)
  • Função de editor do Cloud Build (roles/cloudbuild.builds.editor)

Consola

  1. Aceda à página IAM e administrador do projeto ou da organização.

    Aceda a IAM e administração

  2. Localize a sua conta e clique em Editar.

  3. Na lista Selecionar uma função, selecione as seguintes funções:

    • Cloud Storage > Administrador de armazenamento
    • Projeto > Visualizador
    • Resource Manager > Administrador de IAM do projeto
    • Cloud Build > Editor do Cloud Build
  4. Guarde as alterações.

gcloud

Nos passos seguintes, vai usar o comando gcloud projects add-iam-policy-binding para conceder as funções necessárias ao nível do projeto.

  1. Conceda a função de roles/storage.admin:

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

    Substitua o seguinte:

    • PROJECT_ID: o Google Cloud ID do projeto do seu projeto
    • MEMBER: a conta que executa os comandos de importação e exportação, por exemplo, user:export-user@gmail.com
  2. Conceda a função de roles/viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/viewer'
    
  3. Conceda a função de roles/resourcemanager.projectIamAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. Conceda a função de roles/cloudbuild.builds.editor:

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

REST

  1. Leia a política existente com o método getIamPolicy do recurso. Para projetos, use o método projects.getIamPolicy.

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

    Substitua PROJECT_ID pelo ID do projeto, por exemplo, my-project-1.

  2. Para conceder as funções necessárias à sua conta, edite a política com um editor de texto.

    Por exemplo, para conceder a função necessária à sua conta user:export-user@gmail.com, adicione a seguinte associação à política:

    {
       {
         "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. Para escrever a política atualizada, use o método setIamPolicy.

    Por exemplo, para definir uma política ao nível do projeto, use o método project.setIamPolicy. No corpo do pedido, indique a política de IAM atualizada do passo anterior.

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

Conceda as funções necessárias à conta de serviço do Cloud Build

Quando usa a Google Cloud consola ou a CLI gcloud para importar ou exportar imagens pela primeira vez, a ferramenta tenta ativar a API Cloud Build e conceder as funções necessárias à conta de serviço do Cloud Build.

A conta de serviço usada para o Cloud Build depende de ter usado o Cloud Build no projeto antes de maio de 2024. Se sim, a conta de serviço do Cloud Build antiga é usada para compilações futuras. Caso contrário, é usada a conta de serviço do Compute Engine predefinida.

  • Função de criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator)
  • Função de utilizador da conta de serviço (roles/iam.serviceAccountUser)
  • Função de administrador do Compute (roles/compute.admin)

    Para evitar conceder a função de administrador de computação, pode criar uma função personalizada com as seguintes autorizações de IAM do Compute Engine e concedê-la à conta de serviço do Cloud Build:

  • Função de utilizador da rede de computação (roles/compute.networkUser)

    Esta função só é necessária quando importa ou exporta imagens que usam a VPC partilhada.

    No projeto de VPC partilhada, conceda a função de utilizador da rede de computação à conta de serviço do Cloud Build localizada no projeto onde importa ou exporta imagens.

No entanto, pode conceder manualmente estas funções para garantir que as autorizações necessárias estão em vigor:

Consola

  1. Depois de ativar a API Cloud Build, aceda à página IAM e administração do projeto ou da organização.

    Aceda a IAM e administração

  2. Localize a conta de serviço do Cloud Build e clique em Editar.

  3. Se as funções necessárias não estiverem listadas, faça o seguinte:

    1. Clique em Adicionar outra função.
    2. Na lista Selecionar uma função, selecione as funções necessárias que quer adicionar:

      • Conta de serviço > Criador de tokens de contas de serviço
      • Conta de serviço > Utilizador da conta de serviço
      • Compute Engine > Administrador de computação

        Em alternativa, pode selecionar a função Personalizada. Consulte as autorizações necessárias para a função personalizada anteriormente neste documento.

    3. Clique em Guardar para guardar as alterações.

  4. Opcional: se estiver a importar ou exportar imagens que usam a VPC partilhada, selecione a função de utilizador da rede de computação no projeto de VPC partilhada:

    1. No seletor de projetos na parte superior da consola, selecione o projeto anfitrião da VPC partilhada.
    2. Na página IAM e administrador, clique em Conceder acesso.
    3. No campo Novos membros, introduza o endereço de email da conta de serviço do Cloud Build:
       PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
       
      Substitua PROJECT_NUMBER pelo número único do projeto onde importa ou exporta imagens.
    4. Na lista Selecionar uma função, selecione Compute Engine > função Utilizador da rede de computação.
    5. Clique em Guardar para guardar as alterações.

gcloud

Nos passos seguintes, vai usar o comando gcloud projects add-iam-policy-binding para conceder as funções necessárias ao nível do projeto.

  1. Conceda a função roles/compute.admin à conta de serviço do Cloud Build. Para evitar conceder a função roles/compute.admin, pode criar uma função personalizada com as autorizações necessárias e, em seguida, conceder essa função à conta de serviço do Cloud Build. Consulte as autorizações necessárias para a função personalizada anteriormente neste documento.

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

    Substitua o seguinte:

  2. Conceda a função de roles/iam.serviceAccountUser:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. Conceda a função de roles/iam.serviceAccountTokenCreator:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. Opcional: se estiver a exportar ou importar imagens que usam a VPC partilhada, conceda a função roles/compute.networkUser:

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

    Substitua o seguinte:

    • HOST_PROJECT_ID: o ID do projeto anfitrião onde se encontra a VPC partilhada
    • PROJECT_NUMBER: o número exclusivo do projeto onde importa ou exporta imagens

REST

  1. Leia a política existente com o método getIamPolicy do recurso. Para projetos, use o método projects.getIamPolicy.

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

    Substitua PROJECT_ID pelo ID do projeto, por exemplo, my-project-1.

  2. Para conceder as funções necessárias à sua conta, edite a política com um editor de texto.

    Por exemplo, para conceder as funções necessárias a serviceAccount:12345@cloudbuild.gserviceaccount.com, adicione a seguinte associação à política:

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

    Para evitar conceder a função roles/compute.admin, pode criar uma função personalizada com as autorizações necessárias e, em seguida, conceder essa função à conta de serviço do Cloud Build. Consulte as autorizações necessárias para a função personalizada anteriormente neste documento.

  3. Opcional: se estiver a exportar ou importar imagens que usam a VPC partilhada, conceda a função roles/compute.networkUser no projeto de VPC partilhada.

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

    Substitua HOST_PROJECT_ID pelo ID do projeto de VPC partilhada.

    Adicione a seguinte associação do IAM à conta de serviço do Cloud Build:

    {
       {
         "roles":"roles/compute.networkUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    
  4. Para escrever a política atualizada, use o método setIamPolicy.

    Por exemplo, para definir uma política ao nível do projeto, use o método project.setIamPolicy. No corpo do pedido, indique a política de IAM atualizada do passo anterior.

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

Para mais informações sobre a gestão do acesso a recursos, consulte o artigo Conceder, alterar e revogar o acesso a recursos.

Conceda as funções necessárias à conta de serviço do Compute Engine

Quando usa a Google Cloud consola ou a CLI gcloud para importar ou exportar imagens pela primeira vez, a ferramenta tenta conceder as funções necessárias à conta de serviço predefinida do Compute Engine.

Consoante a configuração da política da organização, a conta de serviço predefinida pode receber automaticamente a função de editor no seu projeto. Recomendamos vivamente que desative a concessão automática de funções aplicando a restrição da política da organização iam.automaticIamGrantsForDefaultServiceAccounts. Se tiver criado a sua organização após 3 de maio de 2024, esta restrição é aplicada por predefinição.

Se desativar a concessão automática de funções, tem de decidir que funções conceder às contas de serviço predefinidas e, em seguida, conceder estas funções.

Se a conta de serviço predefinida já tiver a função de editor, recomendamos que substitua a função de editor por funções menos permissivas.Para modificar as funções da conta de serviço em segurança, use o Simulador de políticas para ver o impacto da alteração e, em seguida, conceda e revogue as funções adequadas.

A sua conta de serviço do Compute Engine tem de ter as seguintes funções:

  • Função de administrador do armazenamento do Compute (roles/compute.storageAdmin): necessária para exportar e importar imagens de VMs
  • Função de leitor de objetos de armazenamento (roles/storage.objectViewer): necessária para importar imagens de VMs
  • Função de administrador de objetos de armazenamento (roles/storage.objectAdmin): necessária para exportar imagens de VMs

Consola

  1. Aceda à página IAM e administrador do projeto ou da organização.

    Aceda a IAM e administração

  2. Localize a conta de serviço do Compute Engine e clique em Editar.

  3. Na lista Selecionar uma função, selecione as seguintes funções:

    • Compute Engine > Administrador de armazenamento do Compute
    • Cloud Storage > Visualizador de objetos de armazenamento
    • Cloud Storage > Administrador de objetos de armazenamento
  4. Guarde as alterações.

gcloud

Nos passos seguintes, vai usar o comando gcloud projects add-iam-policy-binding para conceder as funções necessárias ao nível do projeto.

  1. Conceda a função de 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 estiver a importar uma imagem, conceda a função 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 estiver a exportar uma imagem, conceda a função 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. Leia a política existente com o método getIamPolicy do recurso. Para projetos, use o método projects.getIamPolicy.

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

    Substitua PROJECT_ID pelo ID do projeto, por exemplo, my-project-1.

  2. Para conceder as funções necessárias à sua conta, edite a política com um editor de texto.

    Por exemplo, para conceder as funções necessárias a serviceAccount:12345-compute@developer.gserviceaccount.com para importar uma imagem, adicione a seguinte associação à política:

    {
       {
         "role":"roles/compute.storageAdmin",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/storage.objectViewer",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
    }
    
  3. Para escrever a política atualizada, use o método setIamPolicy.

    Por exemplo, para definir uma política ao nível do projeto, use o método project.setIamPolicy. No corpo do pedido, indique a política de IAM atualizada do passo anterior.

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

Se não quiser usar a conta de serviço do Compute Engine predefinida, pode especificar uma conta de serviço gerida pelo utilizador usando a flag --compute-service-account nos comandos de importação e exportação gcloud. Para mais informações sobre a utilização de uma conta de serviço do Compute Engine personalizada, consulte os seguintes recursos:

O que se segue?