VPC 네트워크에서 내부 HTTP 엔드포인트의 역할 및 권한

이 문서에서는 가상 프라이빗 클라우드(VPC) 네트워크에서 Eventarc를 사용하여 Google Cloud에서 내부 HTTP 엔드포인트로 이벤트 라우팅을 지원하도록 Identity and Access Management(IAM) 역할 및 권한을 부여하는 방법을 설명합니다.

  1. Eventarc API를 호출하는 주 구성원에 프로젝트 전체 권한 부여(예: Eventarc 트리거 생성자):

    1. Eventarc 관리자 역할이 있으면 트리거를 만들 때 트리거의 서비스 계정 지정을 포함하여 모든 Eventarc 리소스를 완전히 제어할 수 있습니다.
    2. 서비스 계정 사용자 역할이 있으면 주 구성원이 서비스 계정을 가장하고 사용할 수 있습니다. 서비스 계정은 Eventarc 트리거와 연결되며 트리거의 ID를 나타냅니다.
  2. 트리거 서비스 계정에 Eventarc 트리거 권한 부여: Eventarc 이벤트 수신자 역할이 있으면 Eventarc 트리거가 이벤트 제공자에서 이벤트를 수신할 수 있습니다. Cloud Pub/Sub에서 직접 이벤트를 라우팅하는 경우 이 역할을 부여할 필요가 없습니다.

  3. Google 서비스 에이전트에 권한 부여:

    1. 내부 HTTP 엔드포인트의 URI가 Cloud DNS에서 확인할 수 있는 서비스의 내부 DNS 이름을 사용하는 경우 Cloud DNS 피어 역할을 부여합니다.
    2. Cloud Storage에서 직접 이벤트의 트리거를 만드는 경우 Pub/Sub 게시자 역할을 부여합니다.
    3. 2021년 4월 8일 또는 그 전에 Cloud Pub/Sub 서비스 에이전트를 사용 설정한 경우 서비스 계정 토큰 생성자 역할을 부여합니다.

IAM 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요. 커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

프로젝트 전체 권한 부여

프로젝트 생성자에게는 기본 소유자 역할(roles/owner)이 부여됩니다. 기본적으로 이 역할에는 대부분의 Google Cloud 리소스에 대한 전체 액세스에 필요한 권한이 포함됩니다. 그렇지 않으면 관리자가 적절한 주 구성원(구성원이라고도 부름)에게 적절한 리소스에 대해 필요한 역할을 부여해야 합니다.

예를 들어 주 구성원은 Google 계정(최종 사용자)이거나 서비스 계정(애플리케이션 및 컴퓨팅 워크로드)일 수 있습니다. 주 구성원마다 고유 식별자(일반적으로 이메일 주소)가 있습니다.

  1. Eventarc 관리자 역할(roles/eventarc.admin)이 있으면 모든 Eventarc 리소스를 완전히 제어할 수 있습니다.

    프로젝트 수준의 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/eventarc.admin

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • PRINCIPAL: 일반적으로 PRINCIPAL_TYPE:ID 형식의 트리거 생성자의 식별자입니다. 예를 들면 user:my-user@example.com입니다. 가능한 PRINCIPAL_TYPE 값의 전체 목록은 정책 바인딩 참조를 확인하세요.
  2. 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)이 있으면 주 구성원이 서비스 계정으로 작업을 실행할 수 있습니다.

    예를 들어 사용자 관리 서비스 계정을 Eventarc 트리거와 연결할 수 있으려면 이 역할이 필요합니다. 또한 Cloud Run 서비스를 배포할 때 런타임 서비스 계정으로 실행할 수 있도록 하려면 필요합니다. 자세한 내용은 서비스 계정 가장을 참조하세요.

    주 구성원이 여러 서비스 계정을 가장할 수 있도록 프로젝트에 역할을 부여하거나 주 구성원이 특정 서비스 계정만 가장할 수 있도록 서비스 계정에 역할을 부여할 수 있습니다.

    프로젝트 수준의 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

    또는 서비스 계정 수준의 역할을 부여합니다.

    gcloud iam service-accounts add-iam-policy-binding \
        projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_PROJECT_ID: 서비스 계정이 포함된 Google Cloud 프로젝트 ID입니다.
    • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름입니다.

Eventarc 트리거 권한 부여

모든 Eventarc 트리거는 트리거가 생성될 때 IAM 서비스 계정과 연결됩니다. 트리거가 기본 ID로 사용하는 사용자 관리 서비스 계정을 지정할 수 있습니다. 트리거를 만들 때 서비스 계정을 지정하지 않으면 트리거에 Compute Engine 기본 서비스 계정이 해당 ID로 사용됩니다.

트리거를 관리할 때 제어 기능과 및 유연성을 높이기 위해서는 고유한 사용자 관리 서비스 계정을 만드는 것이 좋습니다.

  1. 서비스 계정을 만들고 이름을 기록해 둡니다.

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름. 이 이름은 서비스 계정을 식별하는 이메일 주소에 표시됩니다.
    • DESCRIPTION: 서비스 계정에 대한 선택적인 설명
    • DISPLAY_NAME: Google Cloud 콘솔에 표시할 서비스 계정 이름
  2. 트리거가 이벤트 제공업체에서 이벤트를 수신할 수 있도록 프로젝트에 Eventarc 트리거와 연결된 서비스 계정에 대해 Eventarc 이벤트 수신자 역할(roles/eventarc.eventReceiver)을 부여합니다.

    Cloud Pub/Sub에서 직접 이벤트를 라우팅하는 경우에는 Eventarc 이벤트 수신자 역할을 부여할 필요가 없습니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
    

    SERVICE_ACCOUNT_NAME을 이전 단계에서 확인한 서비스 계정의 이름으로 바꿉니다.

Google 서비스 에이전트에 권한 부여

일부 Google Cloud 서비스에는 서비스가 리소스에 액세스하도록 허용하는 Google 관리 서비스 계정이 있습니다. 이러한 서비스 계정을 서비스 에이전트라고도 합니다. API에 서비스 에이전트가 필요한 경우 API를 활성화하고 사용한 후 Google이 서비스 에이전트를 만듭니다.

  1. VPC 네트워크의 내부 HTTP 엔드포인트 URI가 Cloud DNS에서 확인할 수 있는 서비스의 내부 DNS 이름을 사용하는 경우 DNS 피어링 영역을 사용하려면 VPC 호스트 프로젝트의 DNS 피어 역할(roles/dns.peer)을 Eventarc 서비스 에이전트에 부여합니다.

    gcloud projects add-iam-policy-binding VPC_HOST_PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com \
        --role=roles/dns.peer

    다음을 바꿉니다.

    • VPC_HOST_PROJECT_ID: VPC 호스트 프로젝트의 Google Cloud 프로젝트 ID. 공유 VPC를 사용하면 호스트 프로젝트에 하나 이상의 서비스 프로젝트를 연결하여 여러 프로젝트의 리소스가 공통 VPC 네트워크에 연결할 수 있습니다.

      VPC 네트워크 구성 방법에 따라 VPC 호스트 프로젝트가 Eventarc 트리거 프로젝트일 수도 있습니다.

    • PROJECT_NUMBER: Eventarc 트리거 프로젝트의 Google Cloud 프로젝트 번호. Google Cloud 콘솔의 시작 페이지에서 또는 다음 명령어를 실행하여 프로젝트 번호를 찾을 수 있습니다.

      gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. Cloud Storage에서 직접 이벤트에 대한 트리거를 만드는 경우 주제에 메시지 게시를 지원하기 위해 프로젝트에서 Google Storage 서비스 에이전트에 대해 Pub/Sub 게시자 역할(roles/pubsub.publisher)을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
        --role=roles/pubsub.publisher

    PROJECT_NUMBER를 Google Cloud 프로젝트 번호로 바꿉니다. Google Cloud 콘솔의 시작 페이지에서 또는 다음 명령어를 실행하여 프로젝트 번호를 찾을 수 있습니다.

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  3. 2021년 4월 8일 또는 이전에 Cloud Pub/Sub 서비스 에이전트를 사용 설정한 경우 인증된 Pub/Sub 푸시 요청을 지원하려면 프로젝트에서 Pub/Sub 서비스 에이전트에 대해 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)을 부여합니다. 그렇지 않으면 기본적으로 이 역할이 부여됩니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

다음 단계