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.

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console do Google Cloud para acessar os serviços e as APIs do Google Cloud, não é necessário configurar a autenticação.

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

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