Pré-requisitos para importar e exportar imagens de VM


Neste documento, descrevemos os pré-requisitos para importar e exportar imagens no Compute Engine.

É possível compartilhar instâncias de máquina virtual (VM), arquivos de disco virtual e imagens de máquina de outros ambientes de nuvem ou do 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 os papéis necessários à sua conta de usuário
  3. Conceder 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

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    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.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      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 pode 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 à conta e conta de serviço do Compute Engine.

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

  • Se você estiver importando uma imagem, será necessário primeiro fazer o upload dela para o bucket do Cloud Storage. A ferramenta de importação faz o download do arquivo do bucket do Cloud Storage para o Compute Engine e, em seguida, cria uma imagem no Compute Engine desse arquivo de disco.

Conceder os papéis do IAM necessários

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

  • Conta de usuário. A conta da 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 os papéis necessários à sua conta de usuário

Para importar ou exportar imagens, sua conta de usuário requer os seguintes papéis:

  • Papel de administrador de armazenamento (roles/storage.admin)
  • Papel de leitor (roles/viewer)
  • Papel de Administrador de projetos do IAM (roles/resourcemanager.projectIamAdmin)
  • Papel de editor do Cloud Build (roles/cloudbuild.builds.editor)

Console

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

    Acessar IAM e administrador

  2. Localize sua conta e clique em Editar.

  3. Na lista Selecionar um papel, selecione os seguintes papéis:

    • Cloud Storage > Administrador do Storage
    • Projeto > Leitor
    • Gerente de recursos > Administrador de IAM do projeto
    • Cloud Build > Editor do Cloud Build
  4. Salve as alterações.

gcloud

Nas etapas a seguir, use 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/storage.admin:

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

    Substitua:

    • PROJECT_ID: o ID do projeto do Google Cloud 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 o papel roles/viewer:

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

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. Conceda o papel 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 atual com o respectivo 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, como 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 o papel necessário à sua conta user:export-user@gmail.com, adicione a seguinte vinculaçã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 de IAM atualizada da etapa anterior.

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

Conceder 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 a Conta de serviço do Cloud Build.

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

    Para evitar a concessão do papel de administrador do Compute, crie um papel personalizado com as seguintes permissões do IAM do Compute Engine e conceda o papel à Conta de serviço do Cloud Build:

  • Papel Usuário de rede do Compute (roles/compute.networkUser)

    Esse papel é necessário somente quando você importa ou exporta imagens que usam a 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, é possível conceder estes papéis manualmente para garantir que as permissões necessárias estejam aplicadas:

Console

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

    Acessar IAM e administrador

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

  3. Se os papéis necessários não estiverem listados, faça o seguinte:

    1. Clique em Adicionar outro papel.
    2. Na lista Selecionar um papel, selecione os papéis necessários que você quer adicionar:

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

        Como alternativa, é possível selecionar o papel Personalizado. Consulte Permissões necessárias para o papel personalizado anteriormente neste documento.

    3. Clique em Salvar para armazenar as mudanças.

  4. Opcional: se você estiver importando ou exportando imagens que usam VPC compartilhada, selecione o papel Usuário de rede do Compute no projeto VPC compartilhado:

    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 em que você importa ou exporta imagens.
    4. Na lista Selecionar um papel, selecione o papel Compute Engine > Usuário da rede do Compute.
    5. Clique em Salvar para armazenar as mudanças.

gcloud

Nas etapas a seguir, use 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 conceder o papel roles/compute.admin, crie um papel personalizado com as permissões necessárias e conceda esse papel à conta de serviço do Cloud Build. Consulte Permissões necessárias para o papel personalizado anteriormente neste documento.

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

    Substitua:

  2. Conceda o papel roles/iam.serviceAccountUser:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. Conceda o papel 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 VPCs compartilhadas, conceda o papel roles/compute.networkUser:

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

    Substitua:

    • HOST_PROJECT_ID: o ID do projeto host em que a VPC compartilhada está localizada.
    • PROJECT_NUMBER: o número exclusivo do projeto em que você importa ou exporta imagens

REST

  1. Leia a política atual com o respectivo 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, como 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 os papéis necessários 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, crie um papel personalizado com as permissões necessárias e conceda esse papel à conta de serviço do Cloud Build. Consulte Permissões necessárias para o papel personalizado anteriormente neste documento.

  3. Opcional: se você estiver exportando ou importando imagens que usam VPC compartilhada, conceda o papel 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 da 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 de IAM atualizada da etapa anterior.

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

Para mais informações sobre como gerenciar o acesso a recursos, consulte Como conceder, alterar e revogar o 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. Por padrão, essa conta tem o papel de Editor do IAM (roles/editor) no projeto, o que é suficiente para o processo. Sua conta de serviço do Compute Engine precisa ter os seguintes papéis:

  • Papel de administrador do Compute Storage (roles/compute.storageAdmin): necessário para exportar e importar imagens de VM
  • Papel de leitor de objetos do Storage (roles/storage.objectViewer): necessário para importar imagens de VM
  • Papel de administrador de objetos do Storage (roles/storage.objectAdmin): obrigatório para exportar imagens de VM

No entanto, se você modificou os papéis e as permissões padrão da conta de serviço do Compute Engine, verifique se ela ainda tem os papéis necessários.

Console

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

    Acessar IAM e administrador

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

  3. Na lista Selecionar um papel, selecione os seguintes papéis:

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

gcloud

Nas etapas a seguir, use 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.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 o papel 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 o papel 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 atual com o respectivo 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, como 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 os papéis necessários a serviceAccount:12345-compute@developer.gserviceaccount.com para importar uma imagem, adicione a seguinte vinculaçã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 de IAM atualizada da etapa anterior.

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

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

A seguir