이 페이지에서는 큐 관리와 queue.yaml 사용 비교에서 설명한 문제를 최소화하는 등 큐 생성 및 구성을 보호하기 위한 권장사항을 구현하기 위한 제안 사항을 설명합니다. 핵심은 소수의 사용자 또는 항목으로 큐 관리 메서드를 제한하는 것입니다. 대규모 조직의 경우 서비스 계정을 사용하여 적절한 큐 구성을 시행하는 소프트웨어를 실행해야 할 수 있습니다.
일반적으로 사용자와 기타 항목을 다음 3가지 카테고리로 구분합니다.
- 큐 관리자 - 이 그룹의 사용자에게는 Cloud Tasks 큐 관리 메서드를 호출하거나
queue.yaml
파일을 업로드할 권한이 있습니다. 이 그룹은 의도치 않게queue.yaml
과 Cloud Tasks 큐 관리 메서드를 혼합하여 큐 구성에 문제가 발생할 위험을 줄이기 위해 소수의 사용자로 제한됩니다. - Cloud Tasks 작업자 - 이 그룹의 사용자는 태스크를 큐에 추가하거나 큐에서 삭제하는 등 Cloud Tasks와의 일반적인 상호작용을 수행할 권한이 있습니다. Cloud Tasks 큐 관리 메서드를 호출할 수 없습니다.
- App Engine 배포자 - App Engine 앱이 있는 프로젝트의 경우 이 그룹의 사용자는 앱을 배포할 권한을 가집니다.
queue.yaml
파일을 업로드하거나 Cloud Tasks API를 호출할 수는 없으므로 큐 관리자가 적절한 정책을 적용할 수 있습니다.
이 체계에서 큐 관리자인 사용자는 Cloud Tasks 작업자가 아니어야 합니다. 그렇게 되면 분리 목적이 무효화될 수 있습니다.
프로젝트가 Cloud Tasks 큐 관리 메서드만 사용하는 경우 잘못된 queue.yaml
파일을 업로드할 수 있으므로 큐 관리자는 App Engine 개발자도 아니어야 합니다.
소규모 프로젝트 및 조직
소규모 프로젝트 및 조직은 Identity and Access Management(IAM) 역할을 사용자에게 직접 할당하여 위의 그룹에 배치할 수 있습니다. 이는 구성의 단순성을 선호하는 팀이나 큐 구성 변경 또는 App Engine 앱 배포를 수동으로 수행하는 팀에 적합합니다.
다음과 같이 사용자를 이 그룹에 추가하세요.
큐 관리자
프로젝트 관리자로서 Cloud Tasks 큐 관리 API를 호출하거나
queue.yaml
파일을 업로드할 수 있는 사용자에게cloudtasks.queueAdmin
역할을 부여합니다.gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member user:[EMAIL] \ --role roles/cloudtasks.queueAdmin
cloudtasks.queueAdmin
역할이 있는 사용자로서 위의 권장사항에 따라 다음 방법 중 하나를 선택하여 큐 구성을 변경합니다.Cloud Tasks API를 사용하여 큐 구성을 변경합니다.
gcloud
로queue.yaml
업로드:gcloud app deploy queue.yaml
Cloud Tasks 작업자
Cloud Tasks와 상호작용할 수 있는 사용자가 많이 있으므로 개별 사용자가 아니라 서비스 계정에 역할을 할당할 수 있습니다. 이러한 사용 방식은 프로덕션 단계에서 일반적입니다. 자세한 내용은 대규모 프로젝트 및 조직을 참조하세요.
프로젝트 관리자로서 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
위에서 부여된 역할이 하나 이상 있는 사용자로서 Cloud Tasks API와 상호작용할 수 있습니다.
App Engine 배포자
프로젝트 관리자로서 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
위에서 부여된 역할이 있는 사용자로서 App Engine 앱을 배포합니다.
gcloud app deploy app.yaml
대규모 프로젝트 및 조직
대규모 프로젝트 및 조직은 서비스 계정을 사용하여 업무 및 책임을 분리할 수 있습니다. 이 방법은 큐 구성을 변경하고 App Engine 앱을 배포하기 위한 복잡한 인프라가 있는 팀에 적합합니다.
아래 안내는 일반적으로 큐 구성, Cloud Tasks와의 상호작용, App Engine 앱 배포가 실제 사용자를 통해서가 아니라 소프트웨어를 통해 발생하는 경우에 적합합니다. 또한 팀의 모든 구성원이 이 페이지의 콘텐츠를 이해하지 않고도 큐 구성을 보호할 수 있습니다.
예를 들어 모든 사용자가 큐를 만들고 업데이트하고 삭제하기 위해 사용해야 하는 웹 앱 또는 명령줄 도구를 만들 수 있습니다. 해당 도구가 Cloud Tasks 큐 관리 메서드 또는 queue.yaml
중 어떤 것을 사용하는지는 사용자가 신경 쓸 필요 없는 도구의 구현 세부정보입니다. 도구가 큐 관리자 그룹의 유일한 항목인 경우에는 Cloud Tasks 큐 관리 메서드와 queue.yaml
이 부적절하게 혼합되는 경우는 없습니다.
이러한 서비스 계정을 설정하는 방법은 다음과 같습니다.
큐 관리자
프로젝트 관리자로서 서비스 계정을 만듭니다.
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
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
큐 구성을 변경할 수 있는 실제 사용자, 그룹 또는 기타 항목에
iam.serviceAccountActor
역할을 부여합니다. 이는 응급 상황에서 대응할 수 있는 관리자와 같이 매우 적은 수의 사용자여야 합니다.gcloud iam service-accounts add-iam-policy-binding \ queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
실제 사용자 또는 다른 항목이 서비스 계정의 ID를 사용할 수 있도록 서비스 계정 키를 만듭니다.
gcloud iam service-accounts keys create \ --iam-account queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ ~/queue-admin-service-account-key.json
iam.serviceAccountActor
역할이 부여된 사용자 또는 기타 항목으로서 서비스 계정의 ID를 가정합니다.gcloud auth activate-service-account queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/queue-admin-service-account-key.json
위의 권장사항을 따라 다음 방법 중 하나만 선택하여 큐 구성을 변경합니다.
Cloud Tasks를 사용하여 큐 구성을 변경합니다.
gcloud
로queue.yaml
업로드:gcloud app deploy queue.yaml
Cloud Tasks 작업자
프로젝트 관리자로서 서비스 계정을 만듭니다.
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
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
프로젝트에서 Cloud Tasks API를 사용할 수 있는 실제 사용자, 그룹 또는 기타 항목에
iam.serviceAccountActor
역할을 부여합니다.gcloud iam service-accounts add-iam-policy-binding \ cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
실제 사용자 또는 다른 항목이 서비스 계정의 ID를 사용할 수 있도록 서비스 계정 키를 만듭니다.
gcloud iam service-accounts keys create \ --iam-account cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ ~/cloud-tasks-worker-service-account-key.json
iam.serviceAccountActor
역할이 부여된 사용자 또는 기타 항목으로서 서비스 계정의 ID를 가정합니다.gcloud auth activate-service-account cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/cloud-tasks-worker-service-account-key.json
Cloud Tasks API를 사용합니다.
App Engine 배포자
프로젝트 관리자로서 서비스 계정을 만듭니다.
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
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
App Engine 앱을 배포할 수 있는 실제 사용자, 그룹 또는 기타 항목에
iam.serviceAccountActor
역할을 부여합니다.gcloud iam service-accounts add-iam-policy-binding \ app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
실제 사용자 또는 다른 항목이 서비스 계정의 ID를 사용할 수 있도록 서비스 계정 키를 만듭니다.
gcloud iam service-accounts keys create \ --iam-account app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ ~/app-engine-deployer-service-account-key.json
iam.serviceAccountActor
역할이 부여된 사용자 또는 기타 항목으로서 서비스 계정의 ID를 가정합니다.gcloud auth activate-service-account app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/app-engine-deployer-service-account-key.json
App Engine 앱을 배포합니다.
gcloud app deploy app.yaml
단일 큐에 대한 액세스 제한
큐별로 액세스를 제한하려면 QUEUE 인수를 사용하여 큐를 지정하는 gcloud tasks queues add-iam-policy-binding
명령어를 사용합니다. 예를 들어 이름이 my-queue
인 큐의 경우 다음과 같습니다.
gcloud tasks queues add-iam-policy-binding my-queue --location=my-location \
--member=serviceAccount:cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \
--role=roles/cloudtasks.enqueuer
서비스 계정 자세히 알아보기
서비스 계정에 대한 포괄적인 설명은 다음 페이지를 참조하세요.