Gerenciar o acesso a imagens personalizadas

Para permitir que os usuários criem, excluam, usem ou compartilhem suas imagens personalizadas, conceda a eles os papéis apropriados de gerenciamento de identidade e acesso (IAM). Neste documento, descrevemos as permissões necessárias do IAM para criar e gerenciar imagens personalizadas e como fornecê-las aos usuários.

Para informações gerais sobre como conceder acesso aos recursos do Compute Engine, consulte Como gerenciar o acesso aos recursos do Compute Engine. Para informações sobre o IAM, leia a documentação do IAM.

Antes de começar

Limitações

Em imagens, não é possível conceder papéis ao tipo de membro especial allUsers.

Conceder permissão para criar imagens personalizadas

É possível conceder aos usuários a capacidade de criar imagens personalizadas na sua organização ou projeto.

O Compute Engine oferece o papel Administrador do Computa Storage (roles/compute.storageAdmin) predefinido que pode ser atribuído aos usuários para que eles possam criar, excluir e gerenciar recursos relacionados ao armazenamento, incluindo imagens, discos e instantâneos. Se você precisar de um papel que permita somente a criação de imagens, crie um papel personalizado. No seu papel personalizado, inclua as seguintes permissões:

  • compute.images.create para criar novas imagens
  • compute.images.list para listar imagens no projeto
  • compute.disks.use se a imagem for criada a partir de um disco
  • compute.disks.list se os usuários precisarem listar todos os discos em um projeto

Se você permitir que um usuário crie imagens personalizadas no nível da organização, ele poderá criar imagens personalizadas para qualquer projeto dentro da organização.

Console

  1. No Console do Google Cloud, acesse a página IAM do projeto ou da organização.

    Acessar IAM

  2. Para adicionar um novo membro, clique em Conceder acesso.

  3. No campo Novos participantes, digite o endereço de e-mail da identidade a quem você quer conceder acesso.

    Exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  4. Na lista Selecionar um papel, selecione Compute Engine > Administrador do Compute Storage ou selecione um papel personalizado, caso tenha criado um.

  5. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  6. Salve as alterações.

gcloud

Para conceder o papel roles/compute.storageAdmin em um nível de organização, use o comando gcloud organizations add-iam-policy-binding:

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='roles/compute.storageAdmin'

Para conceder o papel roles/compute.storageAdmin para envolvidos no projeto, use o comando gcloud projects add-iam-policy-binding:

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

Substitua:

  • ORGANIZATION_ID ou PROJECT_ID: o ID da organização ou do projeto, por exemplo, my-organization-1 ou my-project-1;
  • MEMBER: uma identidade válida à qual você quer conceder o papel.

    Exemplo:

    • E-mail da Conta do Google: user:user@gmail.com
    • Grupo do Google: group:admins@googlegroups.com
    • Conta de serviço: serviceAccount:server@example.gserviceaccount.com
    • Domínio do Google Workspace: domain:example.com

API

  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.

    Para organizações, use o método organizations.getIamPolicy.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    Substitua ORGANIZATION_ID pelo ID da organização, por exemplo, 123456578920.

    O Compute Engine retorna a política atual na resposta.

  2. Para adicionar ou remover membros e os papéis associados, edite a política com um editor de texto. Use o seguinte formato para adicionar membros:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Por exemplo, para conceder o papel roles/compute.storageAdmin a group:admins@example.com, adicione a seguinte vinculação à política:

    {
     "members": [
       "group:admins@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. Grave a política atualizada usando 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
    

    Substitua PROJECT_ID pelo ID do projeto.

Conceder permissões para excluir imagens personalizadas

Dependendo das suas necessidades, é possível permitir que os usuários:

  • Excluir uma imagem específica
  • Excluir imagens de um projeto específico
  • Excluir imagens de qualquer projeto dentro de uma organização

Com a permissão no nível do projeto, os usuários podem excluir todas as imagens que pertencem a ele. Já a concessão de permissão no nível da organização permite que o usuário exclua as imagens dessa organização, seja qual for o projeto.

O Compute Engine oferece o papel Administrador do Computa Storage (roles/compute.storageAdmin) predefinido que pode ser atribuído aos usuários para que eles possam criar, excluir e gerenciar recursos relacionados ao armazenamento, incluindo imagens, discos e instantâneos. Se você precisar de um papel que permita somente a exclusão de imagens, crie um papel personalizado. No seu papel personalizado, inclua as permissões a seguir:

  • compute.images.delete para excluir imagens
  • compute.images.list se os usuários precisarem listar imagens no projeto ou na organização
  • compute.images.get para conseguir as imagens

Console

Para conceder permissão para excluir imagens específicas, faça o seguinte:

  1. No console do Google Cloud, acesse a página Imagens.

    Acessar "Imagens"

  2. Selecione as imagens às quais você quer conceder permissões.

  3. Para expandir a coluna de permissões, clique em Mostrar painel de informações.

  4. Para adicionar um ou mais membros, clique em Adicionar participante.

  5. No campo Novos participantes, digite o endereço de e-mail da identidade com a qual você quer compartilhar a imagem.

    Exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  6. Na lista Papel, mantenha o ponteiro do mouse sobre Compute Engine e selecione Administrador do Storage ou selecione um papel personalizado no Personalizado lista.

  7. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  8. Salve as alterações.

Para conceder permissão para excluir imagens de um projeto ou organização, faça o seguinte:

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

    Acessar IAM

  2. Clique em CONCEDER ACESSO.

  3. No campo Novos participantes, digite o endereço de e-mail da identidade a quem você quer conceder acesso. Exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  4. Na lista Papel, mantenha o ponteiro do mouse sobre Compute Engine e selecione Administrador do Storage ou selecione um papel personalizado no Personalizado lista.

  5. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  6. Salve as alterações.

gcloud

Para conceder permissões para excluir imagens no nível da organização, use o comando gcloud organizations add-iam-policy-binding:

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='ROLE'

Para conceder permissões para excluir imagens em um nível de projeto, use o comando gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='ROLE'

Para conceder permissões para excluir uma imagem específica, use o comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Substitua:

  • ORGANIZATION_ID ou PROJECT_ID ou IMAGE_NAME: o ID da organização numérico de 12 dígitos, o ID do projeto ou o nome da imagem, por exemplo, 123456578920 ou my-project-1 ou my-custom-image.
  • MEMBER: uma identidade válida à qual você quer conceder o papel.

    Exemplo:

    • E-mail da Conta do Google: user:user@gmail.com
    • Grupo do Google: group:admins@googlegroups.com
    • Conta de serviço: serviceAccount:server@example.gserviceaccount.com
    • Domínio do Google Workspace: domain:example.com
  • ROLE: o papel a ser atribuído a essa identidade, por exemplo, o papel roles/compute.storageAdmin ou um papel personalizado, como roles/customImageDeletionRole.

API

  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.

    Para organizações, use o método organizations.getIamPolicy:

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    Substitua ORGANIZATION_ID pelo ID da organização numérico de 12 dígitos.

    Para uma imagem específica, use o método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto;
    • IMAGE_NAME: o nome da imagem.

    O Compute Engine retorna a política atual na resposta.

  2. Para adicionar ou remover membros e os papéis associados, é possível editar a política com um editor de texto. Use o seguinte formato para adicionar membros:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Por exemplo, para conceder o papel roles/compute.storageAdmin a user:test-email@example.com, adicione a seguinte vinculação à política:

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. Grave a política atualizada usando o método setIamPolicy.

    Por exemplo, para definir uma política para envolvidos no 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
    

    Substitua PROJECT_ID pelo ID do projeto.

Compartilhe imagens personalizadas dentro de uma organização

Se seu projeto pertencer a uma organização, ela poderá ter vários outros projetos com diferentes níveis de acesso a outros projetos. Ao criar imagens personalizadas, é possível compartilhá-las com outros usuários de outros projetos dentro da organização.

O Compute Engine oferece os papéis predefinidos do IAM a seguir que podem ser usados para o gerenciamento de imagens:

  • Usuário de imagens do Compute (roles/compute.imageUser): permissão para listar, ler e usar imagens em suas solicitações, sem ter outras permissões na imagem
  • Administrador do Compute Storage (roles/compute.storageAdmin): permissões para criar, modificar e excluir discos, imagens e snapshots

Como alternativa, também é possível criar seu próprio papel personalizado do IAM.

Como prática recomendada, mantenha todas as suas imagens personalizadas em um único projeto dedicado para hospedá-las. Isso melhora o gerenciamento dessas imagens e permite conceder às equipes específicas acesso apenas às imagens de que elas precisam. Também é possível conceder às equipes acesso a todo o projeto de imagem, mas como o acesso da equipe a todo o projeto de imagem viola o princípio do menor privilégio, nós não o recomendamos.

No exemplo abaixo, mostramos como adicionar um grupo para que os usuários desse grupo tenham acesso à imagem.

Console

  1. No console do Google Cloud, acesse a página Imagens.

    Acessar "Imagens"

  2. Selecione a imagem que você quer compartilhar com outros usuários.

  3. Para expandir a coluna de permissões, clique em Mostrar painel de informações.

  4. Para adicionar um ou mais membros, clique em Adicionar participante.

  5. No campo Novos participantes, digite o endereço de e-mail da identidade com a qual você quer compartilhar a imagem.

    Exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  6. Na lista Papel, mantenha o ponteiro sobre Compute Engine e selecione Usuário da imagem ou Administrador do Storage ou selecione uma função personalizada.

  7. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  8. Salve as alterações.

Para permitir que os usuários lancem imagens personalizadas compartilhadas no Console do Google Cloud, conceda a eles o papel de IAM de leitor (roles/viewer) no projeto de imagem. Conceder esse papel ajuda a garantir que as imagens compartilhadas apareçam na lista de seleção de imagens.

  1. No console do Google Cloud, abra a página IAM.

    Acessar IAM

  2. Clique em CONCEDER ACESSO.

  3. No campo Novos participantes, digite o endereço de e-mail da identidade com a qual você quer compartilhar a imagem. Exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  4. Na lista Papel, mantenha o ponteiro sobre Projeto e selecione Visualizador.

  5. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  6. Salve as alterações.

gcloud

Para atualizar a política do IAM de uma imagem específica, use o comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Substitua:

  • IMAGE_NAME: o nome da imagem. Por exemplo, custom-centos-8
  • MEMBER: uma identidade válida à qual você quer conceder o papel.

    Exemplo:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: o papel que receberá essa identidade, como roles/compute.imageUser, roles/compute.storageAdmin ou um papel personalizado.

Como opção, para permitir que os usuários vejam essas imagens compartilhadasimages.list solicitações, conceda aos usuários o papel de leitor do IAM (roles/viewer ) do projeto de imagem usandogcloud projects add-iam-policy-binding comando para criar um anexo da VLAN de monitoramento. Se você não precisar que seus usuários vejam a lista de imagens compartilhadas, pule esta etapa.

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

API

  1. Leia a política atual com o método getIamPolicy do recurso. Por exemplo, para receber a política em uma imagem específica, use o método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto a que esta imagem pertence;
    • IMAGE_NAME: o nome da imagem.

    O Compute Engine retorna a política atual na resposta.

  2. Para adicionar ou remover membros e os papéis associados, edite a política com um editor de texto. Use o seguinte formato para adicionar membros:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Por exemplo, para conceder roles/compute.imageUser a test-email@example.com, adicione a nova vinculação a seguir à política:

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. Grave a política atualizada usando o método setIamPolicy. Por exemplo, para definir a política em uma imagem específica, use o método project.setIamPolicy. No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto a que esta imagem pertence;
    • IMAGE_NAME: o nome da imagem.

Como opção, para permitir que os usuários vejam essas imagens compartilhadas nas solicitações images.list, conceda a eles o papel de leitor do IAM (roles/viewer) para o projeto de imagem usando o método projects.setIamPolicy: Se você não precisar que seus usuários vejam a lista de imagens compartilhadas, pule esta etapa.

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

Compartilhe imagens personalizadas entre organizações

Criar um catálogo de imagens personalizadas pode ser útil para compartilhar imagens com parceiros, usuários ou contratados que estão fora da sua organização. Para compartilhar suas imagens com usuários fora da organização, adicione-as como usuários da imagem ao seu projeto:

Console

  1. No console do Google Cloud, acesse a página Imagens.

    Acessar "Imagens"

  2. Selecione a imagem que você quer compartilhar com outros usuários.

  3. Para expandir a coluna de permissões, clique em Mostrar painel de informações.

  4. Para adicionar um ou mais membros, clique em Adicionar participante.

  5. No campo Novos participantes, digite o endereço de e-mail do grupo com o qual você quer compartilhar a imagem. Por exemplo, admins@example.com.

  6. Na lista Papel, mantenha o ponteiro sobre o Compute Engine e selecione Usuário da imagem do Compute.

  7. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  8. Salve as alterações.

Para permitir que os usuários lancem imagens personalizadas compartilhadas no Console do Google Cloud, conceda a eles o papel de IAM de leitor (roles/viewer) no projeto de imagem. Conceder esse papel ajuda a garantir que as imagens compartilhadas apareçam na lista de seleção de imagens.

  1. No console do Google Cloud, abra a página IAM.

    Acessar IAM

  2. Clique em CONCEDER ACESSO.

  3. No campo Novos participantes, digite o endereço de e-mail da identidade com a qual você quer compartilhar a imagem. Por exemplo, admins@example.com.

  4. Na lista Papel, mantenha o ponteiro sobre Projeto e selecione Visualizador.

  5. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  6. Salve as alterações.

gcloud

Para conceder o papel roles/compute.imageUser aos usuários, use o comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='roles/compute.imageUser'

Substitua:

  • IMAGE_NAME: o nome da imagem, por exemplo, custom-centos-8
  • MEMBER: uma identidade válida para a qual você quer conceder o papel, por exemplo, group:admins@example.com

Como opção, para permitir que os usuários vejam essas imagens compartilhadas nas solicitações images.list, conceda aos usuários o papel de leitor do IAM (roles/viewer) do projeto de imagem usando o comando gcloud projects add-iam-policy-binding. Se você não precisar que seus usuários vejam a lista de imagens compartilhadas, pule esta etapa.

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

API

  1. Leia a política atual com o método getIamPolicy do recurso. Por exemplo, para receber a política em uma imagem específica, use o método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto a que esta imagem pertence;
    • IMAGE_NAME: o nome da imagem.

    O Compute Engine retorna a política atual na resposta.

  2. Para adicionar ou remover membros e os papéis associados, é possível editar a política com um editor de texto. Use o seguinte formato para adicionar membros:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    Por exemplo, para conceder roles/compute.imageUser a test-user@example.com, adicione a nova vinculação a seguir à política:

    {
      "members": [
        "user:test-user@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. Grave a política atualizada usando o método setIamPolicy. Por exemplo, para definir uma política em uma imagem específica, use o método images.setIamPolicy. No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto a que esta imagem pertence;
    • IMAGE_NAME: o nome da imagem.

    Como opção, para permitir que os usuários vejam essas imagens compartilhadas nas solicitações images.list, conceda a eles o papel de leitor do IAM (roles/viewer) para o projeto de imagem usando o método projects.setIamPolicy: Se você não precisar que seus usuários vejam a lista de imagens compartilhadas, pule esta etapa.

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

Compartilhe imagens personalizadas publicamente

É possível compartilhar suas imagens personalizadas com todos os usuários autenticados do Compute Engine, independentemente de eles fazerem parte da sua organização ou projeto.

Só é possível compartilhar recursos, como imagens, com todos os usuários autenticados. Não é possível compartilhar projetos ou organizações com todos os usuários autenticados. Essa restrição e a hierarquia de recursos ajudam a impedir que uma organização compartilhe acidentalmente todo o projeto com todos os usuários autenticados do Compute Engine.

O exemplo a seguir mostra como conceder a todos os usuários autenticados do Compute Engine o papel de usuário de imagens do Compute (roles/compute.imageUser) a uma imagem personalizada.

gcloud

Para tornar públicas as imagens, use o comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='allAuthenticatedUsers' \
    --role='roles/compute.imageUser'

Substitua IMAGE_NAME pelo nome do recurso, por exemplo, my_image.

API

  1. Leia a política atual com o método getIamPolicy. Por exemplo, para receber a política em uma imagem específica, use o método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto a que esta imagem pertence;
    • IMAGE_NAME: o nome da imagem.

    O Compute Engine retorna a política atual na resposta.

  2. Para adicionar ou remover membros e os papéis associados, edite a política com um editor de texto:

    {
     "members": [
       "allAuthenticatedUsers"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. Grave a política atualizada usando o método setIamPolicy. Por exemplo, para definir uma política em uma imagem específica, use o método images.setIamPolicy. No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto a que esta imagem pertence;
    • IMAGE_NAME: o nome da imagem.

Conceda acesso às imagens a um grupo gerenciado de instâncias

O Compute Engine permite criar grupos de VMs gerenciadas ou não gerenciadas. Se você criar um grupo de instâncias gerenciadas (MIG), o Compute Engine usará o agente de serviço das APIs do Google para chamar a API Compute Engine e executar ações relacionadas ao grupo, como recriar VMs não íntegras e atualizar VMs.

Se você quiser criar um MIG usando uma imagem de outro projeto, conceda o papel de usuário da imagem do Compute (roles/compute.imageUser) à conta de serviço das APIs pertencentes ao projeto que cria o MIG. Exemplo:

  1. O projeto A quer criar um MIG usando imagens de propriedade do Projeto B.
  2. O Projeto B concede à conta de serviço do Projeto A o papel de Usuário de imagens do Compute.
  3. O Projeto A agora pode usar imagens do Projeto B para criar MIGs.

Depois de conceder o papel de Usuário, acesse a imagem dos outros projetos usando o console ou o URL da imagem ao criar o modelo de instância para o grupo gerenciado.

Digite o endereço de e-mail da conta de serviço

  1. No Console do Google Cloud, acesse a página IAM do projeto com a conta de serviço que você quer conceder acesso.

    Acessar IAM

  2. Caso solicitado, selecione o projeto na lista.

  3. Procure o agente de serviço das APIs do Google, que tem o endereço de e-mail no formato a seguir:

    PROJECT_NUMBER@cloudservices.gserviceaccount.com
    

Depois de recuperar o endereço de e-mail da conta de serviço, acesse uma das seguintes seções:

Conceder a um MIG acesso a todas as imagens em um projeto

Agora que você tem o endereço de e-mail de uma conta de serviço, é possível adicionar o endereço a outro projeto e conceder a ele o papel de Usuário de imagem do Compute (roles/compute.imageUser).

Console

  1. No Console do Google Cloud, acesse a página IAM do projeto de imagem.

    Acessar IAM

  2. Para adicionar um novo membro, clique em Conceder acesso.

  3. No campo Novos participantes, adicione o endereço de e-mail da conta de serviço.

  4. Na lista Papel, mantenha o ponteiro sobre Compute e selecione Usuário da imagem do Compute.

  5. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  6. Clique em Save.

  7. Volte para o projeto da conta de serviço.

Agora é possível criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo da instância. ,

gcloud

Adicione uma conta de serviço do projeto de imagem usando o comando gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' --role='roles/compute.imageUser'

Substitua:

  • PROJECT_ID: o ID do projeto que contém as imagens que você quer compartilhar;
  • SERVICE_ACCOUNT_EMAIL: o e-mail da conta de serviço.

Agora é possível criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo da instância. ,

API

  1. Consiga a política do IAM do projeto de imagem usando o método projects.getIamPolicy:

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

    Substitua PROJECT_ID pelo ID do projeto de administração.

  2. Para conceder o papel roles/compute.imageUser à conta de serviço, edite a política com um editor de texto:

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    Substitua SERVICE_ACCOUNT_EMAIL pelo e-mail da conta de serviço.

  3. Grave a política atualizada usando o comando projects.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
    

    Substitua PROJECT_ID pelo ID do produto do projeto de imagem.

    Agora é possível criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo da instância. ,

Conceder a um MIG acesso a imagens específicas em um projeto

Agora que você tem o endereço de e-mail de uma conta de serviço, é possível adicionar o endereço a outro projeto e conceder o papel Usuário de imagens do Compute (roles/compute.imageUser) para determinadas imagens.

Console

  1. No Console do Google Cloud, acesse a página Imagens do projeto de imagem.

    Acessar "Imagens"

  2. Marque as caixas de seleção ao lado das imagens que você quer compartilhar.

  3. Para expandir a coluna de permissões, clique em Mostrar painel de informações.

  4. No painel Permissões, clique em Adicionar participantes.

  5. No campo Novos participantes, insira o e-mail da conta de serviço com a qual você quer compartilhar a imagem. Por exemplo, test123@example.domain.com.

  6. Na lista Papel, escolha Compute e selecione Usuário da imagem do Compute.

  7. Opcional: para controlar ainda mais o acesso do usuário aos recursos do Google Cloud, adicione a vinculação de papel condicional.

  8. Clique em Save.

  9. Volte para o projeto da conta de serviço.

Agora é possível criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo da instância. ,

gcloud

Para conceder acesso a uma imagem específica a uma conta de serviço, use o comando gcloud compute images add-iam-policy-binding:

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' \
    --role='roles/compute.imageUser'

Substitua:

  • IMAGE_NAME: o nome da imagem que você quer compartilhar;
  • SERVICE_ACCOUNT_EMAIL: o e-mail da conta de serviço.

Agora é possível criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo da instância. ,

API

  1. Receba a política do IAM de uma imagem usando o método images.getIamPolicy:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto de imagem;
    • IMAGE_NAME: o nome da imagem que você quer compartilhar.
  2. Para conceder o papel roles/compute.imageUser à conta de serviço, edite a política com um editor de texto:

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    Substitua SERVICE_ACCOUNT_EMAIL pelo e-mail da conta de serviço.

  3. Grave a política atualizada usando o método images.setIamPolicy. No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto de imagem;
    • IMAGE_NAME: o nome da imagem que você quer compartilhar.

    Agora é possível criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo da instância. ,

Controlar o uso de imagens e snapshots compartilhados

Depois de compartilhar suas imagens com outros usuários, é possível controlar onde esses usuários empregam esses recursos na sua organização. Defina a restrição constraints/compute.storageResourceUseRestrictions para definir os projetos em que os usuários têm permissão para usar seus recursos de armazenamento.

Você precisa ter permissão para modificar as políticas da organização a fim de definir essas restrições. Por exemplo, o papel resourcemanager.organizationAdmin tem permissão para definir essas restrições.

  1. Encontre o ID da sua organização usando o comando gcloud organization list:

    gcloud organizations list
    
  2. Para ver as configurações de políticas existentes da sua organização, use o comando gcloud resource-manager org-policies describe:

    gcloud resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization ORGANIZATION_ID > org-policy.yaml
    

    Substitua ORGANIZATION_ID pelo ID numérico de 12 dígitos da organização.

  3. Abra o arquivo org-policy.yaml em um editor de texto e modifique a restrição compute.storageResourceUseRestrictions. Adicione as restrições necessárias ou remova as restrições de que você não precisa mais. Quando terminar de editar o arquivo, salve as alterações. Por exemplo, defina a entrada de restrição a seguir no arquivo de política:

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/organization-id
    
  4. Aplique o arquivo org-policy.yaml à sua organização usando o comando gcloud resource-manager org-policies set-policy:

    gcloud resource-manager org-policies set-policy \
       --organization=ORGANIZATION_ID org-policy.yaml
    

    Substitua ORGANIZATION_ID pelo ID numérico de 12 dígitos da organização.

Quando terminar de configurar as restrições na política da organização, teste-as para garantir que elas estão atendendo às suas necessidades.

Usar imagens de outro projeto

Se alguém concedeu a você acesso a uma ou mais imagens em outro projeto, é possível acessar essas imagens no projeto especificando o projeto de imagem em suas solicitações.

Por exemplo, para criar uma VM usando uma imagem compartilhada de outro projeto, siga estas etapas:

Console

  1. No console do Google Cloud, acesse a página Criar uma instância.

    Acesse "Criar uma instância"

  2. Especifique um Nome para sua VM. Veja mais informações em Convenção de nomenclatura de recursos.
  3. Opcional: altere a zona desta VM. O Compute Engine seleciona, aleatoriamente, a lista de zonas dentro de cada região para incentivar o uso em várias zonas.
  4. Selecione uma Configuração de máquina para sua VM.
  5. Na seção Disco de inicialização, clique em Alterar para configurar o disco de inicialização. Depois faça o seguinte:
    1. Selecione a guia Imagens personalizadas.
    2. Para selecionar o projeto de imagem, clique em Selecionar um projeto e faça o seguinte:
      1. Selecione o projeto que contém a imagem.
      2. Clique em Abrir.
    3. Na lista Imagem, clique na imagem que você quer importar.
    4. Selecione o tipo e o tamanho do seu disco de inicialização.
    5. Para confirmar as opções do disco de inicialização, clique em Selecionar.
  6. Para permitir o tráfego HTTP ou HTTPS para a VM, na seção Firewall, selecione Permitir tráfego HTTP ou Permitir tráfego HTTPS.

    O Console do Google Cloud adiciona uma tag de rede à instância e cria a regra de firewall de entrada correspondente que permite todo o tráfego de entrada em tcp:80 (HTTP) ou tcp:443 (HTTPS). A tag de rede associa a regra de firewall à VM. Para ver mais informações, consulte Visão geral sobre regras de firewall na documentação da nuvem privada virtual.

  7. Para iniciar e criar uma VM, clique em Criar.

gcloud

Crie uma VM usando o comando gcloud compute instances create command e use as sinalizações --image e --image-project para especificar o nome da imagem e o projeto em que a imagem reside:

 gcloud compute instances create VM_NAME \
        --image=IMAGE \
        --image-project=IMAGE_PROJECT
    

Substitua:

  • VM_NAME: nome da nova VM
  • IMAGE: nome da imagem
  • IMAGE_PROJECT: o projeto que contém a imagem

Se o comando tiver êxito, o gcloud responderá com as propriedades da nova VM:

    Created [https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-b/instances/example-instance].
    NAME                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    example-instance     us-central1-b  e2-standard-2               10.240.0.4   104.198.53.60  RUNNING

API

O processo de criação de uma VM com uma imagem personalizada na API é semelhante à criação de uma VM com uma imagem disponível publicamente. Para criar a VM a partir de uma imagem compartilhada, use o método instances.insert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
   "name":"VM_NAME",

   "disks":[
      {
         "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot":true
      }
   ],

   "networkInterfaces":[
      {
         "network":"global/networks/NETWORK_NAME"
      }
   ],

   "shieldedInstanceConfig":{
      "enableSecureBoot":"ENABLE_SECURE_BOOT"
   }
}

Substitua:

  • PROJECT_ID: ID do projeto em que a VM será criada
  • ZONE: zona em que a VM será criada
  • MACHINE_TYPE_ZONE: a zona que contém o tipo de máquina que será usado para a nova VM.
  • MACHINE_TYPE: tipo de máquina, predefinida ou personalizada, para a nova VM.
  • VM_NAME: nome da nova VM.
  • IMAGE_PROJECT: o nome do projeto que contém a imagem compartilhada
  • IMAGE ou IMAGE_FAMILY: especifique uma das seguintes opções:
    • IMAGE: o nome da imagem compartilhada. Por exemplo, "sourceImage": "projects/finance-project-1234/global/images/finance-debian-image-v2".
    • IMAGE_FAMILY: se a imagem compartilhada for criada como parte de uma família de imagens personalizadas, especifique essa família de imagens personalizadas.

      Isso cria a VM a partir da imagem do SO mais recente e não descontinuada da família de imagens personalizada. Por exemplo, se você especificar "sourceImage": "projects/finance-project-1234/global/images/family/finance-debian-family", o Compute Engine criará uma VM usando a versão mais recente da imagem do SO na família de imagens personalizadas finance-debian-family.

  • NETWORK_NAME: a rede VPC que você quer usar para a VM. Você pode especificar default para usar sua rede padrão.
  • ENABLE_SECURE_BOOT: opcional: se você escolher uma imagem compatível com recursos da VM protegida, o Compute Engine ativa, por padrão, o módulo de plataforma virtual confiável (vTPM) e o monitoramento de integridade. Por padrão, o Compute Engine não ativa a Inicialização segura.
    Se você especificar true para enableSecureBoot, o Compute Engine criará uma VM com todos os três recursos da VM protegida já ativados. Depois que o Compute Engine iniciar a VM, será preciso interrompê-la se você quiser modificar as opções de VM protegida.

Também é possível criar discos permanentes de inicialização a partir de imagens em outro projeto. Saiba mais em Como criar um disco permanente de inicialização autônomo.

Revogue o acesso a imagens compartilhadas

Depois que o usuário não precisar mais acessar seus recursos do Compute Engine, revogue o acesso dele usando o Console do Google Cloud, a Google Cloud CLI ou a API Compute Engine.

Console

  1. No Console do Google Cloud, acesse a página Imagens do projeto de imagem.

    Acessar "Imagens"

  2. Marque as caixas de seleção ao lado das imagens que você quer atualizar.

  3. Para expandir a coluna de permissões, clique em Mostrar painel de informações.

  4. Expanda o papel de que você quer remover usuários.

  5. Para remover um usuário desse papel, clique em Excluir.

gcloud

Para remover um usuário de um papel em uma imagem, use o comando gcloud compute images remove-iam-policy-binding com as sinalizações --member e --role:

gcloud compute images remove-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

Substitua:

  • IMAGE_NAME: o nome da imagem. Por exemplo, my_image
  • MEMBER: a identidade que você quer remover.

    Precisa estar no formato user|group|serviceAccount:email ou domain:domain. Exemplo:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: o papel de que você quer remover a identidade.

Se você quiser remover o acesso a um recurso que está atualmente na versão Beta, use um comando gcloud beta compute.

API

  1. Leia a política atual com o método images.getIamPolicy.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto a que esta imagem pertence;
    • IMAGE_NAME: o nome da imagem.

    O Compute Engine retorna a política atual na resposta.

  2. Para remover membros e os respectivos papéis associados, edite a política com um editor de texto.

  3. Grave a política atualizada usando o método images.setIamPolicy. No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/global/images/IMAGE_NAME:setIamPolicy
    

    Substitua:

    • PROJECT_ID: o ID do projeto a que esta imagem pertence;
    • IMAGE_NAME: o nome da imagem.

A seguir