필요에 따라 Cloud 애셋 인벤토리를 사용할 때 여러 프로젝트에서 작동하도록 아키텍처를 설계해야 할 수도 있습니다. 다음 시나리오가 가장 일반적입니다.
조정자 프로젝트: 단일 프로젝트에서 다른 프로젝트의 Cloud 애셋 인벤토리 작업을 트리거하려는 경우
프로젝트 간 내보내기: 한 프로젝트에서 다른 프로젝트로 리소스 메타데이터를 내보내려는 경우
이러한 각 시나리오에서는 작업이 성공적으로 완료되도록 몇 가지 설정이 필요합니다.
조정자 프로젝트
프로젝트를 사용하여 다른 프로젝트의 리소스에 대한 Cloud 애셋 인벤토리 작업을 트리거하는 경우 특정 시나리오에서는 다른 프로젝트의 기본 Cloud 애셋 인벤토리 서비스 계정이 작업을 실행하는 데 사용되도록 지정해야 합니다. 이러한 시나리오에는 다음이 포함됩니다.
사용할 서비스 계정을 설정하려면 결제 프로젝트를 작업 중인 리소스가 포함된 프로젝트의 ID로 설정합니다. 결제 프로젝트가 지정되지 않으면 Cloud 애셋 인벤토리는 호출을 수행하는 프로젝트의 기본 Cloud 애셋 인벤토리 서비스 계정을 사용하며, 이 계정에는 작업을 완료하는 데 필요한 권한이 없을 수 있습니다.
모든 작업에 반드시 필요한 것은 아니지만 혼란을 최소화하기 위해 항상 결제 프로젝트를 지정하는 것이 좋습니다.
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 애셋 인벤토리 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 애셋 인벤토리 API가 사용 설정된 프로젝트 ID와 대상 Pub/Sub 주제, Cloud Storage 버킷 또는 BigQuery 테이블을 관리할 수 있는 권한이 있는 서비스 계정
프로젝트 간 내보내기
한 프로젝트(PROJECT_A
)에서 다른 프로젝트(PROJECT_B
)로 애셋 메타데이터를 내보내려면 PROJECT_A
의 기본 Cloud 애셋 인벤토리 서비스 계정에 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 애셋 인벤토리 API가 사용 설정되어 있는지 확인합니다.PROJECT_A
에서 Cloud 애셋 인벤토리 API를 최소 한 개 이상 호출하여 기본 Cloud 애셋 인벤토리 서비스 계정을 만듭니다. 또는 수동으로 만들 수 있습니다.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.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 애셋 인벤토리 요청을 실행하거나 REST API를 사용하는 경우 PROJECT_A
를 결제 프로젝트로 지정해야 합니다.