このページでは、キューの作成と構成を安全に行うためのベスト プラクティスの実装に関するアドバイスを提供します。その中には、キュー管理または 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
上記で付与されたロールを 1 つ以上持つユーザーとして、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"
サービスア カウントに
cloudtasks.queueAdmin
ロールを付与して、queue.yaml
ファイルをアップロードし、Cloud Tasks のキュー管理 API 呼び出しを行えるようにします。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
ユーザーまたは別のエンティティがサービス アカウントの代理になれるように、サービス アカウント キーを作成します。
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
iam.serviceAccountActor
のロールを、プロジェクト内の Cloud Tasks API の使用を許可するユーザー、グループ、その他のエンティティに付与します。gcloud iam service-accounts add-iam-policy-binding \ cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
ユーザーまたは別のエンティティがサービス アカウントの代理になれるように、サービス アカウント キーを作成します。
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"
queue.yaml
ではなく App Engine アプリをデプロイできるように、サービス アカウントにロールを付与します。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
iam.serviceAccountActor
のロールを、App Engine アプリのデプロイを許可するユーザー、グループ、その他のエンティティに付与します。gcloud iam service-accounts add-iam-policy-binding \ app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
ユーザーまたは別のエンティティがサービス アカウントの代理になれるように、サービス アカウント キーを作成します。
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
サービス アカウントの詳細
サービス アカウントの包括的な説明については、次のページを参照してください。