Fehlerbehebung bei Cloud Run Functions

In diesem Dokument erfahren Sie, wie Sie Fehlermeldungen beheben und Probleme bei der Verwendung von Cloud Run Functions lösen. Wenn Sie eine Funktion mit Cloud Run erstellt oder bereitgestellt haben, finden Sie weitere Informationen unter Probleme mit Cloud Run beheben.

Bereitstellung

In diesem Abschnitt sind mögliche Probleme mit Bereitstellung sowie Vorschläge zu deren Behebung aufgeführt. Viele Probleme, die bei der Bereitstellung auftreten können, stehen im Zusammenhang mit Rollen und Berechtigungen oder einer falschen Konfiguration.

Sie verwenden Identity and Access Management, um Identitäten zu autorisieren, administrative Aktionen für Funktionen auszuführen, die mit der Cloud Functions v2 API erstellt wurden, z. B. mit gcloud functions, der REST API oder Terraform. Zu den Verwaltungsaktionen gehören das Erstellen, Aktualisieren und Löschen von Funktionen. Weitere Informationen finden Sie unter Zugriff mit IAM autorisieren.

Nutzer fehlen beim Bereitstellen einer Funktion die Berechtigungen für das Laufzeitdienstkonto

Jede Funktion ist einem Dienstkonto zugeordnet, das als Identität dient, wenn die Funktion auf andere Ressourcen zugreift. Dieses Laufzeitdienstkonto kann das Standarddienstkonto oder ein vom Nutzer verwaltetes Dienstkonto sein. In Umgebungen, in denen mehrere Funktionen auf verschiedene Ressourcen zugreifen, werden anstelle des Standardlaufzeitdienstkontos normalerweise funktionsspezifische Identitäten mit benannten Laufzeitdienstkonten verwendet (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

Damit ein Laufzeitdienstkonto verwendet werden kann, muss der Bereitsteller die Berechtigung iam.serviceAccounts.actAs für dieses Dienstkonto haben. Ein Nutzer, der ein Nicht-Standard-Laufzeit-Dienstkonto erstellt, erhält diese Berechtigung automatisch. Anderen Bereitstellern muss diese Berechtigung jedoch von einem Nutzer gewährt werden.

Weisen Sie dem Nutzer mit der Rolle „Projektbetrachter“, „Cloud Functions-Entwickler“ oder „Cloud Functions-Administrator“ die Berechtigung iam.serviceAccounts.actAs für das Laufzeit-Dienstkonto zu.

Fehlermeldung

Console

  You must have the iam.serviceAccounts.actAs permission on the selected service account. To obtain this permission, you can grant a role that includes it like the Service Account User role, on the project.

gcloud

Standarddienstkonto:

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'

Nicht standardmäßiges Dienstkonto:

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'

Die Lösung

Weisen Sie dem Nutzer die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für das Standard- oder das benutzerdefinierte Laufzeitdienstkonto zu. Diese Rolle umfasst die Berechtigung iam.serviceAccounts.actAs.

Bereitstellungsdienstkonto fehlen zum Bereitstellen einer ereignisgesteuerten Funktion Pub/Sub-Berechtigungen

Der Cloud Functions-Dienst verwendet beim Ausführen von administrativen Aufgaben das Dienstkonto des Cloud Functions-Dienst-Agents (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com). Standardmäßig wird diesem Konto die Cloud Functions-Rolle cloudfunctions.serviceAgent zugewiesen. Zum Bereitstellen von ereignisgesteuerten Funktionen muss der Cloud Functions-Dienst auf Pub/Sub zugreifen, um Themen und Abos zu konfigurieren. Wenn Sie die dem Dienstkonto zugewiesene Rolle ändern, ohne die entsprechenden Berechtigungen zu gewähren, kann der Cloud Functions-Dienst nicht auf Pub/Sub zugreifen und die Bereitstellung schlägt fehl.

Fehlermeldung

Console

Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/test-project-356312/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

Die Lösung

Sie können Ihr Dienstkonto auf die Standardrolle zurücksetzen cloudfunctions.serviceAgent.

Standarddienstkonto für die Laufzeit ist nicht vorhanden

Wenn Sie kein vom Nutzer verwaltetes Laufzeitdienstkonto angeben, verwendet Cloud Functions das Compute-Standarddienstkonto als Laufzeitdienstkonto. Bereitstellungen schlagen fehl, wenn Sie das Standardkonto löschen, ohne ein vom Nutzer verwaltetes Konto anzugeben.

Fehlermeldung

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com was not found.]

Die Lösung

Führen Sie einen der folgenden Schritte aus, um das Problem zu beheben:

Cloud Functions-Dienst-Agent-Dienstkonto fehlt Berechtigungen für Projekt-Buckets bei der Bereitstellung einer Funktion

Cloud Run Functions-Funktionen können nur von Ereignissen ausgelöst werden, die aus Cloud Storage-Buckets im selben Google Cloud Platform-Projekt stammen. Außerdem muss das Dienstkonto des Cloud Functions-Dienst-Agents (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) für Ihr Projekt die Rolle cloudfunctions.serviceAgent haben.

Fehlermeldung

Console

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/<project-id>/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]

Die Lösung

Um dieses Problem zu beheben,