You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
firestore-send-email kit/extension parity. Priority: medium. The kit's runtime identity can invoke any Cloud Run service in the project.
Difference
Extension:
Runtime service account ext-<instance>@ holds only roles/datastore.user, plus roles/eventarc.publisher when events are on.
The Eventarc trigger runs as the default compute service account.
Kit:
Each instance's firebase-fn-* service account gets project-levelroles/datastore.user, roles/eventarc.eventReceiver, roles/run.invoker and roles/eventarc.publisher. eventarc.publisher is granted even when no channel is configured.
The same account is also the trigger's identity.
Because run.invoker is project-wide, code running in the mail function, including attachment href fetches, holds credentials that can call every Cloud Run service and 2nd gen function in the project.
Reproduced
The project IAM policy on the test project shows the four roles bound at project level to each kit instance's firebase-fn-* account. ext-sepext@ has only datastore.user and eventarc.publisher.
Activity
firestore-send-emailkit tracking issue #3290CorieW commentedon Nov 3, 2026
Accepted as a difference for all 2nd gen kits until the CLI supports resource-scoped roles. Recorded under "Decisions" in #3290.
CorieW commentedon Nov 3, 2026
Having another look