Uso de imagens de outros projetos

Esta página descreve 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.

Você também pode 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 à conta de serviço das APIs do Google do seu 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. Acesse a página do IAM no console do Google Cloud do projeto que precisa do acesso a imagens particulares de propriedade de outro projeto.

    Acessar a página do 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 do IAM do projeto que contém as imagens que você quer acessar.

      Acessar a página do 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 Google Cloud CLI, adicione uma vinculação à política do 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 ID do projeto que contém as 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 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"
               ]
           }
           ]
       }
    

    }

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