Rollen und Berechtigungen für Cloud Run-Ziele

In diesem Dokument erfahren Sie, wie Sie IAM-Rollen (Identity and Access Management) und -Berechtigungen erteilen, um Routingereignisse von Google Cloud und anderen Quellen zu Cloud Run-Diensten mit Eventarc zu unterstützen:

  1. Weisen Sie projektweite Berechtigungen dem Hauptkonto zu, das die Eventarc APIs aufruft, z. B. dem Ersteller des Eventarc-Triggers:

    1. Mit der Rolle Eventarc-Administrator haben Sie die vollständige Kontrolle über alle Eventarc-Ressourcen, einschließlich der Angabe eines Dienstkontos für den Trigger beim Erstellen.
    2. Mit der Rolle Dienstkontonutzer kann ein Hauptkonto die Identität eines Dienstkontos übernehmen und verwenden. Das Dienstkonto ist einem Eventarc-Trigger zugeordnet und stellt die Identität des Triggers dar.
  2. Eventarc-Trigger-Berechtigungen für das Trigger-Dienstkonto erteilen: Mit der Rolle Eventarc-Ereignisempfänger kann Ihr Eventarc-Trigger Ereignisse von Ereignisanbietern empfangen. Sie müssen die Rolle nicht zuweisen, wenn Sie direkte Ereignisse aus Cloud Pub/Sub weiterleiten.

  3. Cloud Run-Dienstberechtigungen für das Triggerdienstkonto erteilen: Mit der Rolle Cloud Run Invoker kann Ihr Eventarc-Trigger den Cloud Run-Zieldienst aufrufen eine Dies gilt, wenn Sie Ereignisse an einen authentifizierten Cloud Run-Dienst weiterleiten.

  4. Gewähren Sie Berechtigungen für Google-Dienst-Agents:

    1. Wenn Sie einen Trigger für direkte Ereignisse aus Cloud Storage erstellen, weisen Sie die Rolle Pub/Sub-Publisher zu.
    2. Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, weisen Sie die Rolle Ersteller von Dienstkonto-Tokens zu.

Weitere Informationen zum Zuweisen von IAM-Rollen finden Sie unter Zugriff verwalten. Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Projektweite Berechtigungen gewähren

Wenn Sie der Projektersteller sind, wird Ihnen die einfache "Inhaber" Rolle (roles/owner) zugewiesen. Standardmäßig enthält diese Rolle die Berechtigungen, die für den vollständigen Zugriff auf die meisten Google Cloud-Ressourcen erforderlich sind. Andernfalls müssen die erforderlichen Rollen von einem Administrator für die entsprechende Ressource dem entsprechenden Hauptkonto (auch als Mitglied bezeichnet) gewährt werden.

Ein Hauptkonto kann beispielsweise ein Google-Konto (für Endnutzer) oder ein Dienstkonto (für Anwendungen und Computing-Arbeitslasten) sein. Jedes Hauptkonto hat eine eigene Kennung, die normalerweise eine E-Mail-Adresse ist.

  1. Mit der Eventarc-Administratorrolle (roles/eventarc.admin) können Sie alle Eventarc-Ressourcen vollständig steuern.

    Weisen Sie dem Projekt die Rolle zu:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/eventarc.admin

    Ersetzen Sie Folgendes:

    • PROJECT_ID ist Ihre Google Cloud-Projekt-ID.
    • PRINCIPAL: Die Kennung des Triggererstellers, die normalerweise das folgende Format hat: PRINCIPAL_TYPE:ID. Beispiel: user:my-user@example.com. Eine vollständige Liste der möglichen PRINCIPAL_TYPE-Werte finden Sie in der Referenz zur Richtlinienbindung.
  2. Mit der Rolle "Dienstkontonutzer" (roles/iam.serviceAccountUser) kann ein Hauptkonto Vorgänge als Dienstkonto ausführen.

    Sie benötigen diese Rolle beispielsweise, damit Sie ein vom Nutzer verwaltetes Dienstkonto mit einem Eventarc-Trigger verknüpfen können. Sie benötigen sie auch, damit Sie bei der Bereitstellung eines Cloud Run-Dienstes als Laufzeitdienstkonto fungieren können. Weitere Informationen finden Sie unter Rollen für die Dienstkontoauthentifizierung.

    Sie können entweder die Rolle für das Projekt zuweisen, damit das Hauptkonto die Identität mehrerer Dienstkonten übernehmen kann, oder Sie gewähren die Rolle für das Dienstkonto, damit das Hauptkonto nur die Identität eines bestimmten Dienstkontos übernehmen kann.

    Weisen Sie dem Projekt die Rolle zu:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

    Oder weisen Sie dem Dienstkonto die Rolle zu:

    gcloud iam service-accounts add-iam-policy-binding \
        projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

    Ersetzen Sie Folgendes:

    • SERVICE_ACCOUNT_PROJECT_ID: die Google Cloud-Projekt-ID, die das Dienstkonto enthält.
    • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos.

Eventarc-Trigger-Berechtigungen erteilen

Jeder Eventarc-Trigger ist zum Zeitpunkt der Erstellung des Triggers mit einem IAM-Dienstkonto verknüpft. Sie können ein vom Nutzer verwaltetes Dienstkonto angeben, das der Trigger als Standardidentität verwendet. Wenn Sie beim Erstellen des Triggers kein Dienstkonto angeben, verwendet der Trigger das Compute Engine-Standarddienstkonto für seine Identität.

Wir empfehlen Ihnen, ein eigenes nutzerverwaltetes Dienstkonto zu erstellen, um mehr Kontrolle und Flexibilität bei der Verwaltung des Triggers zu erhalten.

  1. Erstellen Sie ein Dienstkonto und notieren Sie sich seinen Namen:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Ersetzen Sie Folgendes:

    • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos. Dieser Name wird in der E-Mail-Adresse angezeigt, die das Dienstkonto identifiziert.
    • DESCRIPTION: eine optionale Beschreibung des Dienstes
    • DISPLAY_NAME: ein Dienstkontoname, der in der Google Cloud Console angezeigt werden soll
  2. Weisen Sie dem Dienstkonto, das Ihrem Eventarc-Trigger zugeordnet ist, die Rolle "Eventarc-Ereignisempfänger" (roles/eventarc.eventReceiver) für das Projekt zu, damit der Trigger Ereignisse vom Ereignisanbieter empfangen kann.

    Beachten Sie, dass Sie die Rolle "Eventarc-Ereignisempfänger" nicht zuweisen müssen, wenn Sie direkte Ereignisse aus Cloud Pub/Sub weiterleiten.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
    

    Ersetzen Sie SERVICE_ACCOUNT_NAME durch den Namen Ihres Dienstkontos, den Sie im vorherigen Schritt notiert haben.

Cloud Run-Dienstberechtigungen erteilen

Alle Cloud Run-Dienste werden standardmäßig privat bereitgestellt. Das bedeutet, dass sie ohne Authentifizierungsanmeldedaten in der Anfrage nicht zugänglich sind. Für Projekte mit Organisationsrichtlinien für die domaineingeschränkte Freigabe verwenden Sie stattdessen einen authentifizierten Cloud Run-Zieldienst, anstelle eines Dienstes, der den öffentlichen (unauthentifizierten) Zugriff erlaubt.

Standardmäßig können Cloud Run-Dienste nur von Projektinhabern, Projektbearbeitern, Cloud Run-Administratoren und Cloud Run-Aufrufern aufgerufen werden.

  1. Wenn Sie Ereignisse an einen authentifizierten Cloud Run-Zieldienst weiterleiten, weisen Sie die Cloud Run-Invoker-Rolle (run.invoker) für die Cloud Run-Dienst an das nutzerverwaltete Dienstkonto, das mit Ihrem Eventarc-Trigger verknüpft ist:

    gcloud run services add-iam-policy-binding SERVICE_NAME \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/run.invoker

    Ersetzen Sie SERVICE_NAME durch den Namen des Cloud Run-Dienstes.

  2. Optional können Sie die Rolle für alle Cloud Run-Dienste und -Jobs in einem Google Cloud-Projekt zuweisen. Weitere Informationen finden Sie unter Zugriff auf alle Dienste und Jobs in einem Projekt steuern.

Wenn Sie einen Trigger für einen authentifizierten Cloud Run-Dienst erstellen, ohne die Rolle "Cloud Run Invoker" zuzuweisen, wird der Trigger erfolgreich erstellt und ist aktiv. Der Trigger funktioniert jedoch nicht wie erwartet und in den Logs wird eine Meldung wie die folgende angezeigt:

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

Berechtigungen für Google-Dienst-Agents erteilen

Einige Google Cloud-Dienste haben von Google verwaltete Dienstkonten, mit denen die Dienste auf Ihre Ressourcen zugreifen können. Diese Dienstkonten werden als Dienst-Agents bezeichnet. Wenn eine API einen Dienst-Agent erfordert, erstellt Google den Dienst-Agent, nachdem Sie die API aktiviert und verwendet haben.

  1. Wenn Sie einen Trigger für direkte Ereignisse aus Cloud Storage erstellen, um die Veröffentlichung von Nachrichten zu einem Thema zu unterstützen, gewähren Sie dem Cloud Storage-Dienst-Agent die Pub/Sub-Publisher-Rolle (roles/pubsub.publisher) für das Projekt:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
        --role=roles/pubsub.publisher

    Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud Console oder durch Ausführen des folgenden Befehls:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, damit authentifizierte Pub/Sub-Push-Anfragen unterstützt werden, müssen Sie dem Pub/Sub-Dienst-Agent die Rolle "Dienstkonto-Tokenersteller" (roles/iam.serviceAccountTokenCreator) für das Projekt zuweisen. Andernfalls wird diese Rolle standardmäßig zugewiesen:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

Nächste Schritte