Qovery uses a custom IAM role with granular permissions rather than predefined GCP roles, following the principle of least privilege. The setup script also enables only the specific GCP APIs that Qovery needs.
Setup Overview
Qovery provides a setup script that:- Enables required GCP APIs (Container, Compute, Artifact Registry, Storage, Resource Manager, Cloud Run)
- Creates a custom IAM role with the exact permissions listed below
- Creates a service account and binds it to the custom role
- Generates a JSON key for the service account to upload in Qovery
Required GCP APIs
IAM Permissions — Service Accounts
iam.serviceAccounts.*
Workload Identity is the recommended way to authenticate workloads on GKE. Qovery creates dedicated service accounts for each component:
- Cluster SA — Default node SA with logging, monitoring, and image pull permissions
- Loki SA — GCS access for log storage
- ESO SA — Secret Manager access for external secrets
- KEDA SA — Workload Identity for autoscaling
- Thanos SA — GCS access for metrics storage
IAM Permissions — Resource Manager
resourcemanager.projects.*
Kubernetes Engine — container.*
Qovery creates GKE Autopilot clusters, which requires full control over Kubernetes resources. The permissions are grouped by function below.
Cluster Management
Core Kubernetes Resources
These permissions are required to deploy and manage Qovery system components (Nginx Ingress, cert-manager, Loki, Prometheus, KEDA, etc.) via Helm charts.Workload Scaling & Scheduling
Networking & Ingress
RBAC & Security
Storage & CSI
Cluster Internals
Artifact Registry — artifactregistry.*
Compute Engine — Networking
VPC Networks — compute.networks.*
Subnetworks — compute.subnetworks.*
Routers & NAT — compute.routers.*
Routes — compute.routes.*
Reserved External IPs for Cloud NAT — compute.addresses.*
Instance Groups — compute.instanceGroupManagers.*, compute.instanceGroups.*
Regions — compute.regions.*
Cloud Storage — storage.*
Qovery creates three GCS buckets per cluster, all prefixed with qovery-:
qovery-kubeconfigs-{id}— Stores kubeconfig files (versioned)qovery-logs-{id}— Stores application and infrastructure logs (Loki)qovery-prometheus-{id}— Stores metrics (Thanos long-term storage)
Bucket Operations — storage.buckets.*
Object Operations — storage.objects.*
Other Storage — storage.bucketOperations.*, storage.managedFolders.*, storage.multipartUploads.*
Cloud Run — run.*
Qovery uses Cloud Run Jobs for asynchronous cleanup tasks (e.g., deleting GCS buckets with many objects in the background).
Services — run.services.*
Jobs — run.jobs.*
Other Cloud Run — run.configurations.*, run.executions.*, run.revisions.*, run.routes.*, run.operations.*, run.locations.*
What Qovery Creates in Your Account
Here’s a summary of all resources Qovery provisions per cluster:Security Best Practices
Can I restrict these permissions further?
Can I restrict these permissions further?
The permissions listed are the minimum required for Qovery to fully manage your GKE infrastructure. If you don’t use certain features (e.g., Cloud Run workloads), contact Qovery support for a tailored minimal role.
Why does Qovery need so many Kubernetes Engine permissions?
Why does Qovery need so many Kubernetes Engine permissions?
GCP’s Kubernetes Engine permissions are extremely granular — each Kubernetes resource type (Pod, Service, Deployment, etc.) and action (create, get, list, update, delete) requires a separate permission. Qovery fully manages the cluster lifecycle, including deploying system components (ingress, monitoring, logging, autoscaling) via Helm charts, which requires CRUD access to nearly all Kubernetes resource types.
What service accounts does Qovery create?
What service accounts does Qovery create?
Qovery creates dedicated service accounts with Workload Identity bindings:
- Cluster node SA — logging, monitoring, image pull
- Loki SA — GCS access for log storage
- ESO SA — Secret Manager access
- KEDA SA — autoscaling metrics
- Thanos SA — GCS access for metrics storage
How can I audit what Qovery does with these permissions?
How can I audit what Qovery does with these permissions?
Enable GCP Audit Logs on your project to get a full record of every API call made by the Qovery service account. You can also review Qovery’s audit logs for a high-level view.