Skip to main content

Installer Permissions

These role combinations provide all permissions needed for a first-time installation. Any one row is sufficient.

CombinationRoles
Minimum (least privilege)Viewer, Dataform Admin, Project IAM Admin, Service Usage Admin, Service Account Admin, Service Account User
Editor shortcutEditor, Project IAM Admin, Service Account Admin
Full accessOwner

For updating an existing installation, the same combinations apply. The update flow requires fewer permissions overall, but uses the same role checks.

If you enable Premium automation features (Automated GA4 Export Trigger or Email Alerts), add these roles to the minimum combination: Pub/Sub Admin, Logs Configuration Writer, Workflows Editor, Eventarc Developer. The Editor and Owner combinations already cover these.

The installer does not gain any access to your GCP project. All actions are performed using your own Google account permissions through OAuth.


This page explains which permissions the installer needs for a first-time setup and an update of an existing setup. Core and Premium use the same permission checks. At a high level, the installer goes through these steps:

  1. Checks your access and confirms your license.
  2. Verifies required APIs are available and can be enabled if needed.
  3. Checks whether a GA4Dataform setup already exists.
  4. Creates or updates the Dataform repository and workspace.
  5. Applies required IAM access for the Dataform service account.
  6. Deploys or updates package files and workflow configuration.

Permissions checked during package validation

These permissions are needed during the package validation step:

PermissionWhy the installer needs itWhat roles have this permission?
dataform.releaseConfigs.createCreate release configurationDataform Admin, Editor, Owner
dataform.releaseConfigs.listList release configurationsDataform Admin, Dataform Editor, Dataform Viewer, Viewer, Editor, Owner
dataform.repositories.createCreate repository (if needed)Dataform Admin, Dataform Editor, Code Creator, Code Editor, Code Owner, Editor, Owner
dataform.repositories.fetchHistoryRead repository commit historyDataform Admin, Dataform Editor, Dataform Viewer, Code Creator, Code Editor, Code Owner, Code Viewer, Viewer, Editor, Owner
dataform.repositories.getRead repository metadataDataform Admin, Dataform Editor, Dataform Viewer, Code Creator, Code Editor, Code Owner, Code Viewer, Viewer, Editor, Owner
dataform.repositories.listList repositoriesDataform Admin, Dataform Editor, Dataform Viewer, Code Creator, Code Editor, Code Owner, Code Viewer, Viewer, Editor, Owner
dataform.workflowConfigs.createCreate workflow configurationDataform Admin, Editor, Owner
dataform.workflowConfigs.listList workflow configurationsDataform Admin, Dataform Editor, Dataform Viewer, Viewer, Editor, Owner
dataform.workflowInvocations.createTrigger workflow invocationsDataform Admin, Dataform Editor, Editor, Owner
dataform.compilationResults.createCreate compilation resultsDataform Admin, Dataform Editor, Code Editor, Code Owner, Code Viewer, Editor, Owner
dataform.workspaces.commitCommit workspace changesDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
dataform.workspaces.createCreate workspaceDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
dataform.workspaces.fetchFileGitStatusesCheck workspace git statusDataform Admin, Dataform Editor, Dataform Viewer, Code Creator, Code Editor, Code Owner, Code Viewer, Viewer, Editor, Owner
dataform.workspaces.getRead workspace metadataDataform Admin, Dataform Editor, Dataform Viewer, Code Creator, Code Editor, Code Owner, Code Viewer, Viewer, Editor, Owner
dataform.workspaces.installNpmPackagesInstall workspace npm dependenciesDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
dataform.workspaces.listList workspacesDataform Admin, Dataform Editor, Dataform Viewer, Code Creator, Code Editor, Code Owner, Code Viewer, Viewer, Editor, Owner
dataform.workspaces.makeDirectoryCreate directories in workspaceDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
dataform.workspaces.pullPull repository changes to workspaceDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
dataform.workspaces.pushPush workspace changes to repositoryDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
dataform.workspaces.queryDirectoryContentsList files/directories in workspaceDataform Admin, Dataform Editor, Dataform Viewer, Code Creator, Code Editor, Code Owner, Code Viewer, Viewer, Editor, Owner
dataform.workspaces.readFileRead workspace filesDataform Admin, Dataform Editor, Dataform Viewer, Code Creator, Code Editor, Code Owner, Code Viewer, Viewer, Editor, Owner
dataform.workspaces.writeFileWrite workspace filesDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
resourcemanager.projects.getRead project metadataViewer, Editor, Owner
resourcemanager.projects.getIamPolicyRead project IAM policySecurity Reviewer, Project IAM Admin, Owner
serviceusage.services.getCheck API enablement statusService Usage Consumer, Service Usage Admin, Viewer, Editor, Owner

Additional permissions for first-time installation

These are required when you are installing GA4Dataform for the first time in a project.

PermissionWhy the installer needs itWhat roles have this permission?
bigquery.datasets.getList/select source GA4 datasetsBigQuery Data Viewer, BigQuery Data Editor, BigQuery Admin, Viewer, Editor, Owner
bigquery.jobs.createExecute BigQuery validation queriesBigQuery Job User, BigQuery Admin, Viewer, Editor, Owner
iam.serviceAccounts.createCreate the custom service account for Strict Act-As modeService Account Admin, Editor, Owner
iam.serviceAccounts.getCheck if the custom service account already existsService Account Admin, Service Account Viewer, Editor, Viewer, Owner
iam.serviceAccounts.getIamPolicyRead SA-level IAM policy before granting rolesService Account Admin
iam.serviceAccounts.setIamPolicyGrant Token Creator and Service Account User roles on the custom SA to the Dataform default SAService Account Admin
iam.serviceAccounts.actAsAct as the custom service account when creating the Dataform repository (Strict Act-As mode)Service Account User, Editor, Owner
resourcemanager.projects.getIamPolicyRead IAM policy before binding updatesSecurity Reviewer, Project IAM Admin, Owner
resourcemanager.projects.setIamPolicyApply project IAM policy updatesProject IAM Admin, Owner
serviceusage.services.enableEnable required APIsService Usage Admin, Editor, Owner

Additional permissions for updating an existing installation

These are required when you are updating an existing GA4Dataform setup.

PermissionWhy the installer needs itWhat roles have this permission?
dataform.workspaces.removeDirectoryRemove/update folder structure during deploymentDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
dataform.workspaces.removeFileRemove/update files during deploymentDataform Admin, Dataform Editor, Code Editor, Code Owner, Editor, Owner
dataform.repositories.updateUpdate repository labels/settingsDataform Admin, Code Owner, Editor, Owner

Additional permissions for Premium automation features

These are required when you enable the Automated GA4 Export Trigger or Email Alerts during installation. Both features use the same architecture - a Cloud Logging sink, Pub/Sub topic, Eventarc trigger, Cloud Workflow, and a dedicated service account created in your project. The installer also enables the required APIs (logging.googleapis.com, pubsub.googleapis.com, workflows.googleapis.com, eventarc.googleapis.com).

If you enable either or both features, these permissions are required:

PermissionWhy the installer needs itWhat roles have this permission?
pubsub.topics.createCreate the Pub/Sub topic for event routingPub/Sub Admin, Pub/Sub Editor, Editor, Owner
pubsub.topics.getCheck if the topic already existsPub/Sub Admin, Pub/Sub Editor, Pub/Sub Viewer, Viewer, Editor, Owner
pubsub.topics.setIamPolicyGrant the logging sink permission to publish to the topicPub/Sub Admin, Owner
logging.sinks.createCreate a Cloud Logging sink to capture relevant eventsLogs Configuration Writer, Logging Admin, Editor, Owner
logging.sinks.getCheck if the sink already existsLogs Configuration Writer, Logging Admin, Logging Viewer, Viewer, Editor, Owner
workflows.workflows.createCreate the Cloud Workflow that processes eventsWorkflows Admin, Workflows Editor, Editor, Owner
workflows.workflows.getCheck if the workflow already existsWorkflows Admin, Workflows Editor, Workflows Viewer, Viewer, Editor, Owner
workflows.workflows.updateUpdate the workflow when rerunning the installerWorkflows Admin, Workflows Editor, Editor, Owner
eventarc.triggers.createCreate the Eventarc trigger that connects Pub/Sub to the workflowEventarc Developer, Eventarc Admin, Editor, Owner
eventarc.triggers.getCheck if the trigger already existsEventarc Developer, Eventarc Admin, Eventarc Viewer, Viewer, Editor, Owner

The following permissions are also required but are already listed in earlier sections: serviceusage.services.enable, iam.serviceAccounts.create, iam.serviceAccounts.get, resourcemanager.projects.getIamPolicy, resourcemanager.projects.setIamPolicy.

IAM roles the installer adds

During the permissions step, the installer grants the following roles to service accounts.

Custom service account (query execution)

These project-level roles are assigned to the custom GA4Dataform service account used for BigQuery query execution:

  • roles/bigquery.metadataViewer
  • roles/bigquery.resourceViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.dataViewer
  • roles/bigquery.jobUser

Dataform default service account (orchestration)

These roles are assigned to the Dataform default service account so it can orchestrate workflows via Strict Act-As mode:

  • roles/secretmanager.secretAccessor
  • roles/iam.serviceAccountTokenCreator
  • roles/iam.serviceAccountUser (on the custom service account)

Workflow service account (GA4 Export Trigger, Premium)

When the Automated GA4 Export Trigger is enabled, the installer creates a dedicated service account (ga4wf-*) and assigns these project-level roles:

  • roles/dataform.editor
  • roles/workflows.invoker
  • roles/eventarc.eventReceiver

The Cloud Logging sink's writer identity is also granted roles/pubsub.publisher on the trigger's Pub/Sub topic.

Workflow service account (Email Alerts, Premium)

When Email Alerts are enabled, the installer creates a dedicated service account (dferrwf-*) and assigns these project-level roles:

  • roles/dataform.viewer
  • roles/workflows.invoker
  • roles/eventarc.eventReceiver

The Cloud Logging sink's writer identity is also granted roles/pubsub.publisher on the error topic. The workflow forwards error events to GA4Dataform's internal notification system for processing and email delivery.