Zugriffssteuerung mit IAM

Sie (Nutzer oder Dienstkonto, das die Funktion bereitstellt) können den Zugriff mithilfe von Rollen auf Projektebene steuern. Weisen Sie einem Projektmitglied oder Dienstkonto eine Rolle zu, um die Zugriffsebene für Ihr Google Cloud-Projekt und dessen Ressourcen festzulegen. Standardmäßig haben alle Google Cloud-Projekte nur einen Nutzer: den ursprünglichen Projektersteller. Bis ein Nutzer als Projektmitglied hinzugefügt wird, hat kein anderer Nutzer Zugriff auf das Projekt oder auf Funktionen.

Zugriffskontrolle für Nutzer

Sie können Nutzer als Teammitglieder einem Projekt hinzufügen und ihnen mithilfe der Identitäts- und Zugriffsverwaltung (IAM) Rollen zuweisen.

Cloud Functions unterstützt die grundlegenden Rollen Bearbeiter, Inhaber und Betrachter, die folgende Berechtigungen enthalten:

  • Bearbeiter und Inhaber: Lese- und Schreibzugriff auf alle funktionsbezogenen Ressourcen. Nutzer können Funktionen bereitstellen, aktualisieren und löschen. Weitere Zugriffsrechte für andere Ressourcen im Projekt.
  • Betrachter: Schreibgeschützter Zugriff auf Funktionen und Speicherorte. Nutzer können Funktionen auflisten und Details dazu aufrufen, aber nicht den Quellcode ansehen. Weitere Zugriffsrechte für andere Ressourcen im Projekt.

Cloud Functions unterstützt außerdem die vordefinierten Rollen Entwickler und Betrachter in Cloud Functions mit diesen Berechtigungen:

  • Entwickler: Lese- und Schreibzugriff auf alle funktionsbezogenen Ressourcen. Nutzer können Funktionen bereitstellen, aktualisieren und löschen. Kein Zugriff auf andere Ressourcen im Projekt.
  • Betrachter: Schreibgeschützter Zugriff auf Funktionen und Speicherorte. Nutzer können Funktionen auflisten und Details dazu aufrufen, aber nicht den Quellcode ansehen. Kein Zugriff auf andere Ressourcen im Projekt.

Zugriffssteuerung für Dienstkonten

Ein Dienstkonto ist ein spezieller Google Cloud-Kontotyp, der als Identität für einen nicht menschlichen Nutzer fungiert. Das Konto muss authentifiziert und autorisiert werden, um Zugriff auf Daten zu erhalten und verschiedene Aktionen durchführen zu können. Einige dieser Konten werden von Google selbst erstellt und verwaltet und als Dienst-Agents bezeichnet.

Die folgenden Dienstkonten werden für Cloud Functions verwendet:

Name Mitglieds-ID Rolle
App Engine-Standarddienstkonto (nur 1. Generation) PROJECT_ID@appspot.gserviceaccount.com Bearbeiter
Compute Engine-Standarddienstkonto (nur 2. Generation) PROJECT_NUMBER-compute@developer.gserviceaccount.com Bearbeiter
Google Cloud Functions-Dienst-Agent service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Cloud Functions-Dienst-Agent
PROJECT_NUMBER@cloudbuild.gserviceaccount.com Cloud Build-Dienstkonto
Cloud Build-Dienstkonto service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Cloud Build-Dienst-Agent
Google Container Registry-Dienst-Agent service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Container Registry-Dienst-Agent
Artifact Registry-Dienst-Agent service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Artifact Registry-Dienst-Agent

Laufzeitdienstkonten

Zur Laufzeit verwendet Cloud Functions (1. Generation) standardmäßig das App Engine Standarddienstkonto (PROJECT_ID@appspot.gserviceaccount.com) mit der Rolle Bearbeiter für das Projekt. Standardmäßig verwendet Cloud Functions (2. Generation) das Compute Engine-Standarddienstkontos (PROJECT_NUMBER-compute@developer.gserviceaccount.com) mit der Rolle Bearbeiter für das Projekt. Sie können die Rollen dieser Dienstkonten ändern, um die Berechtigungen für ausgeführte Funktionen einzuschränken oder zu erweitern. Außerdem können Sie ändern, welches Dienstkonto verwendet wird. Hierfür stellen Sie ein nicht standardmäßiges einzelnes Dienstkonto bereit.

Weitere Informationen zu Dienstkonten finden Sie in der zugehörigen Dokumentation.

Administrative Dienstkonten

Wenn beim Erstellen, Aktualisieren oder Löschen von Funktionen Verwaltungsaufgaben an einem Projekt ausgeführt werden sollen, benötigen alle Projekte in Cloud Functions das Dienstkonto "Google Cloud Functions-Dienst-Agent" (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

Darüber hinaus erstellen und speichern alle Laufzeiten Container-Images in Ihrem Projekt. Sie müssen auch Folgendes bereitstellen:

Diese Dienstkonten sollten die Rollen haben, die in der vorherigen Tabelle aufgeführt sind.

Dienstkonto Google Cloud Functions-Dienst-Agent

Standardmäßig hat das Dienstkonto Google Cloud Functions-Dienst-Agent (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) im Projekt die Rolle cloudfunctions.serviceAgent. Das Erstellen, Aktualisieren und Löschen von Funktionen kann fehlschlagen, wenn Sie die Berechtigungen dieses Kontos ändern.

Hier einige der wichtigsten Berechtigungen, die cloudfunctions.serviceAgent verwendet:

Berechtigung Beschreibung
roles/artifactregistry.admin Repositories verwalten und Build-Images in Artifact Registry speichern
roles/cloudbuild.builds.editor Erforderlich, um mit Cloud Build Builds im Nutzerprojekt auszuführen.
roles/cloudbuild.customworkers.builder Builds in benutzerdefinierten Cloud Build-Workern erstellen.
cloudfunctions.functions.invoke IAM-geschützte HTTP-Funktion der 1. Generation aufrufen.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
Funktionen mit Zugriff auf die VPC des Nutzerprojekts bereitstellen.
roles/eventarc.developer Eventarc-Trigger für Funktionen der 2. Generation verwalten.
firebasedatabase.instances.{get, update} Erstellen von Funktionen, die von der Firebase Realtime Database ausgelöst werden
iam.serviceAccounts.{actAs, getAccessToken, signBlob} Möglichkeit zum Abrufen der Anmeldedaten des Laufzeitdienstkontos
iam.serviceAccounts.getOpenIdToken Erforderlich, damit der Agent ein OpenID-Token für eine benutzerdefinierte Behörde abrufen kann. OpenID-Token wird zum Aufrufen von IAM-aktivierten Funktionen verwendet.
pubsub.subscriptions Verwalten von Abonnements im Projekt des Nutzers
pubsub.topics Verwalten von Themen im Projekt des Nutzers
roles/run.developer Cloud Run-Dienst für Funktionen der 2. Generation verwalten.
storage.buckets.{get, update} Benachrichtigungen in einem Cloud Storage-Bucket konfigurieren, die eine Funktion der 1. Generation auslösen.
storage.buckets.create,
storage.objects.{delete, get, create, list}
Erforderlich zum Speichern von Quellcode in Nutzerprojekt.

Sie können die gesamten Berechtigungen unter den vordefinierten IAM-Rollen oder mit diesem Befehl anzeigen lassen:

gcloud iam roles describe roles/cloudfunctions.serviceAgent

Sie können dieses Dienstkonto auf die Standardrolle zurücksetzen. Dazu entfernen Sie die Rolle, die es derzeit hat, und fügen die Cloud Functions-Dienst-Agent-Rolle hinzu:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

Berechtigungsfehler beheben

Wenn Sie beim Bereitstellen, Aktualisieren, Löschen oder Ausführen von Funktionen in einem Projekt Berechtigungsfehler erhalten, führen Sie die folgenden Schritte aus:

  1. Prüfen Sie, ob Sie die Rolle Bearbeiter oder Inhaber für Ihr Projekt haben oder ob Sie die Rolle Cloud Functions-Entwickler verwenden.

    Wenn Sie die Rolle Cloud Functions-Developer auf Projektebene verwenden, prüfen Sie außerdem, ob Sie dem Nutzer die Rolle IAM Service Account User zugewiesen haben.

    Derzeit sind nur Ausführungsberechtigungen auf Funktionsebene zulässig.

  2. Prüfen Sie, ob das Dienstkonto des Cloud Functions-Dienst-Agents (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) die Rolle cloudfunctions.serviceAgent für Ihr Projekt hat.

    Achten Sie darauf, dass das Kästchen Von Google bereitgestellte Rollenzuweisungen auf dem Tab Berechtigungen der Seite IAM der Konsole angeklickt ist, um Folgendes zu sehen: dieses Konto. Alternativ können Sie gcloud projects add-iam-policy-binding PROJECT_ID verwenden.

  3. Prüfen Sie, ob Sie Berechtigungen für Triggerquellen haben, z. B. Pub/Sub oder Cloud Storage.

Wenn Sie einen Fehler mit der Meldung „unzureichende Berechtigungen“ erhalten oder beim Ausführen von Funktionen Authentifizierungsprobleme auftreten, sollten Sie die Berechtigungen des Laufzeitdienstkontos prüfen. Dieses muss die richtigen Berechtigungen haben, um auf die Ressourcen zuzugreifen, die die Funktionen benötigen. Anschließend sollten Sie Schritt 2 und 3 ausführen.

Wenn während der Bereitstellung der Fehler „Dienst nicht verfügbar“ auftritt, prüfen Sie, ob das Laufzeitdienstkonto PROJECT_ID@appspot.gserviceaccount.com im Projekt vorhanden ist. Wie Sie dieses Dienstkonto wiederherstellen können, wenn es gelöscht wurde, erfahren Sie unter Dienstkonto wiederherstellen.

Weitere Informationen finden Sie unter Fehlerbehebung bei Cloud Functions.