Uso de imagens de outros projetos

Nesta página, descrevemos como configurar o projeto para que o Deployment Manager possa criar instâncias de máquina virtual do Compute Engine usando imagens do sistema operacional pertencentes a outro projeto.

Por exemplo, imagine que você criou um projeto denominado Awesome Project, em que o Deployment Manager cria e gerencia instâncias de VM e você precisa usar imagens particulares pertencentes a um projeto diferente, denominado Database Images. Para conceder acesso a essas imagens, o proprietário do Database Images precisa atribuir o papel roles/compute.imageUser de IAM à conta de serviço de APIs do Google do Awesome Project, que poderá usar as imagens do projeto Database Images.

É possível também usar esse processo para conceder acesso de grupos de instâncias gerenciadas a imagens de outros projetos.

Antes de começar

Limitações

Estas são as restrições de uso desse recurso:

  • Você precisa conceder o papel compute.imageUser no nível do projeto.
  • Ao atribuir o papel compute.imageUser, você concede permissões a todas as imagens no projeto específico. Não é possível compartilhar imagens específicas.
  • Você precisa conceder esse papel a usuários específicos e não a allAuthenticatedUsers ou allUsers.

Como conceder acesso a imagens

Para conceder acesso a imagens pertencentes a outro projeto, o proprietário do projeto que detém as imagens precisa conceder acesso à conta de serviço de APIs do Google do projeto que pretende usar as imagens.

  1. Vá para a página "IAM" no Console do Cloud do projeto que precisa de acesso a imagens particulares que pertencem a outro projeto.

    Acessar a página "IAM"

  2. Caso solicitado, selecione o projeto na lista. Selecione o projeto que precisa de acesso a imagens armazenadas em outro projeto.
  3. Procure a conta de serviço de APIs do Google, que tem o endereço de e-mail no seguinte formato:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
        
  4. Anote o endereço de e-mail acima. Em seguida, o proprietário do projeto em que estão as imagens pretendidas pode conceder o papel roles/compute.imageUser à conta de serviço de APIs do Google.

    Console

    1. Ainda no Console do Google Cloud, 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.
    6. Clique em Adicionar para incluir a conta.

    gcloud

    Com a ferramenta de linha de comando gcloud, adicione uma vinculação à política do Cloud IAM para o projeto:

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

    onde:

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

    Por 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 ID do projeto em que estão as imagens que você pretende compartilhar.

    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. É preciso que o papel roles/compute.imageUser faça 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"
                   ]
               }
               ]
           }
        

    }

Uso de imagens de outros projetos na configuração

Depois que um projeto tiver acesso a imagens de outro projeto, os usuários do projeto poderão usar as imagens especificando o ID do projeto a que as imagens pertencem nos seus modelos ou configurações:

image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]
    

Por exemplo, se o ID do projeto de imagem for database-images, será possível fornecer o seguinte URI de imagem na sua configuração:

    resources:
    - name: a-special-vm
      type: compute.v1.instances
      properties:
        machineType: zones/us-central1-a/machineTypes/f1-micro
        image: projects/database-images/global/images/example-database-image
        ...

Depois de adicionar a imagem, conclua a criação da configuração e implemente-a.

A seguir