Skip to main content
This page explains every Azure permission that Qovery requires to create and manage your AKS clusters, and what each permission is used for in our infrastructure engine.
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:
  1. Registers required Azure resource providers (Container Service, Container Registry, Storage, Network, etc.)
  2. Creates a custom IAM role with the exact permissions listed below, scoped to your subscription
  3. Creates a multi-tenant service principal in your Azure AD tenant
  4. Assigns the custom role to the service principal
You can review the full setup process in the Azure installation guide.

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 files
  • qovery-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
Each identity is scoped to the cluster’s resource group.

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

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
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.
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.
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.
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
Each identity is federated with a specific Kubernetes service account, so credentials are never stored in pods.