Warteschlangenkonfiguration sichern

Auf dieser Seite finden Sie Vorschläge zur Sicherung der Warteschlangenerstellung und -konfiguration. 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

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID
    • EMAIL: die E-Mail-Adresse des Mitgliedsnutzers
  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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

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

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID
    • EMAIL: die E-Mail-Adresse des Mitgliedsnutzers
  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.

Um dem Prinzip der geringsten Berechtigung zu folgen und die Zugriffsverwaltung zu vereinfachen, wird in dieser Anleitung die Identitätsübernahme des Dienstkontos verwendet. Weitere Informationen zu diesem Muster finden Sie in der Google Cloud-Authentifizierungsdokumentation unter Identitätsübernahme des Dienstkontos verwenden.

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  3. Übernahme der Identität des „Warteschlangenadministrators“ selektiv zulassen Dienstkonto, das Sie erstellt.

    Dies sollte in der Regel eine kleine Gruppe von Hauptkonten sein, die als Warteschlange fungieren Administratoren. Weisen Sie diesen Hauptkonten die Rolle iam.serviceAccountTokenCreator für das von Ihnen erstellte Dienstkonto „Queue Admin“ zu. Eine Anleitung dazu finden Sie in der IAM-Dokumentation unter Einzelne Rolle zuweisen oder widerrufen.

  4. Wählen Sie gemäß den Best Practices unter Warteschlangenverwaltung oder queue.yaml verwenden eine der folgenden Methoden zum Ändern der Warteschlangenkonfiguration aus:

    • Ändern Sie die Warteschlangenkonfiguration mit Cloud Tasks.

    • queue.yaml mit der gcloud CLI hochladen

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  3. Erlauben Sie die Identitätsübertragung für das von Ihnen erstellte Dienstkonto „Cloud Tasks Worker“ selektiv.

    Gewähren Sie Hauptkonten, die mit Cloud Tasks interagieren, die Berechtigung iam.serviceAccountTokenCreator Rolle für den „Cloud Tasks-Worker“ Dienstkonto, das Sie erstellt haben. Eine Anleitung dazu finden Sie in der IAM-Dokumentation unter Einzelne Rolle zuweisen oder widerrufen.

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

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  3. Erlauben Sie selektiv die Identitätsübernahme des von Ihnen erstellten Dienstkontos „App Engine-Bereitsteller“.

    Weisen Sie den Hauptkonten, die App Engine-Dienste bereitstellen, die Rolle iam.serviceAccountTokenCreator für das von Ihnen erstellte Dienstkonto „App Engine-Bereitsteller“ zu. Weitere Informationen Wie, siehe Einzelne Rolle zuweisen oder widerrufen in der IAM-Dokumentation.

Zugriff auf einzelne Warteschlangen beschränken

Wenn Sie in einem Projekt mehrere Warteschlangen haben und den Zugriff auf einzelne Nutzer beschränken möchten, können Sie IAM-Richtlinien auf Warteschlangenebene verwenden, auf Projektebene. Wenn Sie den Zugriff nach Warteschlange einschränken möchten, verwenden Sie den Befehl gcloud tasks queues add-iam-policy-binding. Beispiel:

  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

Ersetzen Sie Folgendes:

  • QUEUE_NAME: der Name Ihrer Warteschlange
  • LOCATION: der Speicherort deiner Warteschlange
  • PROJECT_ID: die Projekt-ID

Nächste Schritte