큐 구성 보호

이 페이지에서는 큐 생성 및 구성을 보호하기 위한 권장사항을 제공합니다. 핵심은 소수의 사용자 또는 항목으로 큐 관리 메서드를 제한하는 것입니다. 대규모 조직의 경우 서비스 계정을 사용하여 적절한 큐 구성을 시행하는 소프트웨어를 실행해야 할 수 있습니다.

일반적으로 사용자와 기타 항목을 다음 3가지 카테고리로 구분합니다.

  1. 큐 관리자 - 이 그룹의 사용자에게는 Cloud Tasks 큐 관리 메서드를 호출하거나 queue.yaml 파일을 업로드할 권한이 있습니다. 이 그룹은 의도치 않게 queue.yaml과 Cloud Tasks 큐 관리 메서드를 혼합하여 큐 구성에 문제가 발생할 위험을 줄이기 위해 소수의 사용자로 제한됩니다.
  2. Cloud Tasks 작업자 - 이 그룹의 사용자는 태스크를 큐에 추가하거나 큐에서 삭제하는 등 Cloud Tasks와의 일반적인 상호작용을 수행할 권한이 있습니다. Cloud Tasks 큐 관리 메서드를 호출할 수 없습니다.
  3. App Engine 배포자 - App Engine 앱이 있는 프로젝트의 경우 이 그룹의 사용자는 앱을 배포할 권한을 가집니다. queue.yaml 파일을 업로드하거나 Cloud Tasks API를 호출할 수는 없으므로 큐 관리자가 적절한 정책을 적용할 수 있습니다.

이 체계에서 큐 관리자인 사용자는 Cloud Tasks 작업자가 아니어야 합니다. 그렇게 되면 분리 목적이 무효화될 수 있습니다.

프로젝트가 Cloud Tasks 큐 관리 메서드만 사용하는 경우 잘못된 queue.yaml 파일을 업로드할 수 있으므로 큐 관리자는 App Engine 개발자도 아니어야 합니다.

소규모 프로젝트 및 조직

소규모 프로젝트 및 조직은 Identity and Access Management(IAM) 역할을 사용자에게 직접 할당하여 위의 그룹에 배치할 수 있습니다. 이는 구성의 단순성을 선호하는 팀이나 큐 구성 변경 또는 App Engine 앱 배포를 수동으로 수행하는 팀에 적합합니다.

다음과 같이 사용자를 이 그룹에 추가하세요.

큐 관리자

  1. 프로젝트 관리자로서 Cloud Tasks 큐 관리 API를 호출하거나 queue.yaml 파일을 업로드할 수 있는 사용자에게 cloudtasks.queueAdmin 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/cloudtasks.queueAdmin

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 ID
    • EMAIL: 구성원 사용자의 이메일
  2. cloudtasks.queueAdmin 역할이 있는 사용자로서 위의 권장사항에 따라 다음 방법 중 하나를 선택하여 큐 구성을 변경합니다.

    1. Cloud Tasks API를 사용하여 큐 구성을 변경합니다.

    2. gcloudqueue.yaml 업로드:

      gcloud app deploy queue.yaml

Cloud Tasks 작업자

Cloud Tasks와 상호작용할 수 있는 사용자가 많이 있으므로 개별 사용자가 아니라 서비스 계정에 역할을 할당할 수 있습니다. 이러한 사용 방식은 프로덕션 단계에서 일반적입니다. 자세한 내용은 대규모 프로젝트 및 조직을 참조하세요.

  1. 프로젝트 관리자로서 Cloud Tasks와 상호작용할 수는 있지만 큐 구성은 변경할 수 없는 사용자에게 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.enqueuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.dequeuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskRunner
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskDeleter

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

위에서 부여된 역할이 하나 이상 있는 사용자로서 Cloud Tasks API와 상호작용할 수 있습니다.

App Engine 배포자

  1. 프로젝트 관리자로서 App Engine 앱을 배포할 수는 있지만 큐 구성을 수정하거나 작업과 상호작용할 수 없는 사용자에게 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/appengine.deployer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/appengine.serviceAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/storage.admin

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 ID
    • EMAIL: 구성원 사용자의 이메일
  2. 위에서 부여된 역할이 있는 사용자로서 App Engine 앱을 배포합니다.

    gcloud app deploy app.yaml

대규모 프로젝트 및 조직

대규모 프로젝트 및 조직은 서비스 계정을 사용하여 업무 및 책임을 분리할 수 있습니다. 이 방법은 큐 구성을 변경하고 App Engine 앱을 배포하기 위한 복잡한 인프라가 있는 팀에 적합합니다.

최소 권한의 원칙을 따르고 액세스 관리를 간소화하기 위해 이 안내에서는 서비스 계정 가장을 사용합니다. 이 패턴에 관한 자세한 내용은 Google Cloud 인증 문서의 서비스 계정 가장 사용을 참조하세요.

이러한 서비스 계정을 설정하는 방법은 다음과 같습니다.

큐 관리자

  1. 프로젝트 관리자로서 서비스 계정을 만듭니다.

    gcloud iam service-accounts create queue-admin \
    --display-name "Queue Admin"
  2. queue.yaml 파일을 업로드하고 Cloud Tasks 큐 관리 API 호출을 수행할 수 있도록 cloudtasks.queueAdmin 역할을 서비스 계정에 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:queue-admin@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.queueAdmin

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

  3. 생성한 '큐 관리자' 서비스 계정의 가장을 선택적으로 허용합니다.

    일반적으로 큐 관리자 역할을 하는 소규모 주 구성원 그룹이어야 합니다. 이러한 주 구성원에게 자신이 만든 '큐 관리자' 서비스 계정에 대한 iam.serviceAccountTokenCreator 역할을 부여합니다. 방법을 알아보려면 IAM 문서의 단일 역할 부여 또는 취소를 참조하세요.

  4. 큐 관리 또는 queue.yaml 사용 비교에 설명된 권장사항에 따라 다음 방법 중 하나를 선택하여 큐 구성을 변경합니다.

    • Cloud Tasks를 사용하여 큐 구성을 변경합니다.

    • gcloud CLI를 사용하여 queue.yaml을 업로드합니다.

Cloud Tasks 작업자

  1. 프로젝트 관리자로서 서비스 계정을 만듭니다.

    gcloud iam service-accounts create cloud-tasks-worker \
    --display-name "Cloud Tasks Worker"
  2. Cloud Tasks와 상호작용할 수는 있지만 큐 구성은 변경할 수 없도록 서비스 계정에 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.enqueuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.dequeuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskRunner
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskDeleter

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

  3. 생성한 'Cloud Tasks 작업자' 서비스 계정의 가장을 선택적으로 허용합니다.

    Cloud Tasks와 상호작용하는 주 구성원의 경우 생성한 'Cloud Tasks 작업자' 서비스 계정에 iam.serviceAccountTokenCreator 역할을 부여합니다. 방법을 알아보려면 IAM 문서의 단일 역할 부여 또는 취소를 참조하세요.

App Engine 배포자

  1. 프로젝트 관리자로서 서비스 계정을 만듭니다.

    gcloud iam service-accounts create app-engine-deployer \
    --display-name "App Engine Deployer"
  2. App Engine 앱을 배포할 수 있지만 queue.yaml은 배포할 수 없도록 서비스 계정에 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/appengine.deployer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/appengine.serviceAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/storage.admin

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

  3. 생성한 'App Engine 배포자' 서비스 계정의 가장을 선택적으로 허용합니다.

    App Engine 서비스를 배포하는 주 구성원의 경우 생성한 'App Engine 배포자' 서비스 계정에 iam.serviceAccountTokenCreator 역할을 부여합니다. 방법을 알아보려면 IAM 문서의 단일 역할 부여 또는 취소를 참조하세요.

단일 큐에 대한 액세스 제한

프로젝트에 여러 개의 큐가 있고 개별 큐에 대한 액세스를 제한하려는 경우 프로젝트 수준 대신 큐 수준에서 IAM 정책을 사용할 수 있습니다. 큐별로 액세스를 제한하려면 gcloud tasks queues add-iam-policy-binding 명령어를 사용합니다. 예를 들면 다음과 같습니다.

  gcloud tasks queues add-iam-policy-binding QUEUE_NAME --location=LOCATION \
  --member=serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/cloudtasks.enqueuer

다음을 바꿉니다.

  • QUEUE_NAME: 큐의 이름
  • LOCATION: 큐의 위치
  • PROJECT_ID: 프로젝트의 ID

다음 단계