Warteschlangenkonfiguration sichern

Auf dieser Seite finden Sie Vorschläge zur Implementierung von Best Practices zur Sicherung der Warteschlangenerstellung und -konfiguration. Dazu gehört auch das Vermeiden der Problemfelder, die unter Warteschlangenverwaltung vs. queue.yaml beschrieben sind. 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:

  1. 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, das queue.yaml und die Cloud Tasks-Methoden zur Warteschlangenverwaltung versehentlich gemeinsam verwendet werden.
  2. 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.
  3. 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

  1. Gewähren Sie als Projektadministrator Nutzern, die API-Aufrufe der Cloud Tasks-Warteschlangenverwaltung durchführen und queue.yaml-Dateien hochladen dürfen, die Rolle cloudtasks.queueAdmin.

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
      --member user:[EMAIL] \
      --role roles/cloudtasks.queueAdmin
    
  2. 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.

    1. Ändern Sie die Warteschlangenkonfiguration in der Cloud Tasks API.

    2. queue.yaml mit gcloud 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.

  1. 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

  1. 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
    
  2. 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 Webapp oder ein Befehlszeilentool erstellen, das bzw. die 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

  1. Erstellen Sie als Projektadministrator das Dienstkonto.

    gcloud iam service-accounts create queue-admin \
      --display-name "Queue Admin"
    
  2. Weisen Sie dem Dienstkonto die Rolle cloudtasks.queueAdmin zu, damit es Dateien vom Typ queue.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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. Wählen Sie gemäß den obigen Best Practices nur eine der folgenden Methoden zum Ändern der Warteschlangenkonfiguration aus:

    1. Ändern Sie die Warteschlangenkonfiguration mit Cloud Tasks.

    2. queue.yaml mit gcloud hochladen:

      gcloud app deploy queue.yaml
      

Cloud Tasks-Worker

  1. Erstellen Sie als Projektadministrator das Dienstkonto.

    gcloud iam service-accounts create cloud-tasks-worker \
      --display-name "Cloud Tasks Worker"
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. Verwenden Sie die Cloud Tasks API.

App Engine-Bereitsteller

  1. Erstellen Sie als Projektadministrator das Dienstkonto.

    gcloud iam service-accounts create app-engine-deployer \
      --display-name "App Engine Deployer"
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. Stellen Sie die App Engine-App bereit.

    gcloud app deploy app.yaml
    

Weitere Informationen zu Dienstkonten

Eine ausführliche Erläuterung von Dienstkonten finden Sie auf den folgenden Seiten: