Cloud Run 대상의 역할 및 권한

이 문서에서는 Eventarc를 사용하여 Google Cloud 및 기타 소스의 이벤트를 Cloud Run 서비스로 라우팅하기 위해 Identity and Access Management(IAM) 역할과 권한을 부여하는 방법을 보여줍니다.

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

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

  3. 트리거 서비스 계정에 Cloud Run 서비스 권한 부여: Cloud Run 호출자 역할을 사용하면 Eventarc 트리거가 대상 Cloud Run 서비스를 호출할 수 있습니다. 이는 이벤트를 인증된 Cloud Run 서비스로 라우팅하는 경우에 적용됩니다.

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

    1. Cloud Storage에서 직접 이벤트의 트리거를 만드는 경우 Pub/Sub 게시자 역할을 부여합니다.
    2. 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을 이전 단계에서 확인한 서비스 계정의 이름으로 바꿉니다.

Cloud Run 서비스 권한 부여

모든 Cloud Run 서비스는 기본적으로 비공개로 배포됩니다. 즉, 요청에 인증 사용자 인증 정보를 제공하지 않으면 서비스에 액세스할 수 없습니다. 프로젝트에 도메인 제한 공유 조직 정책이 있는 경우 (인증되지 않은) 공개 액세스를 허용하는 서비스 대신 인증된 Cloud Run 대상 서비스를 사용하세요.

기본적으로 프로젝트 소유자, 프로젝트 편집자, Cloud Run 관리자, Cloud Run 호출자만 Cloud Run 서비스를 호출할 수 있습니다.

  1. 인증된 Cloud Run 대상 서비스로 이벤트를 라우팅하는 경우, 클라우드 Run 서비스의 Cloud Run Invoker 역할(run.invoker)을 Eventarc 트리거와 관련된 사용자 관리 서비스 계정에 부여합니다.

    gcloud run services add-iam-policy-binding SERVICE_NAME \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/run.invoker

    SERVICE_NAME을 Cloud Run 서비스 이름으로 바꿉니다.

  2. 원하는 경우 Google Cloud 프로젝트의 모든 Cloud Run 서비스와 작업에 대한 역할을 부여할 수 있습니다. 자세한 내용은 프로젝트의 모든 서비스와 작업에 대한 액세스 제어

Cloud Run 호출자 역할을 부여하지 않고 인증된 Cloud Run 서비스에 대한 트리거를 만들어도 트리거가 성공적으로 생성되며 활성화됩니다. 하지만 트리거가 예상한 대로 작동하지 않고 다음과 비슷한 메시지가 로그에 표시됩니다.

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

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

일부 Google Cloud 서비스에는 서비스가 리소스에 액세스하도록 허용하는 서비스 에이전트가 있습니다. API에 서비스 에이전트가 필요한 경우 개발자가 API를 활성화하고 사용하면 Google에서 서비스 에이전트를 만듭니다.

  1. 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)'
  2. 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

다음 단계