處理多個專案

視需求而定,使用 Cloud Asset Inventory 時,您可能需要設計架構,以便跨多個專案運作。最常見的情況如下:

  • 協調器專案:當您希望單一專案在其他專案中觸發 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 資料表。

如要將資產中繼資料從一個專案匯出至另一個專案,請完成下列操作:

  1. 請確認您要執行要求的專案已啟用 Cloud Asset Inventory API PROJECT_A

  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 控制台的「Welcome」(歡迎) 頁面。

      前往「歡迎」

    2. 按一下選單列中的「切換器」清單方塊。
    3. 從清單方塊中選取機構,然後搜尋專案名稱。 專案名稱、專案編號和專案 ID 會顯示在「歡迎」標題附近。

      最多會顯示 4,000 個資源。如果找不到所需專案,請前往「管理資源」頁面,然後使用該專案的名稱篩選清單。

    gcloud CLI

    您可以使用下列指令擷取專案編號: Google Cloud

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

  3. 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 指定為計費專案