Sie können die Zugriffssteuerung mithilfe von Rollen auf der Projektebene festlegen. Weisen Sie einem Projektmitglied oder Dienstkonto eine Rolle zu, um die Zugriffsebene für Ihr Google Cloud Platform-Projekt und die zugehörigen Ressourcen festzulegen. Standardmäßig haben alle Google Cloud Platform-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 einfachen Rollen Bearbeiter, Inhaber und Betrachter, mit denen die folgenden Berechtigungen gewährt werden:
- Bearbeiter und Inhaber: Lese- und Schreibzugriff auf alle funktionsbezogenen Ressourcen. Ermöglicht Nutzern, Funktionen bereitzustellen, zu aktualisieren und zu löschen. Weitere Zugriffsrechte für andere Ressourcen im Projekt.
- Betrachter: Schreibgeschützter Zugriff auf Funktionen und Speicherorte. Ermöglicht Nutzern, Funktionen aufzulisten und zugehörige Details einzusehen, jedoch nicht den Quellcode aufzurufen. Weitere Zugriffsrechte für andere Ressourcen im Projekt.
Cloud Functions unterstützt außerdem die gepflegten Rollen Entwickler und Betrachter, die die folgenden Berechtigungen gewähren:
- Entwickler: Lese- und Schreibzugriff auf alle funktionsbezogenen Ressourcen. Ermöglicht Nutzern, Funktionen bereitzustellen, zu aktualisieren und zu löschen. Kein Zugriff auf andere Ressourcen im Projekt.
- Betrachter: Schreibgeschützter Zugriff auf Funktionen und Speicherorte. Ermöglicht Nutzern, Funktionen aufzulisten und zugehörige Details einzusehen, jedoch nicht den Quellcode aufzurufen. Kein Zugriff auf andere Ressourcen im Projekt.
Zugriffssteuerung für Dienstkonten
Ein Dienstkonto ist ein spezieller Google-Kontotyp, der als Identität für einen nicht menschlichen Nutzer fungiert und sich für den Zugriff auf Daten und für verschiedene Aktionen anmelden muss.
Die folgenden Dienstkonten werden für alle Cloud Functions-Laufzeiten verwendet:
Name | Mitglieds-ID | Rolle |
---|---|---|
App Engine-Standarddienstkonto | PROJECT_ID@appspot.gserviceaccount.com |
Editor |
Google Cloud Functions-Dienst-Agent | service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com |
Cloud Functions-Dienst-Agent |
Darüber hinaus sind für alle Laufzeiten außer Node.js 8 und Go 1.11 folgende Dienstkonten erforderlich:
Name | Mitglieds-ID | Rolle |
---|---|---|
– | 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 |
Laufzeitdienstkonten
Während der Laufzeit verwendet Cloud Functions standardmäßig das App Engine-Standarddienstkonto PROJECT_ID@appspot.gserviceaccount.com
, das die Rolle Bearbeiter im Projekt hat. Sie können die Rollen dieses Dienstkontos ä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 für jede einzelne Funktion ein nicht standardmäßiges Dienstkonto bereit.
Weitere Informationen zu Dienstkonten finden Sie in der zugehörigen Dokumentation.
Administrative Dienstkonten
Wenn Sie beim Erstellen, Aktualisieren oder Löschen von Funktionen Verwaltungsaufgaben an Ihrem Projekt ausführen möchten, 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 außer Node.js 8 und Go 1.11 Container-Images in Ihrem Projekt. In diesem Fall müssen Sie auch Folgendes bereitstellen:
- Das einfache Cloud Build-Dienstkonto (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
) - Das Dienstkonto „Cloud Build Service Agent“ (
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
) - Das Dienstkonto „Google Container Registry Service Agent“ (
service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com
)
Diese Dienstkonten sollten die Rollen haben, die in der Tabelle oben 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.
Die Rolle cloudfunctions.serviceAgent
hat die folgenden Berechtigungen:
Permission | Beschreibung |
---|---|
pubsub.subscriptions.* |
Verwalten von Abonnements im Projekt des Nutzers |
pubsub.topics.create |
Erstellen eines neuen Themas, wenn eine Funktion bereitgestellt wurde |
pubsub.topics.attachSubscription |
Anhängen eines Abonnements an ein vorhandenes Thema |
pubsub.topics.get |
Abrufen des vorhandenen Themas, für das die Funktion ausgelöst werden soll |
pubsub.subscriptions.get |
Abo abrufen, das die Funktion auslöst. |
pubsub.topics.list |
Erforderlich zum Prüfen der Existenz eines Pub/Sub-Themas. |
iam.serviceAccounts.{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. |
resourcemanager.projects.get |
Projektdetails abrufen. |
resourcemanager.projects.getIamPolicy |
Bestimmen des Funktionsursprungs |
firebasedatabase.instances.{get, update} |
Erstellen von Funktionen, die von der Firebase Realtime Database ausgelöst werden |
storage.buckets.{get, update} |
Benachrichtigungen in einem GCS-Bucket konfigurieren, der eine Funktion auslöst. |
storage.buckets.create ,storage.objects.{delete, get, create, list} |
Erforderlich zum Speichern von Quellcode in Nutzerprojekt. |
clientauthconfig.clients.list |
OAuth-Clients des Projekts für IAM-geschützte HTTP-Funktionen auflisten. |
cloudfunctions.functions.invoke |
Durch IAM geschützte HTTP-Funktion aufrufen. |
compute.globalOperations.get ,compute.networks.access ,vpcaccess.connectors.{get, use} |
Funktionen mit Zugriff auf die VPC des Nutzerprojekts bereitstellen. |
cloudbuild.customworkers.builder |
Builds in benutzerdefinierten Cloud Build-Workern erstellen. |
cloudbuild.builds.editor ,serviceusage.services.use |
Erforderlich, um mit Cloud Build Builds im Nutzerprojekt auszuführen. |
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:
- 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-Entwickler verwenden, prüfen Sie außerdem, ob Sie dem Nutzer die Rolle IAM-Dienstkontonutzer zugewiesen haben. - Prüfen Sie, ob das Cloud Functions-Dienstkonto
service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
die Rolle cloudfunctions.serviceAgent im Projekt hat. - 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. Informationen zum Wiederherstellen dieses Dienstkontos finden Sie unter Dienstkonto wiederherstellen.
Weitere Informationen finden Sie unter Fehlerbehebung bei Cloud Functions.