여러 프로젝트에서 작업

필요에 따라 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 테이블로 애셋 메타데이터를 내보낼 수 있습니다.

한 프로젝트에서 다른 프로젝트로 애셋 메타데이터를 내보내려면 다음 안내를 완료하세요.

  1. 요청을 실행하려는 프로젝트인 PROJECT_A에서 Cloud 애셋 인벤토리 API가 사용 설정되어 있는지 확인합니다.

  2. 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 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.

    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 애셋 인벤토리 요청을 실행하거나 REST API를 사용하는 경우 PROJECT_A를 결제 프로젝트로 지정해야 합니다.