Usar imagens de outros projetos

Esta página descreve como configurar o seu projeto para que o Deployment Manager possa criar instâncias de máquinas virtuais do Compute Engine através de imagens do sistema operativo pertencentes a outro projeto.

Por exemplo, suponha que tem um projeto denominado Awesome Project no qual o Deployment Manager cria e gere instâncias de VMs. Agora, vamos supor que precisa de usar imagens privadas que pertencem a um projeto diferente denominado Database Images. Para conceder acesso a estas imagens, o proprietário de Database Images tem de conceder a função do IAM roles/compute.imageUser à conta de serviço das APIs Google do Awesome Project. Em seguida, o Awesome Project pode usar imagens do projeto Database Images.

Também pode usar este processo para conceder acesso a imagens de outros projetos a grupos de instâncias geridos.

Antes de começar

Limitações

Seguem-se as restrições para usar esta funcionalidade:

  • Tem de conceder a função compute.imageUser ao nível do projeto à conta de serviço das APIs Google do projeto.
  • A atribuição da função compute.imageUser concede autorizações a todas as imagens no projeto específico. Não é possível partilhar imagens específicas.
  • Tem de conceder esta função a utilizadores específicos e não a allAuthenticatedUsers nem a allUsers.

Conceder acesso a imagens

Para conceder acesso a imagens que pertencem a outro projeto, o proprietário do projeto que detém as imagens tem de conceder acesso à conta de serviço das APIs Google do projeto que quer usar as imagens.

  1. Aceda à página IAM na Google Cloud consola do projeto que precisa de acesso a imagens privadas pertencentes a outro projeto.

    Aceda à página IAM

  2. Se lhe for pedido, selecione o seu projeto na lista. Lembre-se de selecionar o projeto que precisa de acesso a imagens armazenadas noutro projeto.
  3. Procure a conta de serviço das APIs Google, que tem um endereço de email no seguinte formato:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. Tome nota do endereço de email acima. Em seguida, o proprietário do projeto onde as imagens desejadas estão alojadas pode conceder à conta de serviço das APIs Google a função roles/compute.imageUser.

    Consola

    1. Enquanto ainda estiver na consola Google Cloud , aceda à página IAM do projeto que contém as imagens às quais quer aceder.

      Aceda à página IAM

    2. Selecione o projeto na lista de projetos.
    3. Clique no botão Adicionar para adicionar um novo membro.
    4. Na caixa Membros, introduza o endereço de email da conta de serviço.
    5. Expanda o menu pendente Funções e selecione Compute Engine > Utilizador de imagens do Compute.
    6. Clique em Adicionar para adicionar a conta.

    gcloud

    Com a CLI do Google Cloud, adicione uma associaçã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

    where:

    • [PROJECT_ID] é o ID do projeto que contém as imagens que quer partilhar.
    • [SERVICE_ACCOUNT_EMAIL] é o email 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 um pedido POST ao seguinte URL, onde [PROJECT_ID] é o ID do projeto que contém as imagens que quer partilhar.

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

    O corpo do pedido deve conter a lista de associações que quer aplicar a este projeto. A função roles/compute.imageUser deve fazer parte da associação. Por exemplo:

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

    }

Usar imagens de outros projetos na sua configuração

Depois de um projeto ter acesso concedido a imagens de outro projeto, os utilizadores do projeto podem usar as imagens especificando o ID do projeto ao qual 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, pode 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, em seguida, implemente-a.

O que se segue?