Auf dieser Seite finden Sie Vorschläge zur Implementierung von Best Practices zur Sicherung der Warteschlangenerstellung und -konfiguration, einschließlich der Minimierung der unter Warteschlangenverwaltung oder queue.yaml verwenden beschriebenen Probleme. Ziel ist es, die Methoden zur Warteschlangenverwaltung auf eine kleine Gruppe von Personen oder Entitäten zu beschränken. Bei großen Unternehmen kann der Einsatz eines Dienstkontos notwendig sein, um Software auszuführen, die eine ordnungsgemäße Warteschlangenkonfiguration erzwingt.
Im Allgemeinen sollten Sie Nutzer und andere Entitäten in drei Kategorien einteilen:
- Warteschlangenadministratoren: Nutzer in dieser Gruppe dürfen Cloud Tasks-Methoden zur Warteschlangenverwaltung aufrufen und
queue.yaml
-Dateien hochladen. Diese Gruppe ist auf einige wenige Nutzer beschränkt, um zu vermeiden, dasqueue.yaml
und die Cloud Tasks-Methoden zur Warteschlangenverwaltung versehentlich gemeinsam verwendet werden. - Cloud Tasks-Worker: Nutzer in dieser Gruppe sind berechtigt, gängige Interaktionen mit Cloud Tasks auszuführen (z. B. Aufgaben in Warteschlangen zu stellen und daraus zu entfernen). Sie dürfen keine Cloud Tasks-Methoden zur Warteschlangenverwaltung aufrufen.
- App Engine-Bereitsteller: Bei Projekten mit App Engine-Anwendungen sind Nutzer dieser Gruppe zur Bereitstellung der Anwendung berechtigt. Sie sind nicht berechtigt,
queue.yaml
-Dateien hochzuladen oder Cloud Tasks API-Aufrufe auszuführen. So können die Warteschlangenadministratoren die richtigen Richtlinien erzwingen.
In diesem Schema sollten Nutzer, die Warteschlangenadministratoren sind, nicht gleichzeitig Cloud Tasks-Worker sein, da dies den Zweck der Trennung verfehlen würde.
Wenn in Ihrem Projekt ausschließlich Cloud Tasks-Methoden zur Warteschlangenverwaltung verwendet werden, wäre es außerdem sinnvoll, Warteschlangenadministratoren nicht gleichzeitig in die Gruppe der App Engine-Bereitsteller aufzunehmen, da sonst eine queue.yaml
-Datei fälschlicherweise hochgeladen werden könnte.
Kleine Projekte und Organisationen
In kleinen Projekten und Organisationen können Nutzern IAM-Rollen (Identity and Access Management) direkt zugeordnet werden, um sie in die oben genannten Gruppen einzuteilen. Dies ist für Teams sinnvoll, die einfache Konfigurationen vorziehen und Änderungen an der Warteschlangenkonfiguration oder Bereitstellungen von App Engine-Apps von Hand vornehmen.
So fügen Sie Nutzer zu diesen Gruppen hinzu:
Warteschlangenadministrator
Gewähren Sie als Projektadministrator Nutzern, die API-Aufrufe der Cloud Tasks-Warteschlangenverwaltung durchführen und
queue.yaml
-Dateien hochladen dürfen, die Rollecloudtasks.queueAdmin
.gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member user:[EMAIL] \ --role roles/cloudtasks.queueAdmin
Wählen Sie als Nutzer mit der Rolle
cloudtasks.queueAdmin
gemäß den oben genannten Best Practices eine der folgenden Methoden zum Ändern der Warteschlangenkonfiguration aus.Ändern Sie die Warteschlangenkonfiguration in der Cloud Tasks API.
queue.yaml
mitgcloud
hochladen:gcloud app deploy queue.yaml
Cloud Tasks-Worker
Da häufig viele Nutzer mit Cloud Tasks interagieren dürfen, können Sie Dienstkonten anstelle von einzelnen Nutzern auch Rollen zuweisen. Das ist in der Produktion üblich. Weitere Informationen finden Sie unter Große Projekte und Organisationen.
Ordnen Sie als Projektadministrator Nutzern, die mit Cloud Tasks interagieren, aber die Warteschlangenkonfiguration nicht ändern dürfen, bestimmte Rollen zu:
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
Als Nutzer mit einer oder mehreren der oben zugewiesenen Rollen können Sie mit der Cloud Tasks API interagieren.
App Engine-Bereitsteller
Weisen Sie als Projektadministrator Nutzern, die App Engine-Anwendungen bereitstellen, aber keine Warteschlangenkonfiguration ändern und nicht mit Aufgaben interagieren dürfen, bestimmte Rollen zu:
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
Stellen Sie als Nutzer mit den oben zugeordneten Rollen eine App Engine-Anwendung bereit.
gcloud app deploy app.yaml
Große Projekte und Organisationen
In großen Projekten und Organisationen können Dienstkonten genutzt werden, um Aufgaben und Verantwortlichkeiten zu trennen. Dies ist sinnvoll für Teams, die Bereitstellungen von App Engine-Anwendungen und Änderungen der Warteschlangenkonfiguration in einer komplexen Infrastruktur vornehmen.
Die folgende Anleitung eignet sich im Allgemeinen, wenn die Warteschlangenkonfiguration, die Bereitstellung von App Engine-Anwendungen und die Interaktion mit Cloud Tasks softwaregesteuert erfolgen und nicht von einem Nutzer direkt ausgeführt werden. Außerdem kann so die Warteschlangenkonfiguration geschützt werden, ohne dass alle Mitglieder Ihres Teams den Inhalt dieser Seite verstehen müssen.
Beispiel: Sie können eine Webanwendung oder ein Befehlszeilentool erstellen, die bzw. das alle Nutzer zum Erstellen, Aktualisieren und Löschen von Warteschlangen verwenden müssen. Ob dieses Tool die Cloud Tasks-Methoden zur Warteschlangenverwaltung oder queue.yaml
verwendet, ist ein Implementierungsdetail des Tools, über das sich Nutzer keine Gedanken machen müssen. Wenn das Tool die einzige Entität in der Gruppe der Warteschlangenadministratoren ist, werden die Cloud Tasks-Methoden zur Warteschlangenverwaltung und queue.yaml
garantiert nicht versehentlich gemeinsam verwendet.
Im Folgenden finden Sie eine Anleitung zum Einrichten dieser Dienstkonten.
Warteschlangenadministrator
Erstellen Sie als Projektadministrator das Dienstkonto.
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
Weisen Sie dem Dienstkonto die Rolle
cloudtasks.queueAdmin
zu, damit es Dateien vom Typqueue.yaml
hochladen und API-Aufrufe für die Cloud Tasks-Warteschlangenverwaltung ausführen kann.gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member serviceAccount:queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ --role roles/cloudtasks.queueAdmin
Weisen Sie die Rolle
iam.serviceAccountActor
menschlichen Nutzern, Gruppen oder anderen Entitäten zu, die die Warteschlangenkonfiguration ändern dürfen. Dies sollte eine sehr kleine Gruppe von Personen sein, z. B. Administratoren, die in Notfällen reagieren dürfen.gcloud iam service-accounts add-iam-policy-binding \ queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
Erstellen Sie einen Dienstkontoschlüssel, sodass ein Nutzer oder eine andere Entität die Identität des Dienstkontos annehmen kann.
gcloud iam service-accounts keys create \ --iam-account queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ ~/queue-admin-service-account-key.json
Nehmen Sie als Nutzer oder andere Entität mit der Rolle
iam.serviceAccountActor
die Identität des Dienstkontos an.gcloud auth activate-service-account queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/queue-admin-service-account-key.json
Wählen Sie gemäß den obigen Best Practices nur eine der folgenden Methoden zum Ändern der Warteschlangenkonfiguration aus:
Ändern Sie die Warteschlangenkonfiguration mit Cloud Tasks.
queue.yaml
mitgcloud
hochladen:gcloud app deploy queue.yaml
Cloud Tasks-Worker
Erstellen Sie als Projektadministrator das Dienstkonto.
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
Ordnen Sie dem Dienstkonto Rollen zu, sodass es mit Cloud Tasks interagieren, aber die Warteschlangenkonfiguration nicht ändern kann.
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
Weisen Sie die Rolle
iam.serviceAccountActor
Nutzern, Gruppen oder anderen Entitäten zu, die die Cloud Tasks API in Ihrem Projekt verwenden dürfen.gcloud iam service-accounts add-iam-policy-binding \ cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
Erstellen Sie einen Dienstkontoschlüssel, sodass ein Nutzer oder eine andere Entität die Identität des Dienstkontos annehmen kann.
gcloud iam service-accounts keys create \ --iam-account cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ ~/cloud-tasks-worker-service-account-key.json
Nehmen Sie als Nutzer oder andere Entität mit der Rolle
iam.serviceAccountActor
die Identität des Dienstkontos an.gcloud auth activate-service-account cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/cloud-tasks-worker-service-account-key.json
Verwenden Sie die Cloud Tasks API.
App Engine-Bereitsteller
Erstellen Sie als Projektadministrator das Dienstkonto.
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
Weisen Sie dem Dienstkonto Rollen zu, sodass es App Engine-Anwendungen bereitstellen kann, jedoch nicht
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
Weisen Sie die Rolle
iam.serviceAccountActor
Nutzern, Gruppen oder anderen Entitäten zu, die die App Engine-Anwendung bereitstellen dürfen.gcloud iam service-accounts add-iam-policy-binding \ app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
Erstellen Sie einen Dienstkontoschlüssel, sodass ein Nutzer oder eine andere Entität die Identität des Dienstkontos annehmen kann.
gcloud iam service-accounts keys create \ --iam-account app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ ~/app-engine-deployer-service-account-key.json
Nehmen Sie als Nutzer oder andere Entität mit der Rolle
iam.serviceAccountActor
die Identität des Dienstkontos an.gcloud auth activate-service-account app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/app-engine-deployer-service-account-key.json
Stellen Sie die App Engine-Anwendung bereit.
gcloud app deploy app.yaml
Zugriff auf einzelne Warteschlangen beschränken
Wenn Sie den Zugriff nach Warteschlange einschränken möchten, verwenden Sie den Befehl gcloud tasks queues add-iam-policy-binding
, der die Warteschlange mit dem Argument QUEUE angibt. Beispiel für eine Warteschlange mit dem Namen 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
Weitere Informationen zu Dienstkonten
Eine ausführliche Erläuterung von Dienstkonten finden Sie auf den folgenden Seiten:
- Dienstkonten
- Informationen zu Dienst-Countdowns
- Zugriff auf Projekte, Ordner und Organisationen verwalten
- Dienstkonten erstellen und verwalten