跨多个项目工作

在使用 Cloud Asset Inventory 时,您可能需要根据自己的需求设计架构,使其能够跨多个项目运行。以下是常见的情况:

  • 编排器项目:当您希望单个项目触发其他项目中的 Cloud Asset Inventory 操作时。

  • 跨项目导出:当您想将资源元数据从一个项目导出到另一个项目时。

每种情况下都需要进行一些设置,以确保操作能够成功完成。

Orchestrator 项目

当您使用一个项目针对另一个项目中的资源触发 Cloud Asset Inventory 操作时,在某些情况下,您需要指定使用另一个项目中的默认 Cloud Asset Inventory 服务账号来执行操作。这些场景包括:

如需设置要使用的服务账号,请将结算项目设置为包含您要操作的资源的项目的 ID。如果未指定结算项目,Cloud Asset Inventory 会使用发出调用的项目中的默认 Cloud Asset Inventory 服务账号,该账号可能没有完成操作所需的权限。

虽然并非所有操作都需要指定结算项目,但最好始终指定结算项目,以尽可能避免混淆。

gcloud

对于 gcloud CLI,请将 --billing-project 标志添加到命令中,以指定包含正确服务账号的项目 ID:

--billing-project=BILLING_PROJECT_ID

或者,您也可以在使用 gcloud CLI 运行命令之前设置结算项目。首先,检查结算项目是否与核心项目不同:

gcloud config list

然后,根据需要设置结算项目:

gcloud config set billing/quota_project BILLING_PROJECT_ID

请提供以下值:

  • BILLING_PROJECT_ID:已启用 Cloud Asset Inventory API 的项目 ID,以及具有管理目标 Pub/Sub 主题、Cloud Storage 存储分区或 BigQuery 表的权限的服务账号。

REST

对于 REST API,请添加 X-Goog-User-Project 标头以指定包含正确服务账号的项目 ID:

"X-Goog-User-Project: BILLING_PROJECT_ID"

请提供以下值:

  • BILLING_PROJECT_ID:已启用 Cloud Asset Inventory API 的项目 ID,以及具有管理目标 Pub/Sub 主题、Cloud Storage 存储分区或 BigQuery 表的权限的服务账号。

跨项目导出

如需将资产元数据从一个项目 (PROJECT_A) 导出到另一个项目 (PROJECT_B),您必须向 PROJECT_A 中的默认 Cloud Asset Inventory 服务账号授予对 PROJECT_B 中的资源的访问权限。

这有助于实现以下两点:

  • 您可以将资产元数据从 PROJECT_A 导出到 PROJECT_B 中的 Pub/Sub 主题、Cloud Storage 存储分区或 BigQuery 表。

  • 您可以使用 PROJECT_A 将资产元数据从 PROJECT_B 导出到 PROJECT_B 中的 Pub/Sub 主题、Cloud Storage 存储分区或 BigQuery 表。

如需将资产元数据从一个项目导出到另一个项目,请完成以下说明:

  1. 确保您要从中运行请求的项目 PROJECT_A 中已启用 Cloud Asset Inventory API

  2. PROJECT_A 中至少调用一次 Cloud Asset Inventory API 以创建默认的 Cloud Asset Inventory 服务账号。或者,您也可以手动创建:

    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
    

    如何查找 Google Cloud 项目编号

    Google Cloud 控制台

    如需查找 Google Cloud 项目编号,请完成以下步骤:

    1. 前往 Google Cloud 控制台中的欢迎页面。

      前往“欢迎”页面

    2. 点击菜单栏中的切换器列表框。
    3. 从列表框中选择您的组织,然后搜索项目名称。 项目名称、项目编号和项目 ID 显示在欢迎标题附近。

      最多显示 4,000 个资源。如果您没有看到要查找的项目,请前往管理资源页面,然后使用该项目的名称过滤列表。

    gcloud CLI

    您可以使用以下命令检索 Google Cloud 项目编号:

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

  3. PROJECT_A 中的服务账号授予正确的角色。

    • 如需通过 Pub/Sub 发布到 Feed,请向主题的服务账号授予 Pub/Sub Publisher 角色 (roles/pubsub.publisher):

      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
      
    • 如需写入 Cloud Storage 存储分区,请向存储分区上的服务账号授予 Storage Admin (roles/storage.admin) 角色:

      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
      
    • 如需写入 BigQuery 表,请向项目中的服务账号授予 BigQuery Data Editor (roles/bigquery.dataEditor) 和 BigQuery User (roles/bigquery.user) 角色:

      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
      

如果您使用 PROJECT_B 中的 gcloud CLI 发出 Cloud Asset Inventory 请求或使用 REST API,请务必PROJECT_A 指定为结算项目