GCP
Teleskope supports two GCP enrollment paths:
Organization discovery: Configure one connector service account and grant its IAM roles on the organization. Teleskope traverses the organization and its folders to discover projects automatically.
Manual project enrollment: Add projects individually and grant the connector roles on each project.
Organization discovery is optional and disabled by default. It does not replace manual project enrollment. When organization discovery is enabled, inherited organization-level permissions mean discovered projects do not need to be enrolled or assigned to connectors individually.
Organization reconciliation runs on a five-field cron schedule in UTC. During reconciliation, Teleskope:
Discovers projects in the organization and its folders.
Determines which supported GCP resources exist in each project.
Verifies the connector service account's effective access.
Enables each connector independently for the projects where it is applicable and accessible.
A project does not need every connector. If a project has no resources for a connector, that connector is marked not applicable. A permission failure for one connector does not prevent another accessible connector from running in the same project.
Configure organization discovery
Use the following sections for organization discovery. To enroll one project without scheduled organization traversal, see Enroll a project manually.
Runtime IAM requirements
Grant the shared dispatch permissions and the permissions for every connector you enable. The table lists the Google API calls used by the current connector paths and whether organization readiness explicitly verifies the permission. A No means the permission is not in the preflight's declared required-permission check; resource-discovery calls can still fail before that check runs. It does not mean the permission is optional at runtime.
Shared dispatch
Resource Manager Projects.Get and Projects.GetAncestry
resourcemanager.projects.get
No
Shared dispatch
Compute Engine Regions.List
compute.regions.list
No
BigQuery
BigQuery Datasets.List and Datasets.Get
bigquery.datasets.get
No
BigQuery
BigQuery Tables.List and Tables.Get
bigquery.tables.get, bigquery.tables.list
bigquery.tables.get only
BigQuery
BigQuery query jobs for column discovery and scanning
bigquery.jobs.create, bigquery.tables.getData
Yes
Cloud SQL
Cloud SQL Admin Instances.List
cloudsql.instances.list
No
Cloud SQL
Cloud SQL Auth Proxy connection
cloudsql.instances.get, cloudsql.instances.connect
Yes
Cloud SQL
Cloud SQL Admin SslCerts.Insert, when Teleskope generates a client certificate
cloudsql.sslCerts.create
No
Cloud Storage
Cloud Storage Buckets.List
storage.buckets.list
No
Cloud Storage
Cloud Storage Buckets.GetIamPolicy for each discovered bucket
storage.buckets.getIamPolicy
No
Cloud Storage
Cloud Storage Objects.List and object reads during scanning
storage.objects.list, storage.objects.get
Yes
Cloud Logging
GKE Projects.Locations.Clusters.List
container.clusters.list
Yes
Cloud Logging
Cloud Logging Entries.List
logging.logEntries.list
Yes
Cloud SQL database permissions are separate from Google Cloud IAM. The database user still needs the read-only grants in Cloud SQL.
Create the connector service account
Create one service account for Teleskope in a GCP project that belongs to the organization. The service account can be used across all projects because its discovery and connector roles are granted on the organization.
Grant organization discovery permissions
Create a custom role on the organization with these permissions:
resourcemanager.organizations.getresourcemanager.folders.getresourcemanager.folders.listresourcemanager.projects.getresourcemanager.projects.listcompute.regions.list
Grant the custom role to the connector service account on the organization.
The organization role above includes the two shared dispatch permissions. They are required even when you enable only one connector because dispatch looks up the enrolled project and its regions before connector-specific work starts.
Grant connector permissions on the organization
Grant the roles for every connector that you enable in Teleskope. Apply these roles to the connector service account at the organization level, not separately in each project.
BigQuery
roles/bigquery.jobUserroles/bigquery.metadataViewerroles/bigquery.dataViewer
For BigQuery deletion or masking workflows, also grant roles/bigquery.dataEditor.
roles/bigquery.metadataViewersuppliesbigquery.datasets.get,bigquery.tables.get, andbigquery.tables.list.roles/bigquery.dataViewersuppliesbigquery.tables.getData.roles/bigquery.jobUsersuppliesbigquery.jobs.createat the project where a BigQuery job runs.
Cloud SQL
roles/cloudsql.clientroles/cloudsql.viewerroles/cloudsql.adminroles/cloudsql.viewersuppliescloudsql.instances.getandcloudsql.instances.list.roles/cloudsql.clientsuppliescloudsql.instances.connectfor the Cloud SQL Auth Proxy.roles/cloudsql.adminis used only because it includescloudsql.sslCerts.create, which Teleskope uses when it generates a client SSL certificate.
Database credentials and read-only database grants are still configured per Cloud SQL instance; see Cloud SQL.
Cloud Storage
roles/storage.bucketViewerroles/storage.objectViewerroles/pubsub.viewerroles/pubsub.subscriber
roles/storage.bucketViewer supplies storage.buckets.get and storage.buckets.list, while roles/storage.objectViewer supplies storage.objects.get and storage.objects.list. Neither role grants storage.buckets.getIamPolicy; grant the custom role below as well. In particular, roles/storage.objectViewer does not grant bucket enumeration or bucket IAM-policy reads.
The Pub/Sub roles are required when Cloud Storage notifications are used for incremental discovery. They do not replace the Cloud Storage permissions above. Topics, subscriptions, and bucket notifications remain project- or bucket-specific resources; see Cloud Storage.
Cloud Logging
roles/logging.privateLogViewerroles/container.clusterViewer
roles/container.clusterViewer includes container.clusters.list, and roles/logging.privateLogViewer includes logging.logEntries.list for private log entries.
Terraform example
The following example grants all supported connector roles. Remove roles for connectors you do not enable.
Allow Teleskope to use the service account
Teleskope does not require a downloaded service-account key. Configure one of the following identity methods for your deployment.
Teleskope SaaS
Your Teleskope account team provides the exact Workload Identity Federation principal for your environment. Grant that principal roles/iam.workloadIdentityUser on the connector service account.
Use the principal exactly as provided. This binding is made on the service account because it controls impersonation; the discovery and connector roles remain organization-level grants.
Teleskope-managed GCP deployment
Grant the Teleskope application service account permission to impersonate the connector service account. Your Teleskope account team provides the application service-account email.
Configure organization discovery in Teleskope
In Teleskope, go to Settings > Connectors > GCP and configure:
GCP organization ID
Connector service-account email
Workload Identity Federation project number, pool, and provider for SaaS deployments
Reconciliation cron expression in UTC
Scheduled discovery
The default reconciliation schedule is 0 0 * * *, once per day at 00:00 UTC. Run a dry run first, review the discovered project counts, then enable scheduled discovery.
Organization discovery automatically uses the GCP connectors enrolled in the environment. It does not require a per-project connector mapping. Connector scan schedules are configured separately on their individual settings pages.
Enroll a project manually
In Teleskope, go to Settings > Connectors > GCP and select Enroll. The Enroll page first shows Terraform to apply in the project being enrolled: it creates the connector service account, a Workload Identity pool, and an AWS provider trusting an AWS account, and grants the service account roles/iam.workloadIdentityUser. It also creates a one-time, org-level custom role and binding for discovery permissions — apply that part once per organization, not per project.
Before applying: set the AWS provider's account to the AWS account ID of your Teleskope environment, provided by your account team — the pre-filled value is not an AWS account ID. Use your project number, not your project ID, in the principalSet:// member — GCP requires the numeric project number there.
Then fill in the form with the organization ID, project ID, project number, service account name and email, and the pool ID and provider ID just created: GCP Organization ID, GCP Project ID, GCP Project Number, Service Account Name, Service Account Email, Workload Federation Pool ID, Workload Federation Pool Provider ID. Select Enroll.
Grant the shared dispatch role and the connector roles only on that project. The project is stored and enabled independently of any organization enrollment profile, so scheduled organization discovery does not need to be enabled.
For manual Cloud Storage enrollment, also grant this project-scoped custom role in addition to roles/storage.bucketViewer and roles/storage.objectViewer:
Last updated
Was this helpful?
