ニーズに応じて、Cloud Asset Inventory を使用するときに、複数のプロジェクトで機能するようにアーキテクチャを設計する必要があります。最も一般的なシナリオは次のとおりです。
オーケストレーター プロジェクト: 1 つのプロジェクトで他のプロジェクトの 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 テーブルにエクスポートできます。
アセット メタデータをあるプロジェクトから別のプロジェクトにエクスポートする手順は次のとおりです。
リクエストを実行するプロジェクト(
PROJECT_A
)で Cloud Asset Inventory API が有効になっていることを確認します。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 プロジェクト番号を確認するには、次の手順を行います。
-
Google Cloud コンソールの [ようこそ] ページに移動します。
- メニューバーの切り替えボックスをクリックします。
-
リストボックスから組織を選択し、プロジェクト名を検索します。プロジェクト名、プロジェクト番号、プロジェクト ID は [ようこそ] の見出しの近くに表示されます。
最大 4,000 個のリソースが表示されます。目的のプロジェクトが表示されない場合は、[リソースの管理] ページに移動し、そのプロジェクトの名前を使用してリストをフィルタします。
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.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
を指定してください。