Cloud Run의 역할 및 권한

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 문서에서는 Identity and Access Management(IAM) 역할, 권한, 플래그를 설정하여 Google Cloud 및 타사 소스에서 Eventarc 이벤트를 수신하고 이벤트를 인증 또는 인증되지 않은 Cloud Run 대상 서비스로 전달하는 방법을 보여줍니다.

이 문서에서는 다음을 수행하는 방법을 보여줍니다.

  • 사용자에게 특정 IAM 역할을 부여합니다.
  • 트리거의 서비스 계정에 특정 역할과 권한을 부여합니다. Eventarc에서는 고객 제공 서비스 계정을 트리거 ID로 사용합니다.
  • 2021년 4월 8일 이전에 Pub/Sub 서비스 계정을 사용 설정했으면 Pub/Sub 서비스 계정에 iam.serviceAccountTokenCreator 역할을 부여합니다.
  • Google Cloud CLI를 사용할 경우 소스 저장소의 컨테이너 이미지나 버전을 Cloud Run에 배포할 때 Cloud Run 플래그를 적절하게 설정합니다.

Eventarc의 액세스 제어 옵션에 대한 자세한 내용은 액세스 제어를 참조하세요.

Eventarc 이벤트 유형 및 역할

Eventarc는 다음 이벤트 유형에 대해 트리거를 지원합니다.

  • Cloud 감사 로그 이벤트: Eventarc는 Cloud 감사 로그를 사용하여 Google Cloud 소스에서 이벤트를 수신합니다.
  • 직접 이벤트: Eventarc는 Google Cloud 소스에서 Cloud Storage 버킷 업데이트와 같은 직접 이벤트를 수신합니다.
  • Cloud Pub/Sub 이벤트: Eventarc는 Pub/Sub 알림을 사용하여 타사 소스로부터 이벤트를 수신합니다.

Cloud Run의 인증 호출

이벤트 유형에 따라 인증된 Cloud Run 대상 서비스에 적절한 IAM 역할, 권한, 플래그를 부여합니다.

Cloud 감사 로그

Google Cloud 소스에서 이벤트를 수신하고 인증된 Cloud Run 대상으로 전달하려면 다음 안내를 따르세요.

사용자 역할

사용자에게 Eventarc 관리자 역할(roles/eventarc.admin)을 부여합니다.

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

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com


서비스 계정 역할(roles/iam.serviceAccountUser)을 사용자에게 부여합니다.

gcloud iam service-accounts add-iam-policy-binding \
 SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
   --member=PRINCIPAL \
   --role='roles/iam.serviceAccountUser'

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com

트리거 서비스 계정 역할

트리거의 서비스 계정에 Cloud Run 호출자 역할(roles/run.invoker)을 부여합니다.

gcloud run services add-iam-policy-binding SERVICE_NAME \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/run.invoker'

다음 값을 바꿉니다.

  • SERVICE_NAME: 이 트리거로 호출해야 하는 서비스의 이름입니다.
  • SERVICE_ACCOUNT_USER_EMAIL: 서비스 계정의 이메일 주소입니다.

Eventarc 이벤트 수신자 역할(roles/eventarc.eventReceiver)을 트리거의 서비스 계정에 부여합니다.

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/eventarc.eventReceiver'

SERVICE_ACCOUNT_USER_EMAIL서비스 계정의 이메일 주소로 바꿉니다.

Pub/Sub 서비스 계정 역할

서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)은 기본적으로 Pub/Sub 서비스 계정에 부여됩니다.

중요: 2021년 4월 8일 이전에 Pub/Sub 서비스 계정을 사용 설정한 경우 프로젝트당 Pub/Sub 서비스 계정에 다음 역할을 부여합니다.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Cloud Run 플래그

다음 명령어를 사용하여 이벤트 수신자 서비스를 인증된 Cloud Run 대상에 배포합니다.

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/SERVICE_NAME

다음 값을 바꿉니다.

  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • SERVICE_NAME: Cloud Run 서비스 이름입니다.

직접 이벤트

Cloud Storage 버킷 업데이트와 같은 이벤트를 인증된 Cloud Run 대상으로 전송하는 동안 소스에서 직접 수신하려면 다음 안내를 따르세요.

사용자 역할

사용자에게 Eventarc 관리자 역할(roles/eventarc.admin)을 부여합니다.

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

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com


서비스 계정 역할(roles/iam.serviceAccountUser)을 사용자에게 부여합니다.

gcloud iam service-accounts add-iam-policy-binding \
  SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
     --member=PRINCIPAL \
     --role='roles/iam.serviceAccountUser'

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com

Cloud Storage 서비스 계정 역할

Cloud Storage에서 직접 이벤트에 대한 트리거를 만드는 경우 Pub/Sub 게시자 역할(roles/pubsub.publisher)을 Cloud Storage의 서비스 계정에 부여합니다.

SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:${SERVICE_ACCOUNT}"
  --role='roles/pubsub.publisher'

PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

트리거 서비스 계정 역할

트리거의 서비스 계정에 Cloud Run 호출자 역할(roles/run.invoker)을 부여합니다.

gcloud run services add-iam-policy-binding SERVICE_NAME \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/run.invoker'

다음 값을 바꿉니다.

  • SERVICE_NAME: 이 트리거로 호출해야 하는 서비스의 이름입니다.
  • SERVICE_ACCOUNT_USER_EMAIL: 서비스 계정의 이메일 주소입니다.

Eventarc 이벤트 수신자 역할(roles/eventarc.eventReceiver)을 트리거의 서비스 계정에 부여합니다.

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/eventarc.eventReceiver'

SERVICE_ACCOUNT_USER_EMAIL서비스 계정의 이메일 주소로 바꿉니다.

Pub/Sub 서비스 계정 역할

서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator) 역할은 기본적으로 Pub/Sub 서비스 계정에 부여됩니다.

중요: 2021년 4월 8일 이전에 Pub/Sub 서비스 계정을 사용 설정한 경우 프로젝트당 Pub/Sub 서비스 계정에 다음 역할을 부여합니다.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Cloud Run 플래그

다음 명령어를 사용하여 이벤트 수신자 서비스를 인증된 Cloud Run 대상에 배포합니다.

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/SERVICE_NAME

다음 값을 바꿉니다.

  • SERVICE_ACCOUNT_ID를 서비스 계정 ID로 바꿉니다.
  • SERVICE_NAME: Cloud Run 서비스 이름입니다.

게시/구독 주제

타사 소스에서 이벤트를 수신하고 인증된 Cloud Run 대상으로 전달하려면 다음 안내를 따르세요.

사용자 역할

사용자에게 Eventarc 관리자 역할(roles/eventarc.admin)을 부여합니다.

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

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com


서비스 계정 역할(roles/iam.serviceAccountUser)을 사용자에게 부여합니다.

gcloud iam service-accounts add-iam-policy-binding \
  SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
     --member=PRINCIPAL \
     --role='roles/iam.serviceAccountUser'

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com

트리거 서비스 계정 역할

트리거의 서비스 계정에 Cloud Run 호출자 역할(roles/run.invoker)을 부여합니다.

gcloud run services add-iam-policy-binding SERVICE_NAME \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/run.invoker'

다음 값을 바꿉니다.

  • SERVICE_NAME: 이 트리거로 호출해야 하는 서비스의 이름입니다.
  • SERVICE_ACCOUNT_USER_EMAIL: 서비스 계정의 이메일 주소입니다.

Pub/Sub 서비스 계정 역할

서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator) 역할은 기본적으로 Pub/Sub 서비스 계정에 부여됩니다.

중요: 2021년 4월 8일 이전에 Pub/Sub 서비스 계정을 사용 설정한 경우 프로젝트당 Pub/Sub 서비스 계정에 다음 역할을 부여합니다.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Cloud Run 플래그

다음 명령어를 사용하여 이벤트 수신자 서비스를 인증된 Cloud Run 대상에 배포합니다.

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/SERVICE_NAME

다음 값을 바꿉니다.

  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • SERVICE_NAME: Cloud Run 서비스 이름입니다.

Cloud Run의 인증되지 않은 호출

이벤트 유형에 따라 인증되지 않은 Cloud Run 대상 서비스에 적절한 IAM 역할, 권한, 플래그를 부여합니다.

Cloud 감사 로그

Google Cloud 소스에서 이벤트를 수신하고 인증되지 않은 Cloud Run 대상으로 전달하려면 다음 안내를 따르세요.

사용자 역할

사용자에게 Eventarc 관리자 역할(roles/eventarc.admin)을 부여합니다.

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

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com


서비스 계정 역할(roles/iam.serviceAccountUser)을 사용자에게 부여합니다.

gcloud iam service-accounts add-iam-policy-binding \
  SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
    --member=PRINCIPAL \
    --role='roles/iam.serviceAccountUser'

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com

트리거 서비스 계정 역할

Eventarc 이벤트 수신자 역할(roles/eventarc.eventReceiver)을 트리거의 서비스 계정에 부여합니다.

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/eventarc.eventReceiver'

SERVICE_ACCOUNT_USER_EMAIL서비스 계정의 이메일 주소로 바꿉니다.

Pub/Sub 서비스 계정 역할

서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator) 역할은 기본적으로 Pub/Sub 서비스 계정에 부여됩니다.

중요: 2021년 4월 8일 이전에 Pub/Sub 서비스 계정을 사용 설정한 경우 프로젝트당 Pub/Sub 서비스 계정에 다음 역할을 부여합니다.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Cloud Run 플래그

다음 명령어를 사용하여 이벤트 수신자 서비스를 인증되지 않은 Cloud Run 대상에 배포합니다.

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/SERVICE_NAME \
  --allow-unauthenticated

다음 값을 바꿉니다.

  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • SERVICE_NAME: Cloud Run 서비스 이름입니다.

직접 이벤트

Cloud Storage 버킷 업데이트와 같은 이벤트를 인증되지 않은 Cloud Run 대상으로 전송하는 동안 소스에서 직접 수신하려면 다음 안내를 따르세요.

사용자 역할

사용자에게 Eventarc 관리자 역할(roles/eventarc.admin)을 부여합니다.

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

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com


서비스 계정 역할(roles/iam.serviceAccountUser)을 사용자에게 부여합니다.

gcloud iam service-accounts add-iam-policy-binding \
  SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
    --member=PRINCIPAL \
    --role='roles/iam.serviceAccountUser'

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • PRINCIPAL은 바인딩이 추가되는 주 구성원입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다.

    예: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com

Cloud Storage 서비스 계정 역할

Cloud Storage에서 직접 이벤트에 대한 트리거를 만드는 경우 Pub/Sub 게시자 역할(roles/pubsub.publisher)을 Cloud Storage의 서비스 계정에 부여합니다.

SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:${SERVICE_ACCOUNT}"
  --role='roles/pubsub.publisher'

PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

트리거 서비스 계정 역할

Eventarc 이벤트 수신자 역할(roles/eventarc.eventReceiver)을 트리거의 서비스 계정에 부여합니다.

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
  --member='serviceAccount:SERVICE_ACCOUNT_USER_EMAIL' \
  --role='roles/eventarc.eventReceiver'

SERVICE_ACCOUNT_USER_EMAIL서비스 계정의 이메일 주소로 바꿉니다.

Pub/Sub 서비스 계정 역할

서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator) 역할은 기본적으로 Pub/Sub 서비스 계정에 부여됩니다.

중요: 2021년 4월 8일 이전에 Pub/Sub 서비스 계정을 사용 설정한 경우 프로젝트당 Pub/Sub 서비스 계정에 다음 역할을 부여합니다.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Cloud Run 플래그

다음 명령어를 사용하여 이벤트 수신자 서비스를 인증되지 않은 Cloud Run 대상에 배포합니다.

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/SERVICE_NAME \
  --allow-unauthenticated

다음 값을 바꿉니다.

  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • SERVICE_NAME: Cloud Run 서비스 이름입니다.

게시/구독 주제

타사 소스에서 이벤트를 수신하고 인증되지 않은 Cloud Run 대상으로 전달하려면 다음 안내를 따르세요.

사용자 역할

사용자에게 Eventarc 관리자 역할(roles/eventarc.admin)을 부여합니다.

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

다음 값을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • USER_EMAIL: 사용자의 이메일 주소입니다.

    예시: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com 또는 domain:example.domain.com

트리거 서비스 계정 역할

N/A

Pub/Sub 서비스 계정 역할

서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator) 역할은 기본적으로 Pub/Sub 서비스 계정에 부여됩니다.

중요: 2021년 4월 8일 이전에 Pub/Sub 서비스 계정을 사용 설정한 경우 프로젝트당 Pub/Sub 서비스 계정에 다음 역할을 부여합니다.

export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"

gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
    --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
    --role='roles/iam.serviceAccountTokenCreator'

Cloud Run 플래그

다음 명령어를 사용하여 이벤트 수신자 서비스를 인증되지 않은 Cloud Run 대상에 배포합니다.

gcloud run deploy SERVICE_ACCOUNT_ID \
  --image gcr.io/$(gcloud config get-value project)/SERVICE_NAME \
  --allow-unauthenticated

다음 값을 바꿉니다.

  • SERVICE_ACCOUNT_ID: 서비스 계정 ID입니다.
  • SERVICE_NAME: Cloud Run 서비스 이름입니다.