複数のプロジェクトで作業する

ニーズに応じて、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 のリソースへのアクセス権を付与する必要があります。

これにより、次の 2 つのことが可能になります。

  • アセット メタデータを 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 を少なくとも 1 回呼び出して、デフォルトの 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 を介してフィードにパブリッシュするには、トピックのサービス アカウントに 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.objectCreator
      
    • 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.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
      

PROJECT_B から gcloud CLI を使用して Cloud Asset Inventory リクエストを行う場合、または REST API を使用する場合は、課金プロジェクトとして PROJECT_A を指定してください。