Qovery uses a custom role with granular permissions rather than the built-in
Contributor role, following the principle of least privilege. The role is scoped to a single subscription.Setup Overview
Qovery provides a setup script that:- Registers required Azure resource providers (Container Service, Container Registry, Storage, Network, etc.)
- Creates a custom IAM role with the exact permissions listed below, scoped to your subscription
- Creates a multi-tenant service principal in your Azure AD tenant
- Assigns the custom role to the service principal
Required Resource Providers
The setup script registers these Azure resource providers before provisioning:Control Plane Permissions (Actions)
AKS — Microsoft.ContainerService
Qovery creates AKS clusters with:
- Cilium network policy and data plane
- Azure CNI Overlay networking
- Workload Identity via OIDC issuer
- Multi-zone node pools (zones 1, 2, 3) with auto-scaling
- Maintenance windows (Tuesdays 21:00–23:00 UTC)
Container Registry — Microsoft.ContainerRegistry
Storage — Microsoft.Storage
Qovery creates a Standard ZRS (Zone-Redundant Storage) account per cluster with three blob containers:
qovery-kubeconfigs-{id}— Stores kubeconfig filesqovery-logs-{id}— Stores application and infrastructure logs (Loki)qovery-thanos-{id}— Stores metrics (Thanos long-term storage)
Networking — Microsoft.Network
Qovery creates a complete network stack per cluster:
- VNet with configurable CIDR (default
10.0.0.0/16) - 3 subnets (one per availability zone, each
/20) - 3 NAT Gateways with static public IPs (one per zone)
- Network policy via Cilium
Compute — Microsoft.Compute
Resource Manager — Microsoft.Resources
Authorization — Microsoft.Authorization
Qovery creates these managed identities with Workload Identity (OIDC federation):
- Karpenter MSI — VM/Network Contributor for node provisioning
- Storage MSI — Blob Data Contributor for logs and state
- Thanos MSI — Blob Data Contributor for metrics storage
Managed Identity — Microsoft.ManagedIdentity
Key Vault — Microsoft.KeyVault
Monitoring — Microsoft.Insights
Features — Microsoft.Features
Container Instances — Microsoft.ContainerInstance
Data Plane Permissions (DataActions)
These permissions control access to the data within Azure resources (as opposed to management operations).Blob Storage — Microsoft.Storage
Container Registry — Microsoft.ContainerRegistry
What Qovery Creates in Your Account
Here’s a summary of all resources Qovery provisions per cluster:Security Best Practices
Why does Qovery use a multi-tenant service principal?
Why does Qovery use a multi-tenant service principal?
Qovery uses a multi-tenant application registered in Qovery’s Azure AD tenant. When you run the setup script, it creates a service principal in your tenant that references this application. This means:
- Qovery never has direct access to your tenant credentials
- You control the service principal and its role assignment
- You can revoke access instantly by deleting the role assignment or service principal
Can I restrict these permissions further?
Can I restrict these permissions further?
The custom role contains the minimum permissions required for full cluster lifecycle management. If you don’t use certain features (e.g., Key Vault, Container Instances), contact Qovery support for a tailored role definition.
What is the scope of the custom role?
What is the scope of the custom role?
The custom role is scoped to a single subscription (
/subscriptions/{id}). Qovery cannot access resources in other subscriptions. Within the subscription, Qovery creates a dedicated resource group per cluster and operates primarily within that group.How can I audit what Qovery does with these permissions?
How can I audit what Qovery does with these permissions?
Enable Azure Activity Log and Azure Monitor to get a full record of every API call made by the Qovery service principal. You can also review Qovery’s audit logs for a high-level view.
What managed identities does Qovery create?
What managed identities does Qovery create?
Qovery creates dedicated user-assigned managed identities with Workload Identity (OIDC federation):
- Karpenter MSI — Virtual Machine Contributor + Network Contributor for dynamic node provisioning
- Storage MSI — Storage Blob Data Contributor for kubeconfig and log storage
- Thanos MSI — Storage Blob Data Contributor for long-term metrics storage