Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can not deploy gen2 trigger cloud functions with custom service account #6814

Open
sconix opened this issue Feb 25, 2024 · 5 comments
Open

Comments

@sconix
Copy link

sconix commented Feb 25, 2024

Environment info

firebase-tools: 13.3.1

Platform: Debian

Test case

export const automatedBackupFromFirestoreV2 = onSchedule(
  {
    region: 'europe-west1',
    schedule: 'every 168 hours',
    serviceAccount: 'compute-engine-default@*****.iam.gserviceaccount.com',
  },
  async () => {});

This happens also with onDocument* firestore triggers, basically anything that uses EventArc. GCloud tool seems to have separate trigger-service-account input argument so it is at least possible to define the service account to be used, but can not get it to work with firebase cloud functions. Have tried using the setGlobalOptions as well, but no luck with that neither.

This used to be an issue with the onCall and onRequest as well, but those now work with the latest version of firebase-tools.

Steps to reproduce

Have any kind of trigger cloud function and configure it to use custom service account and have a project that does not have the default compute engine service account which EventArc uses when no service account is defined.

Expected behavior

Deploy works without the error about missing default compute engine service account and the defined service account is used.

Actual behavior

[2024-02-25T18:58:14.315Z] Functions deploy failed.
[2024-02-25T18:58:14.315Z] {
  "endpoint": {
    "id": "automatedBackupFromFirestoreV2",
    "project": "*****",
    "region": "europe-west1",
    "entryPoint": "automatedBackupFromFirestoreV2",
    "platform": "gcfv2",
    "runtime": "nodejs18",
    "scheduleTrigger": {
      "schedule": "every 168 hours",
      "timeZone": null,
      "retryConfig": {}
    },
    "labels": {
      "deployment-tool": "cli-firebase"
    },
    "ingressSettings": null,
    "availableMemoryMb": null,
    "serviceAccount": "compute-engine-default@*****.iam.gserviceaccount.com",
    "timeoutSeconds": null,
    "maxInstances": null,
    "minInstances": null,
    "concurrency": 80,
    "vpc": null,
    "environmentVariables": {
      "BACKUPS_BUCKET": "\"gs://*****",
      "FIREBASE_CONFIG": "{\"projectId\":\"*****\",\"databaseURL\":\"*****\",\"storageBucket\":\"*****\",\"locationId\":\"europe-west\"}",
      "GCLOUD_PROJECT": "*****",
      "EVENTARC_CLOUD_EVENT_SOURCE": "projects/*****/locations/europe-west1/services/automatedBackupFromFirestoreV2"
    },
    "codebase": "default",
    "cpu": 1,
    "securityLevel": "SECURE_ALWAYS",
    "targetedByOnly": true,
    "hash": "*****",
    "uri": "*****",
    "runServiceId": "automatedbackupfromfirestorev2"
  },
  "op": "set invoker",
  "original": {
    "name": "FirebaseError",
    "children": [],
    "exit": 1,
    "message": "Failed to set the IAM Policy on the Service projects/*****/locations/europe-west1/services/automatedbackupfromfirestorev2",
    "original": {
      "name": "FirebaseError",
      "children": [],
      "context": {
        "body": {
          "error": {
            "code": 400,
            "message": "Service account <PROJECTID>-compute@developer.gserviceaccount.com does not exist.",
            "status": "INVALID_ARGUMENT"
          }
        },
        "response": {
          "statusCode": 400
        }
      },
      "exit": 1,
      "message": "HTTP Error: 400, Service account <PROJECTID>-compute@developer.gserviceaccount.com does not exist.",
      "status": 400
    },
    "status": 400,
    "code": 400
  }
}
@inlined
Copy link
Member

inlined commented Mar 13, 2024

Starting in this week's release, the serviceAccount that the function is configured to run as is the service account the associated service is configured to authorize its requests to the function with.

@inlined inlined closed this as completed Mar 13, 2024
@sconix
Copy link
Author

sconix commented Mar 20, 2024

@inlined First of all thanks for the fixes, secondly I can confirm onSchedule, beforeUserCreated and beforeUserSignedIn to work now with the latest firebase-tools version, but still get the error of default compute-engine SA not existing when deploying onDocumentWritten trigger functions. Let me know if you want me to create a new issue about this.

@inlined
Copy link
Member

inlined commented Mar 27, 2024

Will look into it this week. Also, FYI, I've submitted a proposal to add triggerServiceAccount to the function options. I would not be surprised if the API council makes me revert this change to use serviceAccount as a backup since it was a breaking change that broke someone and you may have to use this new field in a future release.

@inlined inlined reopened this Mar 27, 2024
@sconix
Copy link
Author

sconix commented Apr 18, 2024

@inlined any progress on this? At least have not spotted any fixes yet in the release notes regarding this. We are currently stuck in gen1/gen2 hybrid setup because of this issue so even not super critical would be really nice to be able to move fully to gen2 stuff. Thank you again for looking into this.

@ushuz
Copy link

ushuz commented Jun 3, 2024

but still get the error of default compute-engine SA not existing when deploying onDocumentWritten trigger functions

We ran into this issue as well.

Even though the function now supports specifying custom service accounts, it seems Firebase CLI (firebase deploy) is hardcoded to only work with the default compute-engine SA:

requiredBindings.push(...obtainDefaultComputeServiceAgentBindings(projectNumber));

export function obtainDefaultComputeServiceAgentBindings(projectNumber: string): iam.Binding[] {
const defaultComputeServiceAgent = `serviceAccount:${gce.getDefaultServiceAccount(projectNumber)}`;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants