Como compartilhar imagens e snapshots

É possível compartilhar imagens e instantâneos com usuários fora do projeto ou da sua organização. Os usuários com acesso de leitura a esses recursos podem usá-los para concluir operações em outros projetos e organizações. Por exemplo, se você conceder a um usuário acesso de leitura a uma imagem ou a um instantâneo no projeto, ele poderá usar esses recursos para criar discos permanentes nos próprios projetos. Use papéis do IAM para compartilhar o acesso de leitura a imagens, instantâneos e discos.

É possível fazer com que usuários autorizados tenham acesso a recursos de armazenamento apenas quando usarem esses recursos na organização ou em determinados projetos. Para limitar os projetos em que usuários podem usar suas imagens e instantâneos para criar recursos, defina a restrição de uso do recurso de armazenamento como uma política da organização.

Leia a documentação do IAM para saber mais sobre os papéis dele.

Para saber sobre as políticas do IAM no nível do recurso, que permitem conceder acesso a recursos específicos, como imagens em vez de um projeto inteiro, consulte Como conceder acesso aos recursos do Compute Engine.

Antes de começar

Limitações

O compartilhamento dos recursos de armazenamento tem as restrições a seguir:

  • Não é possível conceder a allAuthenticatedUsers ou allUsers papéis que permitam acesso a imagens ou snapshots.

  • Somente é possível definir a restrição constraints/compute.storageResourceUseRestrictions no nível da organização.

  • É preciso usar a API do Compute Engine para criar imagens ou instantâneos de recursos fora do projeto. Por exemplo, referencie imagens e instantâneos em projetos remotos ao executar métodos que exijam que você especifique um caminho para uma imagem ou instantâneo. Alguns exemplos desses métodos são:

Como compartilhar recursos de armazenamento com projetos e organizações

Compartilhe o acesso a imagens e snapshots com outros usuários concedendo a eles os seguintes papéis ou permissões do IAM no nível do recurso, do projeto, da pasta ou da organização:

  • Imagens: o papel roles/compute.imageUser ou a permissão compute.images.useReadOnly.
  • Snapshots: o papel roles/compute.storageAdmin ou a permissão compute.snapshots.useReadOnly.

Esses papéis e permissões permitem compartilhar imagens e snapshots com outros membros da equipe fora do projeto que tem as imagens e os snapshots. Por exemplo, a empresa pode ter um projeto específico com imagens qualificadas que o restante da empresa pode usar. É possível conceder o papel roles/compute.imageUser a membros da equipe no nível do projeto, o que lhes permite usar essas imagens nos projetos deles.

Para conceder o papel de compartilhamento de imagem, use o Console, a ferramenta de linha de comando gcloud ou a API. Leia a documentação do IAM para saber como usá-lo.

Console

  1. Abra a página "IAM" no Console do GCP.

    Acessar a página IAM

  2. Se solicitado, selecione o projeto.
  3. Para adicionar um novo usuário:
    1. Clique em Adicionar na parte superior da página.
    2. Forneça um ou mais endereços de e-mail da conta a que você quer conceder acesso.
    3. Conceda um ou mais papéis ao membro.
      • Imagens: selecione Compute Engine > Usuário da imagem do Compute no seletor de papéis.
      • Instantâneos: selecione Compute Engine> Administrador do Compute Storage no seletor de papéis.
  4. Salve as alterações.

gcloud

Se você usar a ferramenta de linha de comando gcloud, adicione uma vinculação à política do Cloud IAM para a imagem ou o projeto de imagem. O exemplo a seguir adiciona uma vinculação ao projeto.

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member [MEMBER_TYPE]:[ACCOUNT] --role [ROLE]

em que:

  • [PROJECT_ID] é o código do projeto com imagens a serem compartilhadas;
  • [MEMBER_TYPE] é o tipo de conta à qual está sendo concedido acesso. Por exemplo, use user para usuários individuais, serviceAccount para conta de serviço e group para grupo do Google;
  • [ACCOUNT] é o endereço de e-mail da conta a ser concedido acesso ao papel. Por exemplo, em uma conta de serviço poderia ser my-sa@my-project-123.iam.gserviceaccount.com.
  • [ROLE] é o papel que você quer conceder ao usuário. Para imagens, especifique roles/compute.imageUser. Para instantâneos, especifique roles/compute.storageAdmin.

Por exemplo, isto concede o papel roles/compute.imageUser a john@example.com. Dessa maneira, ele pode acessar imagens em um projeto chamado database-images:

gcloud projects add-iam-policy-binding database-images \
    --member user:john@example.com --role roles/compute.imageUser

API

Na API, faça uma solicitação POST para o URL a seguir, em que [PROJECT_ID] é o código do projeto que contém as imagens a serem compartilhadas.

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

O corpo da solicitação precisa conter a lista de vinculações que você quer aplicar a esse projeto. O papel precisa fazer parte da vinculação. Exemplo:

{
   "policy": {
       "version": "0",
       "bindings": [
       {
           "role": "roles/compute.admin",
           "members": [
               "user:example@gmail.com"
           ]
       },
       {
           "role": "roles/compute.imageUser",
           "members": [
               "user:john@gmail.com"
           ]
       }
       ]
   }

}

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

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 Google Compute Engine e realizar ações relevantes 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 compute.imageUser à conta de serviço das APIs pertencentes ao projeto criando um grupo de instâncias gerenciadas.

Por exemplo, suponhamos que o Projeto A queira criar grupos de instâncias usando imagens de propriedade do Projeto B. O proprietário do projeto B precisa conceder à conta de serviço das APIs do Google do Projeto A o papel compute.imageUser do Projeto B. Isso dá à conta a possibilidade de usar as imagens do Projeto B para criar grupos de instâncias gerenciadas no Projeto A.

Depois de conceder o papel compute.imageUser, forneça o URL da imagem específica ao criar o modelo de instância do grupo.

Siga estas etapas para receber o e-mail da conta de serviço e conceder acesso à conta:

  1. Acesse a página "IAM" no Console do GCP do projeto que está criando os grupos de instâncias gerenciadas.

    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, conceda acesso à conta do projeto que contém as imagens.

    Console

    1. Ainda no Console do Google Cloud Platform, acesse a página "IAM" do projeto que contém as imagens que você quer acessar.

      Acessar a página IAM

    2. Selecione o projeto na lista de projetos.
    3. Clique no botão Adicionar para incluir um novo membro.
    4. Na caixa Membros, digite o endereço de e-mail da conta de serviço.
    5. Abra o menu suspenso Papéis e selecione Compute Engine > Usuário de imagens do Compute (beta).
    6. Clique em Adicionar para incluir a conta.

    gcloud

    Se você usar a ferramenta de linha de comando gcloud, adicione uma vinculação à política do Cloud IAM para a imagem ou o projeto de imagem. O exemplo a seguir adiciona uma vinculação no nível do projeto.

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

    em que:

    • [PROJECT_ID] é o código do projeto com imagens a serem compartilhadas;
    • [SERVICE_ACCOUNT_EMAIL] é o e-mail da conta de serviço.

    Exemplo:

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/compute.imageUser

    API

    Na API, faça uma solicitação POST para o URL a seguir, em que [PROJECT_ID] é o código do projeto que contém as imagens a serem compartilhadas.

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

    O corpo da solicitação precisa conter a lista de vinculações que você quer aplicar a esse projeto. O papel roles/compute.imageUser faz parte da vinculação. Exemplo:

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/compute.imageUser",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gservbiceaccount.com"
               ]
           }
           ]
       }
    }
    

Como restringir o uso de imagens e instantâneos compartilhados

Depois de compartilhar imagens e instantâneos com outros usuários, será possível controlar onde eles usam esses recursos. Defina a restrição constraints/compute.storageResourceUseRestrictions para especificar os projetos em que os usuários têm permissão para usar os 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 código da sua organização.

    gcloud organizations list
    
  2. Receba as configurações de política existentes para o projeto.

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

    em que [ORGANIZATION_ID] é o código 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 concluir a edição do 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 à organização.

    gcloud beta resource-manager org-policies set-policy
    --organization [ORGANIZATION_ID] org-policy.yaml
    

    em que [ORGANIZATION_ID] é o código da organização.

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

Como usar imagens de outro projeto

Se alguém tiver concedido a você o papel compute.imageUser, será possível acessar as imagens no projeto especificando o projeto da imagem nas solicitações. Por exemplo, para ver uma lista das imagens disponíveis:

gcloud compute images list --project [IMAGE_PROJECT]

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 cria abaixo uma instância usando uma imagem chamada database-image-a com base no projeto database-images:

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

Da mesma forma, use a imagem para criar discos permanentes. Para informações sobre a criação de discos a partir de imagens, leia Criar um disco permanente de raiz independente.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine