視需求而定,使用 Cloud Asset Inventory 時,您可能需要設計架構,以便跨多個專案運作。最常見的情況如下:
在這些情況下,您都需要進行一些設定,確保作業順利完成。
自動調度管理工具專案
當您使用專案觸發其他專案中資源的 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 資料表。
如要將資產中繼資料從一個專案匯出至另一個專案,請完成下列操作:
請確認您要執行要求的專案已啟用 Cloud Asset Inventory API
PROJECT_A
。在
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 發布至動態消息,請將Pub/Sub 發布者角色 (
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 值區,請將儲存空間管理員(
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 資料編輯者」(
roles/bigquery.dataEditor
) 和「BigQuery 使用者」(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
如果您透過 gcloud CLI 從 PROJECT_B
提出 Cloud Asset Inventory 要求,或使用 REST API,請務必將 PROJECT_A
指定為計費專案。