Gerenciar o acesso a imagens personalizadas


Para permitir que os usuários criem, excluam, usem ou compartilhem suas imagens personalizadas, você deve conceder a eles as funções apropriadas de gerenciamento de identidade e acesso (IAM). Este documento descreve as permissões do IAM necessárias para criar e gerenciar imagens personalizadas e como concedê-las aos usuários.

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

Antes de começar

  • Leia a documentação do IAM .
  • Leia sobre as funções do IAM do Compute Engine , em particular a função de usuário da imagem do Compute ( roles/compute.imageUser ).
  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

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

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

Funções obrigatórias

Para obter as permissões necessárias para gerenciar o acesso a imagens personalizadas, peça ao administrador que conceda a você as seguintes funções do IAM:

Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Essas funções predefinidas contêm as permissões necessárias para gerenciar o acesso a imagens personalizadas. Para ver as permissões exatas necessárias, expanda a seção Permissões necessárias :

Permissões necessárias

As seguintes permissões são necessárias para gerenciar o acesso a imagens personalizadas:

  • Para conceder aos usuários ou contas de serviço as permissões necessárias para criar e compartilhar imagens personalizadas:
    • resourcemanager.projects.getIamPolicy no projeto
    • resourcemanager.projects.setIamPolicy no projeto
  • Para conceder aos usuários ou contas de serviço as permissões necessárias para excluir imagens personalizadas:
    • resourcemanager.projects.getIamPolicy no projeto
    • resourcemanager.projects.setIamPolicy no projeto
    • compute.images.getIamPolicy na imagem
    • compute.images.setIamPolicy na imagem
  • Para revogar o acesso do usuário ou da conta de serviço a imagens personalizadas:
    • resourcemanager.projects.getIamPolicy no projeto
    • resourcemanager.projects.setIamPolicy no projeto
  • Para criar uma instância usando uma imagem compartilhada:
    • compute.instances.create no projeto
    • Para usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
    • Para usar um instantâneo para criar a VM: compute.snapshots.useReadOnly no instantâneo
    • Para usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
    • Para atribuir uma rede legada à VM: compute.networks.use no projeto
    • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
    • Para atribuir um endereço IP externo à VM ao usar uma rede legada: compute.networks.useExternalIp no projeto
    • Para especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
    • Para atribuir um endereço IP externo à VM ao usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
    • Para definir metadados de instância de VM para a VM: compute.instances.setMetadata no projeto
    • Para definir tags para a VM: compute.instances.setTags na VM
    • Para definir rótulos para a VM: compute.instances.setLabels na VM
    • Para definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
    • Para criar um novo disco para a VM: compute.disks.create no projeto
    • Para anexar um disco existente no modo somente leitura ou leitura-gravação: compute.disks.use no disco
    • Para anexar um disco existente no modo somente leitura: compute.disks.useReadOnly no disco

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

Limitações

Em imagens, você não pode conceder funções ao tipo de membro especial allUsers .

Dê permissão para criar imagens personalizadas

Você pode oferecer aos usuários a capacidade de criar imagens personalizadas em sua organização ou projeto.

O Compute Engine oferece a função predefinida de administrador do Compute Storage ( roles/compute.storageAdmin ) que você pode atribuir aos usuários para que eles possam criar, excluir e gerenciar recursos relacionados ao armazenamento, incluindo imagens, discos e snapshots. Se precisar de uma função que permita apenas a criação de imagens, você deverá criar uma função personalizada . Na sua função personalizada, 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ê fornecer a um usuário a capacidade de criar imagens personalizadas no nível da organização, o usuário poderá criar imagens personalizadas para qualquer projeto dentro da organização.

Console

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

    Acesse o IAM

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

  3. No campo Novos principais , insira o endereço de e-mail da identidade à qual você deseja conceder acesso.

    Por exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Identidade de um provedor de identidade externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  4. Na lista Selecionar uma função , selecione Compute Engine > Administrador do Compute Storage ou selecione uma função personalizada, caso você tenha criado uma.

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

  6. Salve suas alterações.

gcloud

Para conceder a função roles/compute.storageAdmin 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='roles/compute.storageAdmin'

Para conceder o papel roles/compute.storageAdmin no nível do 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 o seguinte:

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

    Por exemplo:

    • E-mail da Conta do Google: user:user@gmail.com
    • Grupo do Google: group:admins@googlegroups.com
    • Identidade de um provedor de identidade externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Conta de serviço: serviceAccount:server@example.gserviceaccount.com
    • Domínio do Google Workspace: domain:example.com

DESCANSAR

  1. Leia a política existente com o método getIamPolicy do recurso. Para projetos, use o método projects.getIamPolicy .

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

    Substitua PROJECT_ID pelo ID do projeto, por exemplo, my-project-1 .

    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 suas funções associadas, 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 a função roles/compute.storageAdmin a group:admins@example.com , adicione a seguinte ligaçã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 IAM atualizada da etapa anterior.

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

    Substitua PROJECT_ID pelo ID do projeto.

Dê permissões para excluir imagens personalizadas

Dependendo de suas necessidades, você pode dar permissão aos usuários para fazer o seguinte:

  • Excluir uma imagem específica
  • Excluir imagens pertencentes a um projeto específico
  • Exclua imagens de qualquer projeto em uma organização

Conceder permissão no nível do projeto permite que os usuários excluam todas as imagens pertencentes a esse projeto. Conceder permissão no nível da organização permite que o usuário exclua quaisquer imagens pertencentes a essa organização, independentemente do projeto.

O Compute Engine oferece a função predefinida de administrador do Compute Storage ( roles/compute.storageAdmin ) que você pode atribuir aos usuários para que eles possam criar, excluir e gerenciar recursos relacionados ao armazenamento, incluindo imagens, discos e snapshots. Se precisar de uma função que permita apenas a exclusão de imagens, você deverá criar uma função personalizada . Na sua função personalizada, inclua as seguintes permissões:

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

Console

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

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

    Vá para Imagens

  2. Selecione as imagens às quais deseja 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 principal .

  5. No campo Novos principais , insira o endereço de e-mail da identidade com a qual deseja compartilhar a imagem.

    Por exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Identidade de um provedor de identidade externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  6. Na lista Função , mantenha o ponteiro sobre Compute Engine e selecione Administrador de armazenamento ou selecione uma função personalizada na lista Personalizada .

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

  8. Salve suas alterações.

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

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

    Acesse o IAM

  2. Clique em Conceder acesso .

  3. No campo Novos principais , insira o endereço de e-mail da identidade à qual você deseja conceder acesso. Por exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Identidade de um provedor de identidade externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  4. Na lista Função , mantenha o ponteiro sobre Compute Engine e selecione Administrador de armazenamento ou selecione uma função personalizada na lista Personalizada .

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

  6. Salve suas 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 no nível do 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 o seguinte:

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

    Por exemplo:

    • E-mail da Conta do Google: user:user@gmail.com
    • Grupo do Google: group:admins@googlegroups.com
    • Identidade de um provedor de identidade externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Conta de serviço: serviceAccount:server@example.gserviceaccount.com
    • Domínio do Google Workspace: domain:example.com
  • ROLE : a função a ser atribuída a essa identidade — por exemplo, a função roles/compute.storageAdmin ou uma função personalizada, como roles/customImageDeletionRole

DESCANSAR

  1. Leia a política existente 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 numérico da organização 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 o seguinte:

    • 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 suas funções associadas, você pode 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 a função roles/compute.storageAdmin a user:test-email@example.com , adicione a seguinte ligaçã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 em nível de projeto, use o método project.setIamPolicy . No corpo da solicitação, forneça a política IAM atualizada da etapa anterior.

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

    Substitua PROJECT_ID pelo ID do projeto.

Conceda permissões para compartilhar imagens personalizadas dentro de uma organização

Se o seu projeto pertencer a uma organização, a organização poderá ter vários outros projetos com níveis variados de acesso a outros projetos. Ao criar imagens personalizadas, você pode compartilhá-las com outros usuários de outros projetos da organização.

O Compute Engine oferece os seguintes papéis predefinidos do IAM que você pode usar para gerenciamento de imagens:

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

Como alternativa, você também pode criar sua própria função IAM personalizada .

Como prática recomendada, recomendamos que você mantenha todas as suas imagens personalizadas em um único projeto dedicado para hospedar essas imagens. Essa prática melhora o gerenciamento dessas imagens e permite conceder a equipes específicas acesso apenas às imagens de que precisam. Você também pode 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ão recomendamos isso.

O exemplo abaixo mostra 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 .

    Vá para Imagens

  2. Selecione a imagem que deseja 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 principal .

  5. No campo Novos principais , insira o endereço de e-mail da identidade com a qual deseja compartilhar a imagem.

    Por exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Identidade de um provedor de identidade externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  6. Na lista Função , mantenha o ponteiro sobre o Compute Engine e selecione Usuário de imagem ou Administrador de armazenamento ou selecione uma função personalizada.

  7. Opcional: para controlar ainda mais o acesso do usuário ao Google Cloudrecursos, adicione vinculação de função condicional .

  8. Salve suas alterações.

Para permitir que os usuários iniciem imagens personalizadas compartilhadas no console do Google Cloud, conceda aos usuários o papel de visualizador do IAM ( roles/viewer ) para o projeto de imagem. A concessão dessa função ajuda a garantir que as imagens compartilhadas apareçam na lista de seleção de imagens.

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

    Acesse o IAM

  2. Clique em Conceder acesso .

  3. No campo Novos principais , insira o endereço de e-mail da identidade com a qual deseja compartilhar a imagem. Por exemplo:

    • E-mail da Conta do Google: test-user@gmail.com
    • Grupo do Google: admins@googlegroups.com
    • Identidade de um provedor de identidade externo : principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • Conta de serviço: server@example.gserviceaccount.com
    • Domínio do Google Workspace: example.com
  4. Na lista Função , mantenha o ponteiro sobre Projeto e selecione Visualizador .

  5. Opcional: para controlar ainda mais o acesso do usuário ao Google Cloudrecursos, adicione vinculação de função condicional .

  6. Salve suas alterações.

gcloud

Para atualizar a política do IAM para 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 o seguinte:

  • IMAGE_NAME : o nome da imagem, por exemplo, custom-centos-8
  • MEMBER : uma identidade válida para a qual você deseja conceder a função

    Por exemplo:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE : a função à qual atribuir essa identidade, como roles/compute.imageUser , roles/compute.storageAdmin ou uma função personalizada

Opcionalmente, para permitir que os usuários vejam essas imagens compartilhadas em suas solicitações images.list , conceda aos usuários o papel do IAM de visualizador ( roles/viewer ) para o projeto de imagem usando o comando gcloud projects add-iam-policy-binding . Se você não precisa que seus usuários visualizem a lista de imagens compartilhadas, você pode pular esta etapa.

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

DESCANSAR

  1. Leia a política existente com o método getIamPolicy do recurso. Por exemplo, para obter 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 o seguinte:

    • PROJECT_ID : o ID do projeto ao qual 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 suas funções associadas, 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 seguinte ligação à 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 IAM atualizada da etapa anterior.

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

    Substitua o seguinte:

    • PROJECT_ID : o ID do projeto ao qual esta imagem pertence
    • IMAGE_NAME : o nome da imagem

Opcionalmente, para permitir que os usuários vejam essas imagens compartilhadas em suas solicitações images.list , conceda aos usuários a função do IAM de visualizador ( roles/viewer ) para o projeto de imagem usando o método projects.setIamPolicy . Se você não precisa que seus usuários visualizem a lista de imagens compartilhadas, você pode pular esta etapa.

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

Conceda permissões para compartilhar imagens personalizadas entre organizações

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

Console

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

    Vá para Imagens

  2. Selecione a imagem que deseja 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 principal .

  5. No campo Novos principais , insira o endereço de e-mail do grupo com o qual deseja compartilhar a imagem. Por exemplo, admins@example.com .

  6. Na lista Função , mantenha o ponteiro sobre o Compute Engine e selecione Compute Image User .

  7. Opcional: para controlar ainda mais o acesso do usuário ao Google Cloudrecursos, adicione vinculação de função condicional .

  8. Salve suas alterações.

Para permitir que os usuários iniciem imagens personalizadas compartilhadas no console do Google Cloud, conceda aos usuários o papel de visualizador do IAM ( roles/viewer ) para o projeto de imagem. A concessão dessa função ajuda a garantir que as imagens compartilhadas apareçam na lista de seleção de imagens.

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

    Acesse o IAM

  2. Clique em Conceder acesso .

  3. No campo Novos principais , insira o endereço de e-mail da identidade com a qual deseja compartilhar a imagem. Por exemplo, admins@example.com .

  4. Na lista Função , mantenha o ponteiro sobre Projeto e selecione Visualizador .

  5. Opcional: para controlar ainda mais o acesso do usuário ao Google Cloudrecursos, adicione vinculação de função condicional .

  6. Salve suas alterações.

gcloud

Para conceder a função 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 o seguinte:

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

Opcionalmente, para permitir que os usuários vejam essas imagens compartilhadas em suas solicitações images.list , conceda aos usuários o papel do IAM de visualizador ( roles/viewer ) para o projeto de imagem usando o comando gcloud projects add-iam-policy-binding . Se você não precisa que seus usuários visualizem a lista de imagens compartilhadas, você pode pular esta etapa.

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

DESCANSAR

  1. Leia a política existente com o método getIamPolicy do recurso. Por exemplo, para obter 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 o seguinte:

    • PROJECT_ID : o ID do projeto ao qual 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 suas funções associadas, você pode 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 seguinte ligação à 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 IAM atualizada da etapa anterior.

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

    Substitua o seguinte:

    • PROJECT_ID : o ID do projeto ao qual esta imagem pertence
    • IMAGE_NAME : o nome da imagem

    Opcionalmente, para permitir que os usuários vejam essas imagens compartilhadas em suas solicitações images.list , conceda aos usuários a função do IAM de visualizador ( roles/viewer ) para o projeto de imagem usando o método projects.setIamPolicy . Se você não precisa que seus usuários visualizem a lista de imagens compartilhadas, você pode pular esta etapa.

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

Conceda permissões para compartilhar imagens personalizadas publicamente

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

Você só pode compartilhar recursos, como imagens, com todos os usuários autenticados; você não pode compartilhar projetos ou organizações com todos os usuários autenticados. Essa restrição e a hierarquia de recursos ajudam a evitar que uma organização compartilhe inadvertidamente 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 da imagem do Compute ( roles/compute.imageUser ) para uma imagem personalizada.

gcloud

Para tornar as imagens públicas, 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 .

DESCANSAR

  1. Leia a política existente com o método getIamPolicy . Por exemplo, para obter 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 o seguinte:

    • PROJECT_ID : o ID do projeto ao qual 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 suas funções associadas, 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 IAM atualizada da etapa anterior.

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

    Substitua o seguinte:

    • PROJECT_ID : o ID do projeto ao qual 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 instâncias, como grupos de instâncias gerenciadas ou não gerenciadas . Se você criar um grupo de instâncias gerenciadas (MIG), o Compute Engine usará o agente de serviço de APIs do Google para chamar a API do 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 MIG usando uma imagem de outro projeto, conceda a função Compute Image User ( roles/compute.imageUser ) à conta de serviço de APIs pertencente ao projeto que cria o MIG. Por exemplo:

  1. O Projeto A deseja criar um MIG usando imagens de propriedade do Projeto B.
  2. O Projeto B concede à conta de serviço do Projeto A a função de usuário da imagem do Compute.
  3. O Projeto A agora pode usar imagens do Projeto B para criar MIGs.

Depois de conceder a função de usuário da imagem do Compute, você poderá acessar a imagem de outros projetos usando o console ou a URL da imagem ao criar o modelo de instância para o grupo gerenciado.

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

  1. No console do Google Cloud, acesse a página IAM do projeto cuja conta de serviço você deseja conceder acesso.

    Acesse o IAM

  2. Se solicitado, selecione seu projeto na lista.

  3. Procure o Agente de serviço de APIs do Google , que possui o endereço de e-mail no seguinte formato:

    PROJECT_NUMBER@cloudservices.gserviceaccount.com
    

Depois de recuperar o endereço de e-mail da conta de serviço, você pode ir para uma das seguintes seções:

Conceda acesso MIG a todas as imagens de 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 a função de usuário da imagem do Compute ( roles/compute.imageUser ).

Console

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

    Acesse o IAM

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

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

  4. Na lista Função , mantenha o ponteiro sobre Compute e selecione Compute Image User .

  5. Opcional: para controlar ainda mais o acesso do usuário ao Google Cloudrecursos, adicione vinculação de função condicional .

  6. Clique em Salvar .

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

Agora você pode criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo de 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 o seguinte:

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

Agora você pode criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo de instância.

DESCANSAR

  1. Obtenha a política 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 imagem.

  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. Escreva a política atualizada usando projects.setIamPolicy . No corpo da solicitação, forneça a política IAM atualizada da etapa anterior.

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

    Substitua PROJECT_ID pelo ID do produto do projeto de imagem.

    Agora você pode criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo de instância.

Conceda 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, pode adicionar o endereço a outro projeto e conceder a função de usuário da imagem do Compute ( roles/compute.imageUser ) para determinadas imagens.

Console

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

    Vá para Imagens

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

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

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

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

  6. Na lista Função , escolha Compute e selecione Compute Image User .

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

  8. Clique em Salvar .

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

Agora você pode criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo de instância.

gcloud

Para conceder a uma conta de serviço acesso a uma imagem específica, 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 o seguinte:

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

Agora você pode criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo de instância.

DESCANSAR

  1. Obtenha a política 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 o seguinte:

    • PROJECT_ID : o ID do projeto de imagem
    • IMAGE_NAME : o nome da imagem que você deseja 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. Escreva a política atualizada usando o método images.setIamPolicy . No corpo da solicitação, forneça a política IAM atualizada da etapa anterior.

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

    Substitua o seguinte:

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

    Agora você pode criar um modelo de instância com base em uma imagem do projeto de imagem e criar um MIG com base no modelo de instância.

Controle o uso de suas imagens e instantâneos compartilhados

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

Você deve ter permissão para modificar as políticas da sua organização para definir essas restrições. Por exemplo, a função 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. Obtenha as configurações de política existentes para sua organização usando 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 da organização de 12 dígitos.

  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 desnecessárias. Ao terminar de editar o arquivo, salve as alterações. Por exemplo, você pode definir a seguinte entrada de restrição em seu arquivo de políticas:

    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 da organização de 12 dígitos.

Ao terminar de configurar as restrições na política da sua organização, teste essas restrições para garantir que elas criem as restrições desejadas.

Use imagens de outro projeto

Se alguém lhe conceder acesso a uma ou mais imagens em outro projeto, você poderá acessar essas imagens no projeto especificando o projeto de imagem em suas solicitações.

Por exemplo, para criar uma instância usando uma imagem compartilhada de outro projeto, siga as etapas listadas em Criar uma instância a partir de uma imagem compartilhada .

Você também pode criar volumes de disco de inicialização a partir de imagens em outro projeto. Para obter informações sobre como criar um disco de inicialização a partir de uma imagem, consulte Criando um disco permanente de inicialização independente .

Revogar o acesso a imagens compartilhadas

Depois que um usuário não precisar mais de acesso aos recursos do Compute Engine, revogue o acesso dele usando o console do Google Cloud, a Google Cloud CLI ou REST.

Console

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

    Vá para Imagens

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

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

  4. Expanda a função da qual você deseja remover usuários.

  5. Para remover um usuário dessa função, clique em Excluir .

gcloud

Para remover um usuário de uma função em uma imagem, use o comando gcloud compute images remove-iam-policy-binding com os sinalizadores --member e --role :

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

Substitua o seguinte:

  • IMAGE_NAME : o nome da imagem, por exemplo, my_image
  • MEMBER : a identidade que você deseja remover

    Deve estar no formato user|group|serviceAccount:email ou domain:domain . Por exemplo:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE : a função da qual você deseja remover a identidade

Se você estiver revogando o acesso a um recurso que está na versão beta, use um comando gcloud beta compute .

DESCANSAR

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

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

    Substitua o seguinte:

    • PROJECT_ID : o ID do projeto ao qual esta imagem pertence
    • IMAGE_NAME : o nome da imagem

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

  2. Para remover membros e suas funções associadas, edite a política com um editor de texto.

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

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

    Substitua o seguinte:

    • PROJECT_ID : o ID do projeto ao qual esta imagem pertence
    • IMAGE_NAME : o nome da imagem

O que vem a seguir