Trabalhe em vários projetos

Consoante as suas necessidades, pode ter de conceber a sua arquitetura para funcionar em vários projetos quando usar o Cloud Asset Inventory. Os seguintes cenários são os mais comuns:

  • Projetos do orquestrador: quando quer que um único projeto acione operações do inventário de recursos do Google Cloud em outros projetos.

  • Exportar entre projetos: quando quer exportar metadados de recursos de um projeto para outro.

Cada um destes cenários requer alguma configuração para garantir que as operações são concluídas com êxito.

Projetos do Orchestrator

Quando usa um projeto para acionar operações do Cloud Asset Inventory em recursos noutro projeto, em determinados cenários, tem de especificar que a conta de serviço do Cloud Asset Inventory predefinida no outro projeto seja usada para realizar a operação. Estes cenários incluem:

Para definir a conta de serviço a usar, defina o projeto de faturação para o ID do projeto que contém os recursos nos quais está a operar. Se o projeto de faturação não for especificado, o Cloud Asset Inventory usa a conta de serviço do Cloud Asset Inventory predefinida no projeto que está a fazer a chamada, que pode não ter as autorizações necessárias para concluir a operação.

Embora não seja obrigatório para todas as operações, pode ser uma boa prática especificar sempre um projeto de faturação para minimizar a confusão.

gcloud

Para a CLI gcloud, adicione a flag --billing-project ao seu comando para especificar o ID do projeto que contém a conta de serviço correta:

--billing-project=BILLING_PROJECT_ID

Em alternativa, pode definir o projeto de faturação antes de executar comandos com a CLI gcloud. Primeiro, verifique se o projeto de faturação é diferente do projeto principal:

gcloud config list

Em seguida, se necessário, defina o projeto de faturação:

gcloud config set billing/quota_project BILLING_PROJECT_ID

Indique os seguintes valores:

  • BILLING_PROJECT_ID: um ID do projeto com a API Cloud Asset Inventory ativada e uma conta de serviço com autorizações para gerir o tópico do Pub/Sub, o contentor do Cloud Storage ou a tabela do BigQuery de destino.

REST

Para a API REST, adicione o cabeçalho X-Goog-User-Project para especificar o ID do projeto que contém a conta de serviço correta:

"X-Goog-User-Project: BILLING_PROJECT_ID"

Indique os seguintes valores:

  • BILLING_PROJECT_ID: um ID do projeto com a API Cloud Asset Inventory ativada e uma conta de serviço com autorizações para gerir o tópico do Pub/Sub, o contentor do Cloud Storage ou a tabela do BigQuery de destino.

Exporte entre projetos

Para exportar metadados de recursos de um projeto, PROJECT_A, para outro, PROJECT_B, tem de conceder à conta de serviço predefinida do Cloud Asset Inventory em PROJECT_A acesso aos recursos em PROJECT_B.

Isto permite duas coisas:

  • Pode exportar metadados de recursos de PROJECT_A para um tópico do Pub/Sub, um contentor do Cloud Storage ou uma tabela do BigQuery localizados em PROJECT_B.

  • Pode usar o PROJECT_A para exportar metadados de recursos do PROJECT_B para um tópico do Pub/Sub, um contentor do Cloud Storage ou uma tabela do BigQuery localizados no PROJECT_B.

Para exportar metadados de recursos de um projeto para outro, siga as instruções abaixo:

  1. Certifique-se de que a API Cloud Asset Inventory está ativada no projeto a partir do qual quer executar o seu pedido, PROJECT_A.

  2. Faça, pelo menos, uma chamada à API Cloud Asset Inventory em PROJECT_A para criar a conta de serviço do Cloud Asset Inventory predefinida. Em alternativa, pode criá-lo manualmente:

    gcloud beta services identity create \
        --service=cloudasset.googleapis.com \
        --project=PROJECT_A_ID
    gcloud projects add-iam-policy-binding PROJECT_A_ID \
        --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
        --role=roles/cloudasset.serviceAgent
    

    Como encontrar um Google Cloud número do projeto

    Google Cloud consola

    Para encontrar um Google Cloud número do projeto, conclua os seguintes passos:

    1. Aceda à página Boas-vindas na Google Cloud consola.

      Aceder a Boas-vindas

    2. Clique na caixa de lista do comutador na barra de menu.
    3. Selecione a sua organização na caixa de lista e, em seguida, pesquise o nome do projeto. O nome do projeto, o número do projeto e o ID do projeto são apresentados junto ao título Bem-vindo.

      São apresentados até 4000 recursos. Se não vir o projeto que procura, aceda à página Gerir recursos e filtre a lista através do nome desse projeto.

    CLI gcloud

    Pode obter um Google Cloud número do projeto com o seguinte comando:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"

  3. Conceda as funções corretas à conta de serviço em PROJECT_A.

    • Para publicar num feed através do Pub/Sub, conceda a função de publicador do Pub/Sub (roles/pubsub.publisher) à conta de serviço no tópico:

      gcloud pubsub topics add-iam-policy-binding projects/PROJECT_B_ID/topics/TOPIC_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/pubsub.publisher
      
    • Para escrever num contentor do Cloud Storage, conceda a função de administrador de armazenamento (roles/storage.admin) à conta de serviço no contentor:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
        --role=roles/storage.admin
      
    • Para escrever numa tabela do BigQuery, conceda as funções de editor de dados do BigQuery (roles/bigquery.dataEditor) e utilizador do BigQuery (roles/bigquery.user) à conta de serviço no projeto:

      gcloud projects add-iam-policy-binding PROJECT_B_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/bigquery.dataEditor
      gcloud projects add-iam-policy-binding PROJECT_B_ID \
          --member=serviceAccount:service-PROJECT_A_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
          --role=roles/bigquery.user
      

Se fizer um pedido do Cloud Asset Inventory com a CLI gcloud a partir de PROJECT_B ou usar a API REST, certifique-se de que especifica PROJECT_A como o projeto de faturação.