Como 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). Use o IAM para:

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

Não é possível atribuir ao usuário o papel de allUsers nas imagens.

Como 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 de armazenamento 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 snapshots. Se você precisar de um papel que permita somente a criação de imagens, crie um papel personalizado. No seu papel personalizado, inclua as permissões a seguir conforme necessário:

  • 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 você quer conceder aos usuários a capacidade de ver uma lista de discos no projeto

Se você conceder a um usuário a capacidade de criar imagens personalizadas na 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 e administrador do projeto ou da organização.

    Acessar a página "IAM e administrador"

  2. Clique no botão Adicionar para incluir um novo membro.

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

  4. Na lista Selecionar um papel, selecione Compute Engine > Administrador do Compute Storage ou selecione um papel personalizado, caso tenha criado um.

  5. Salve as alterações.

gcloud

Para conceder o papel roles/compute.storageAdmin em um nível de organização:

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

Para conceder o papel roles/compute.storageAdmin em um nível de projeto:

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

API

Para modificar uma política do IAM por meio da API, faça o seguinte:

  1. Leia a política atual com o método getIamPolicy. Para projetos, use o URL a seguir, substituindo project-id pelo ID do projeto. Por exemplo, my-project-1.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

    Para organizações, use o URL a seguir, substituindo organization-id pelo ID da organização numérico de 12 dígitos. Por exemplo, 123456578920.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/organization-id:getIamPolicy

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

  2. Edite a política com um editor de texto para incluir ou remover membros e os respectivos papéis. Por exemplo, para conceder o papel roles/compute.storageAdmin a 1email@example.com`, adicione a nova vinculação a seguir à política:

    {
      "members": [
        "group:admins@example.com"
      ],
      "role":"roles/compute.storageAdmin"
    }
    
  3. Grave a política atualizada com setIamPolicy():

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    Substitua project-id pelo ID do projeto. No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

Como conceder permissões para excluir imagens personalizadas

Dependendo de suas necessidades, é possível conceder aos usuários permissão para:

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

A concessão de permissão no nível do projeto permite que os usuários excluam 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 de armazenamento 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 conforme necessário:

  • compute.images.delete para excluir imagens
  • compute.images.list para listar imagens no projeto ou na organização, se necessário
  • compute.images.get para conseguir as imagens

Console

Para conceder permissão para excluir imagens específicas:

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

    Acessar a página "Imagens"

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

  3. À direita, no painel Permissões, clique em Adicionar membros.

  4. Digite o endereço de e-mail da identidade com a qual você quer compartilhar a imagem. 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
  5. Na lista Papel, clique em Compute Engine e selecione Administrador do Storage ou selecione um papel personalizado na lista Personalizada.

  6. Salve as alterações.

Para conceder permissão para excluir imagens de um projeto ou organização:

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

    Acessar a página "IAM e administrador"

  2. Na parte superior da página, clique no botão Adicionar.

  3. No campo Novos membros, digite o endereço de e-mail da identidade a quem você quer conceder acesso. 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
  4. Na lista Papel, clique em Compute Engine e selecione Administrador do Storage ou selecione um papel personalizado na lista Personalizada.

  5. Salve as alterações.

gcloud

Para conceder aos usuários permissões para excluir imagens no nível da organização:

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:

gcloud projects add-iam-policy-binding project-id \
    --member='member' \
    --role='role'

Para conceder permissões para excluir uma imagem específica:

gcloud 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. 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 a ser atribuído a essa identidade, por exemplo, roles/compute.storageAdmin ou um papel personalizado, como roles/customImageDeletionRole.

API

Para conceder permissões para excluir imagens por meio da API:

  1. Leia a política atual com o respectivo método getIamPolicy do recurso. Para projetos, use o URL a seguir:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

    Substitua project-id pelo ID do projeto.

    Para organizações, use:

    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:

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy

    Substitua project-id pelo ID do projeto e image-name pelo nome da imagem.

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

  2. Edite a política com um editor de texto para incluir ou remover membros e os respectivos papéis. Por exemplo, para conceder o papel roles/compute.storageAdmin a 1email@example.com`, adicione a nova vinculação a seguir à política:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.storageAdmin"
    }
    
  3. Grave a política atualizada com setIamPolicy(): Exemplo:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    Substitua project-id pelo ID do projeto. No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

Como compartilhar 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 predefinirá os papéis selecionados do IAM a seguir que podem ser usados para o gerenciamento de imagens:

  • roles/compute.imageUser: permissão para listar, ler e usar imagens em suas solicitações, sem ter outras permissões na imagem.
  • 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, o Google recomenda manter todas as suas imagens personalizadas em um único projeto dedicado exclusivamente à hospedagem dessas imagens. 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 a página "Imagens"

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

  3. À direita, no painel Permissões, clique em Adicionar membros.

  4. Digite o endereço de e-mail da identidade com a qual você quer compartilhar a imagem. 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
  5. Na lista Papel, clique em Compute Engine e selecione Usuário da imagem ou Administrador do Storage ou selecione um papel personalizado.

  6. Salve as alterações.

Para permitir que os usuários lancem imagens personalizadas compartilhadas no Console do Cloud, você também precisa adicionar usuários como visualizador de projetos ao projeto de imagem. Isso garante que essas imagens compartilhadas apareçam na lista de seleção de imagens.

  1. No Console do Google Cloud, acesse a página IAM e administrador:

    Acessar a página "IAM e administrador"

  2. Na parte superior da página, clique no botão ADICIONAR.

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

  4. Na lista Papel, clique em Projeto e selecione Visualizador.

  5. Salve as alterações.

gcloud

Usando a ferramenta de linha de comando gcloud, atualize a política do IAM para uma imagem específica.

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. 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 para atribuir 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 compartilhadas nas solicitações images.list, adicione os usuários como leitores do projeto de imagem. Se você não precisar que seus usuários vejam a lista de imagens compartilhadas, pule esta etapa.

gcloud compute projects add-iam-policy-binding project-id \
    --member='member' \
    --role='roles/viewer'

API

Para modificar uma política do IAM por meio da API, faça o seguinte:

  1. Leia a política atual com o respectivo método getIamPolicy do recurso.

    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. Edite a política com um editor de texto para adicionar ou remover usuários e os papéis associados. Adicione usuários seguindo o formato user|group|serviceAccount:email ou domain:domain. Por exemplo, user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com. Por exemplo, para conceder o papel roles/compute.imageUser a email@example.com, adicione o seguinte:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. Grave a política atualizada com setIamPolicy():

    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.

    No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

Como opção, para permitir que os usuários vejam essas imagens compartilhadas nas solicitações images.list, adicione os usuários como leitores do projeto de imagem. 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

Como compartilhar 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. Siga estas instruções para compartilhar suas imagens com usuários fora da organização adicionando-os como usuários da imagem ao seu projeto.

Console

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

    Acessar a página "Imagens"

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

  3. À direita, no painel Permissões, clique em Adicionar membros.

  4. Digite o endereço de e-mail do grupo com o qual você quer compartilhar a imagem. Por exemplo, group:admins@example.com.

  5. Na lista Papel, aponte para Compute Engine e selecione Usuário da imagem.

  6. Salve as alterações.

Para permitir que os usuários lancem imagens personalizadas compartilhadas no Console do Cloud, você também precisa adicionar os usuários como leitores do projeto. Isso garante que essas imagens compartilhadas apareçam na lista de seleção de imagens.

  1. No Console do Google Cloud, acesse a página IAM e administrador:

    Acessar a página "IAM e administrador"

  2. Na parte superior da página, clique no botão Adicionar.

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

  4. Na lista Papel, clique em Projeto e selecione Visualizador.

  5. Salve as alterações.

gcloud

Com a ferramenta de linha de comando gcloud:

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 à 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, adicione os usuários como leitores do projeto de imagem. Se você não precisar que seus usuários vejam a lista de imagens compartilhadas, pule esta etapa.

gcloud compute projects add-iam-policy-binding project-id \
    --member='member' \
    --role='roles/viewer'

API

Para modificar a política de IAM de uma imagem diretamente por meio da API:

  1. Leia a política atual com o respectivo método getIamPolicy do recurso.

    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. Edite a política com um editor de texto para adicionar ou remover usuários e os papéis associados. Adicione usuários seguindo o formato user|group|serviceAccount:email ou domain:domain. Por exemplo, user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com. Por exemplo, para conceder o papel roles/compute.imageUser a email@example.com, adicione o seguinte:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. Grave a política atualizada com setIamPolicy():

    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.

    No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

    Como opção, para permitir que os usuários vejam essas imagens compartilhadas nas solicitações images.list, adicione os usuários como leitores do projeto de imagem. 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

Como compartilhar 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 roles/compute.imageUser a uma imagem personalizada.

gcloud

Substitua image-name no comando a seguir pelo nome do recurso, por exemplo, my_image:

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

API

Para modificar uma política do IAM por meio da API, faça o seguinte:

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

    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. Edite a política com um editor de texto para incluir ou remover membros e os respectivos papéis.

    {
      "members": [
        "allAuthenticatedUsers"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. Grave a política atualizada com setIamPolicy():

    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.

    No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

Como conceder acesso a imagens ao grupo de instâncias gerenciadas

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

Se você quiser criar um grupo de instâncias gerenciadas usando uma imagem de outro projeto, conceda o papel roles/compute.imageUser à conta de serviço das APIs que pertence ao projeto que criará esse grupo. Exemplo:

  1. No projeto A, a intenção é criar um grupo de instâncias gerenciadas usando imagens de propriedade do Projeto B.
  2. O Projeto B concede à conta de serviço do Projeto A o papel de roles/compute.imageUser.
  3. No Projeto A agora é possível usar imagens do Projeto B para criar grupos de instâncias gerenciadas.

Depois de conceder o papel roles/compute.imageUser, 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.

Como conseguir o endereço de e-mail da conta de serviço

Siga estas etapas para conseguir o endereço de e-mail de uma conta de serviço:

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

    Acessar a página "IAM"

  2. Caso solicitado, selecione o projeto na lista.
  3. Procure a conta de serviço das APIs do Google, que tem o endereço de e-mail no formato a seguir:

    project-number@cloudservices.gserviceaccount.com
    
  4. Anote o endereço de e-mail acima.

Depois de recuperar o endereço de e-mail da conta de serviço, siga um dos links:

Como conceder a um grupo de instâncias gerenciadas acesso a todas as imagens em um projeto

Agora que você tem o endereço de e-mail de uma conta de serviço, adicione o endereço a outro projeto e conceda a ele o papel de roles/compute.imageUser.

Console

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

    Acessar a página "IAM e administrador"

  2. Para adicionar um novo membro, clique em Adicionar.

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

  4. Na lista Papel, aponte para Compute e selecione Usuário da imagem do Compute.

  5. Clique em Salvar.

  6. 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 grupo de instâncias gerenciadas com base no modelo de instância.

gcloud

Adicione uma conta de serviço do projeto de imagem:

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 grupo de instâncias gerenciadas com base no modelo de instância.

API

  1. Consiga a política do IAM do projeto de imagem, substituindo project-id pelo ID do projeto.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

  2. Edite a política com um editor de texto para conceder o papel de roles/compute.imageUser à conta de serviço. Exemplo:

    {
      "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:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    Substitua project-id pelo ID do produto do projeto de imagem. No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

    Agora é possível criar um modelo de instância com base em uma imagem do projeto de imagem e criar um grupo de instâncias gerenciadas com base no modelo de instância.

Como conceder a um grupo de instâncias gerenciadas 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 a ele o papel de roles/compute.imageUser para determinadas imagens.

Console

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

    Acessar a página "Imagens"

  2. Selecione a imagem que você quer compartilhar.

  3. No painel Permissões, clique em Adicionar membros.

  4. Digite o e-mail da conta de serviço.

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

  6. Clique em Salvar.

  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 grupo de instâncias gerenciadas com base no modelo de instância.

gcloud

Para conceder acesso a uma imagem específica a uma conta de serviço:

gcloud 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 grupo de instâncias gerenciadas com base no modelo de instância.

API

  1. Receba a política do IAM de uma imagem.

    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. Edite a política com um editor de texto para conceder o papel de roles/compute.imageUser à conta de serviço. Exemplo:

    {
      "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:

    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.

    No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

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

Como restringir 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.

    gcloud organizations list
    
  2. Identifique as configurações de política atuais da organização. Substitua organization-id pelo ID numérico de 12 dígitos da organização.

    gcloud beta resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization organization-id > org-policy.yaml
    
  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 policy.yaml à sua organização. Substitua organization-id pelo ID numérico de 12 dígitos da organização.

    gcloud beta resource-manager org-policies set-policy \
        --organization organization-id org-policy.yaml
    

Quando terminar de configurar as restrições na política da organização, teste-as para garantir que elas criem as restrições necessárias.

Como 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.

Leia Como criar e iniciar uma instância para aprender a usar imagens para gerar novos recursos, como criar instâncias.

Por exemplo, o comando a seguir cria uma instância usando uma imagem chamada database-image-a do projeto database-images:

gcloud compute instances create test-instance \
    --image database-image-a --image-project database-images

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

Como revogar 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 ferramenta de linha de comando gcloud ou a API Compute Engine.

Console

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

    Acessar a página "Imagens"

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

  3. Clique em Mostrar painel de informações para expandir a coluna de permissões.

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

  5. Clique em Excluir para remover um usuário desse papel.

gcloud

Para remover um usuário de um papel em uma imagem, use o subcomando 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

Para modificar uma política do IAM por meio da API, faça o seguinte:

  1. Leia a política atual com o respectivo método getIamPolicy do recurso.

    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. Edite a política com um editor de texto para remover membros dos respectivos papéis.

  3. Grave a política atualizada com setIamPolicy():

    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.

      No corpo da solicitação, forneça a política de IAM atualizada da etapa anterior.

A seguir