Skip to main content
This page explains every GCP IAM permission that Qovery requires to create and manage your GKE clusters, and what each permission is used for in our infrastructure engine.
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:
  1. Enables required GCP APIs (Container, Compute, Artifact Registry, Storage, Resource Manager, Cloud Run)
  2. Creates a custom IAM role with the exact permissions listed below
  3. Creates a service account and binds it to the custom role
  4. Generates a JSON key for the service account to upload in Qovery
You can review the full setup script in the GCP installation guide.

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

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.
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.
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
Each SA has the minimum permissions for its specific function.
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.