Sichere Warteschlangenkonfiguration

Auf dieser Seite finden Sie Vorschläge zum Erstellen und Konfigurieren von Warteschlangen. 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: 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: 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.

In dieser Anleitung wird die Dienstkonto-Identitätsübernahme verwendet, um dem Prinzip der geringsten Berechtigung zu folgen und die Zugriffsverwaltung zu vereinfachen. Weitere Informationen zu diesem Muster finden Sie in der Dokumentation zur Google Cloud-Authentifizierung unter Identitätswechsel für Dienstkonten 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. Die Übernahme der Identität des von Ihnen erstellten Dienstkontos „Warteschlangenadministrator“ selektiv zulassen.

    Dies sollte in der Regel eine kleine Gruppe von Hauptkonten sein, die als Warteschlangenadministratoren fungieren. Weisen Sie diesen Hauptkonten die Rolle iam.serviceAccountTokenCreator für das von Ihnen erstellte Dienstkonto „Warteschlangenadministrator“ zu. Weitere Informationen dazu finden Sie in der IAM-Dokumentation unter Eine einzelne Rolle zuweisen oder widerrufen.

  4. Wählen Sie gemäß den unter Warteschlangenverwaltung oderqueue.yaml verwenden beschriebenen Best Practices 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. Lassen Sie die Identitätsübernahme des von Ihnen erstellten Dienstkontos „Cloud Tasks Worker“ selektiv zu.

    Weisen Sie Hauptkonten, die mit Cloud Tasks interagieren, die Rolle iam.serviceAccountTokenCreator für das von Ihnen erstellte Dienstkonto „Cloud Tasks-Worker“ zu. Weitere Informationen dazu finden Sie in der IAM-Dokumentation unter Eine 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. Die Übernahme der Identität des von Ihnen erstellten Dienstkontos „App Engine-Bereitsteller“ selektiv zulassen.

    Weisen Sie Hauptkonten, die App Engine-Dienste bereitstellen, die Rolle iam.serviceAccountTokenCreator für das von Ihnen erstellte Dienstkonto „App Engine-Bereitsteller“ zu. Weitere Informationen dazu finden Sie in der IAM-Dokumentation unter Eine einzelne Rolle zuweisen oder widerrufen.

Zugriff auf einzelne Warteschlangen beschränken

Wenn Sie in einem Projekt mehrere Warteschlangen haben und den Zugriff auf einzelne Warteschlangen beschränken möchten, können Sie IAM-Richtlinien auf Warteschlangenebene anstelle der Projektebene verwenden. Verwenden Sie den Befehl gcloud tasks queues add-iam-policy-binding, um den Zugriff nach Warteschlange zu beschränken. 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 der Warteschlange
  • LOCATION: der Speicherort der Wiedergabeliste
  • PROJECT_ID: die Projekt-ID

Nächste Schritte