Pré-requisitos para importar e exportar imagens de VM


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

Você pode compartilhar instâncias de máquina virtual (VM), arquivos de disco virtual e imagens de máquina de outros ambientes de nuvem ou do seu ambiente local importando e exportando imagens do Cloud Storage. A lista de verificação a seguir resume os requisitos que você precisa atender antes de importar e exportar imagens:

  1. Configurar o acesso a um bucket do Cloud Storage
  2. Conceda as funções necessárias à sua conta de usuário
  3. Conceda os papéis necessários à conta de serviço do Cloud Build
  4. Conceder os papéis necessários à conta de serviço do Compute Engine

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar 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. 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

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para 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.

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

Configurar o acesso a um bucket do Cloud Storage

Você precisa ter acesso a um bucket do Cloud Storage que a ferramenta de importação ou exportação possa usar. Se você não tiver um bucket do Cloud Storage, consulte Criar um bucket do Cloud Storage .

Para configurar o acesso ao bucket do Cloud Storage, consulte Conceder papéis necessários à sua conta e à conta de serviço do Compute Engine .

  • Se você estiver exportando uma imagem, a ferramenta de exportação fará upload da imagem para o intervalo do Cloud Storage.

  • Se estiver importando uma imagem, primeiro faça upload da imagem para o intervalo do Cloud Storage. A ferramenta de importação faz download do arquivo do bucket do Cloud Storage para o Compute Engine e, em seguida, cria uma imagem no Compute Engine a partir desse arquivo de disco.

Conceder papéis de IAM necessários

A ferramenta de importação e exportação de imagens VM requer as seguintes contas para executar a operação em seu nome:

  • Conta de usuário. A conta na qual você está executando os comandos de importação e exportação.
  • Conta de serviço do Cloud Build. Uma conta de serviço padrão do Cloud Build 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 padrão ou personalizada do Compute Engine necessária para o fluxo de trabalho de importação e exportação.

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

Para importar ou exportar imagens, sua conta de usuário requer as seguintes funções:

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

Console

  1. Acesse a página IAM e Admin do projeto ou organização.

    Vá para IAM e administrador

  2. Localize 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
    • Gerenciador de recursos > Administrador do IAM do projeto
    • Cloud Build > Editor do Cloud Build
  4. Salve suas alterações.

gcloud

Nas etapas a seguir, você usará o comando gcloud projects add-iam-policy-binding para conceder os papéis necessários no nível do projeto.

  1. Conceda a roles/storage.admin :

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

    Substitua o seguinte:

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

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

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

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

DESCANSAR

  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 os papéis necessários à 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 ligaçã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 gravar a política atualizada, use o método setIamPolicy .

    Por exemplo, para definir uma política no nível do projeto, use o método project.setIamPolicy . No corpo da solicitação, forneça a política IAM atualizada da etapa anterior.

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

Conceda os papéis necessários à conta de serviço do Cloud Build

Quando você usa o console do Google Cloud ou a CLI gcloud para importar ou exportar imagens pela primeira vez, a ferramenta tenta ativar a API Cloud Build e conceder os papéis necessários à conta de serviço do Cloud Build .

  • Função Criador de token de conta de serviço ( roles/iam.serviceAccountTokenCreator )
  • Função de usuário da conta de serviço ( roles/iam.serviceAccountUser )
  • Função de administrador do Compute ( roles/compute.admin )

    Para evitar a concessão do papel de administrador do Compute, você pode criar um papel personalizado com as seguintes permissões do IAM do Compute Engine e concedê-lo à conta de serviço do Cloud Build :

  • Função de usuário da rede do Compute ( roles/compute.networkUser )

    Essa função é necessária somente quando você importa ou exporta imagens que usam VPC compartilhada.

    No projeto de VPC compartilhada, conceda o papel de usuário da rede do Compute à conta de serviço do Cloud Build localizada no projeto em que você importa ou exporta imagens.

No entanto, você pode conceder manualmente essas funções para garantir que as permissões necessárias estejam em vigor:

Console

  1. Depois de ativar a API Cloud Build, acesse a página IAM e administrador do projeto ou organização.

    Vá para IAM e administrador

  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 você deseja adicionar:

      • Conta de serviço > Criador de token de conta de serviço
      • Conta de serviço > Usuário da conta de serviço
      • Compute Engine > Administrador do Compute

        Como alternativa, você pode selecionar a função personalizada . Consulte Permissões necessárias para a função personalizada anteriormente neste documento.

    3. Clique em Salvar para salvar as alterações.

  4. Opcional: se você estiver importando ou exportando imagens que usam VPC compartilhada, selecione a função de usuário da rede do Compute no projeto de VPC compartilhada:

    1. No seletor de projetos na parte superior do console, selecione o projeto host da VPC compartilhada.
    2. Na página IAM e administrador , clique em Conceder acesso .
    3. No campo Novos principais , insira o endereço de e-mail da conta de serviço do Cloud Build:
       PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
       
      Substitua PROJECT_NUMBER pelo número exclusivo do projeto onde você importa ou exporta imagens.
    4. Na lista Selecionar uma função , selecione Compute Engine > Função de usuário da rede do Compute .
    5. Clique em Salvar para salvar as alterações.

gcloud

Nas etapas a seguir, você usará o comando gcloud projects add-iam-policy-binding para conceder os papéis necessários no nível do projeto.

  1. Conceda o papel roles/compute.admin à conta de serviço do Cloud Build. Para evitar a concessão do papel roles/compute.admin , você pode criar um papel personalizado com as permissões necessárias e, em seguida, conceder esse papel à conta de serviço do Cloud Build. Consulte Permissõ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 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 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 você estiver exportando ou importando imagens que usam VPC compartilhada, 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 host onde a VPC compartilhada está localizada
    • PROJECT_NUMBER : o número exclusivo do projeto onde você importa ou exporta imagens

DESCANSAR

  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 os papéis necessários à 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 vinculaçã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 a concessão do papel roles/compute.admin , você pode criar um papel personalizado com as permissões necessárias e, em seguida, conceder esse papel à conta de serviço do Cloud Build. Consulte Permissões necessárias para a função personalizada anteriormente neste documento.

  3. Opcional: se você estiver exportando ou importando imagens que usam VPC compartilhada, conceda a função roles/compute.networkUser no projeto de VPC compartilhada.

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

    Substitua HOST_PROJECT_ID pelo ID do projeto de VPC compartilhada.

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

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

    Por exemplo, para definir uma política no nível do projeto, use o método project.setIamPolicy . No corpo da solicitação, forneça a política IAM atualizada da etapa anterior.

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

Para obter mais informações sobre como gerenciar o acesso a recursos, consulte Concessão, alteração e revogação de acesso a recursos .

Conceder os papéis necessários à conta de serviço do Compute Engine

Quando você usa o console do Google Cloud ou a CLI gcloud para importar ou exportar imagens pela primeira vez, a ferramenta tenta conceder os papéis necessários à conta de serviço padrão do Compute Engine .

Dependendo da configuração da política da sua organização, a conta de serviço padrão poderá receber automaticamente a função de Editor no seu projeto. É altamente recomendável desativar a concessão automática de função aplicando a restrição de política da organização iam.automaticIamGrantsForDefaultServiceAccounts . Se você criou sua organização após 3 de maio de 2024, essa restrição será aplicada por padrão.

Se você desabilitar a concessão automática de funções, deverá decidir quais funções conceder às contas de serviço padrão e, em seguida, conceder essas funções você mesmo.

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

Sua conta de serviço do Compute Engine precisa ter os seguintes papéis:

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

Console

  1. Acesse a página IAM e Admin do projeto ou organização.

    Vá para IAM e administrador

  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 do Compute Storage
    • Cloud Storage > Visualizador de objetos de armazenamento
    • Cloud Storage > Administrador de objetos de armazenamento
  4. Salve suas alterações.

gcloud

Nas etapas a seguir, você usará o comando gcloud projects add-iam-policy-binding para conceder os papéis necessários no nível do projeto.

  1. Conceda a 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 você estiver importando 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 você estiver exportando 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'
    

DESCANSAR

  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 os papéis necessários à 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 ligaçã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 gravar a política atualizada, use o método setIamPolicy .

    Por exemplo, para definir uma política no nível do projeto, use o método project.setIamPolicy . No corpo da solicitação, forneça a política IAM atualizada da etapa anterior.

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

Se não quiser usar a conta de serviço padrão do Compute Engine, você poderá especificar uma conta de serviço gerenciada pelo usuário usando a sinalização --compute-service-account nos comandos gcloud import e export. Para mais informações sobre como usar a conta de serviço personalizada do Compute Engine, consulte os seguintes recursos:

O que vem a seguir