Como compartilhar tipos entre projetos

Esta página descreve como compartilhar os tipos e provedores de tipos do seu projeto com outros projetos. Por exemplo, suponha que você tenha um projeto responsável por manter os provedores de tipos pré-aprovados da sua empresa. Você quer ter a capacidade de compartilhar os provedores de tipos desse projeto com outros projetos, bem como usar o projeto como um repositório central de tipos. Da mesma forma, também é possível usar esse método para compartilhar tipos compostos entre projetos.

Para configurar o acesso, o proprietário do projeto a que pertence o tipo precisará conceder o papel deploymentmanager.typeViewer (Beta) à conta de serviço do projeto que pretende consumir os tipos. Também é necessário conceder esse papel aos usuários que pretendam visualizar e listar tipos de outro projeto.

Antes de começar

Limitações

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

  • O papel deploymentmanager.typeViewer concede permissões a todos os tipos no projeto específico. Não é possível limitar o compartilhamento a tipos individuais.
  • Não é possível conceder esse papel a allAuthenticatedUsers ou allUsers.

Como conceder acesso a um projeto para a utilização de tipos

Para conceder acesso a tipos que pertençam a outros projetos, o proprietário do projeto a que pertencem os tipos em questão precisa conceder o papel deploymentmanager.typeViewer à Conta de serviço de APIs do Google do projeto que pretende consumir os tipos.

  1. Acesse a página do IAM no console do Google Cloud do projeto que vai consumir os tipos.

    Acessar a página do 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. Em seguida, o proprietário do projeto onde os tipos desejados estão ativos pode conceder o papel roles/deploymentmanager.typeViewer à conta de serviço das APIs do Google.

    Console

    1. Ainda no console do Google Cloud, acesse a página do IAM do projeto que contém os tipos que você quer compartilhar.

      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. Expanda o menu suspenso Papéis e selecione Outro > Visualizador de tipos do Deployment Manager (beta).
    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/deploymentmanager.typeViewer

    onde:

    • [PROJECT_ID] é o ID do projeto com imagens a serem compartilhadas;
    • [SERVICE_ACCOUNT_EMAIL] é o e-mail da conta de serviço no projeto com que você pretende compartilhar os tipos.

    Exemplo:

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

    API

    Na API, faça uma solicitação POST para o seguinte URL, em que [PROJECT_ID] é o ID do projeto que contém os tipos que você quer 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/deploymentmanager.typeViewer faça parte da vinculação. Exemplo:

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

    }

Como usar tipos de outros projetos na configuração

Após conseguir o acesso aos tipos, você pode especificar o tipo nas configurações usando a sintaxe. Para tipos compostos:

type: [PROJECT_ID]/composite:[TYPE]

Para provedores de tipos:

type: [PROJECT_ID]/[TYPE]:[COLLECTION]

Em que:

  • [PROJECT_ID] é o ID do projeto em que está o tipo;
  • [TYPE] é o nome do provedor de tipos ou do tipo composto;
  • [COLLECTION] é o recurso específico que você está criando. Isso é aplicável somente aos tipos básicos. Para mais informações sobre como especificar os tipos básicos, leia Como chamar um provedor de tipos em uma configuração.

Por exemplo, se o ID do projeto for my-type-repository, será possível fornecer a seguinte especificação de tipo:

resources:
- name: a-special-vm
  type: my-type-repository/composite:autoscaled-igm
  properties:
    ...

Como conceder a capacidade de listar e visualizar tipos a usuários

A concessão do papel deploymentmanager.typeViewer à conta de serviço do projeto permite que o projeto implante esses tipos nas suas configurações, mas não permite que os usuários vejam ou listem esses tipos. Se você quiser conceder a usuários individuais a capacidade de visualizar tipos, você precisa conceder o papel deploymentmanager.typeViewer a cada usuário.

Por exemplo, para que Jane execute o comando gcloud beta deployment-manager types list --project another-project de um projeto que não seja dela, é preciso que o papel deploymentmanager.typeViewer lhe seja concedido pelo proprietário do another-project.

Com a CLI gcloud, é possível conceder a Jane o papel da seguinte forma:

 gcloud projects add-iam-policy-binding another-project \
        --member user:jane@gmail.com --role deploymentmanager.typeViewer

Para instruções detalhadas sobre como adicionar e remover papéis de usuários, leia a documentação sobre como conceder, alterar e revogar acesso a membros do projeto.

Próximas etapas