在使用 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 表。
如需将资产元数据从一个项目导出到另一个项目,请完成以下说明:
确保您要从中运行请求的项目
PROJECT_A
中已启用 Cloud Asset Inventory API。在
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 项目编号,请完成以下步骤:
gcloud CLI
您可以使用以下命令检索 Google Cloud 项目编号:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"
向
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
指定为结算项目。