Skip to main content
This page explains every AWS IAM permission that Qovery requires to create and manage your EKS clusters, and what each permission is used for in our infrastructure engine.
Qovery follows the principle of least privilege where possible. S3 and SQS permissions are scoped to qovery* resources only. Some services require broad permissions because Qovery fully manages the lifecycle of those resources on your behalf.

Setup Overview

Qovery provides two methods to set up AWS credentials:
  1. STS Assume Role (recommended) — A CloudFormation stack creates an IAM role with temporary, auto-rotating credentials
  2. Static Credentials — An IAM user with an access key pair (requires manual rotation)
Both methods use the same IAM policy. You can review the full setup process in the AWS installation guide.

Policy Structure

The Qovery IAM policy has two statements:
  1. Statement 1 — Permissions on all resources ("Resource": "*") for services where AWS does not support resource-level restrictions, or where Qovery needs to create new resources.
  2. Statement 2 — Permissions scoped to qovery* resources only (S3 buckets and SQS queues).
You can download the full policy JSON here.

Statement 1 — Permissions on All Resources

IAM — iam:*

All IAM roles created by Qovery follow the IRSA pattern (IAM Roles for Service Accounts), meaning each Kubernetes workload gets its own scoped role rather than sharing a single broad role.

EC2 — ec2:*


EKS — eks:*


Elastic Load Balancing — elasticloadbalancing:*


RDS — rds:*


ElastiCache — elasticache:*


ECR — ecr:*

Worker nodes receive the AmazonEC2ContainerRegistryReadOnly managed policy via their IAM role.

CloudWatch — cloudwatch:*


CloudWatch Logs — logs:*


Auto Scaling — autoscaling:*, application-autoscaling:*

Qovery primarily uses Karpenter for node provisioning, which manages EC2 instances directly. Auto Scaling permissions are retained for the initial managed node group and as a fallback.

KMS — kms:*


EventBridge — events:* (scoped actions)

The policy grants only specific EventBridge actions:
These events are forwarded to an SQS queue that Karpenter monitors to gracefully drain nodes before spot interruptions or maintenance events.

Organizations — Read-Only Access

These are read-only permissions. Qovery never modifies your AWS Organization structure.

DynamoDB — dynamodb:*


ECS — ecs:*


Elasticsearch Service — es:* (scoped actions)


CloudTrail — cloudtrail:LookupEvents


Resource Groups Tagging — tag:GetResources


Service Quotas — servicequotas:GetServiceQuota

This is a read-only permission. If not granted, preflight checks still work but fall back to AWS default quota limits, which may not reflect your actual account limits. A WARN is displayed in the preflight report to inform you.

Statement 2 — Scoped to qovery* Resources

These permissions are restricted to resources whose names start with qovery. Qovery cannot access any S3 buckets or SQS queues that you created outside of Qovery.

S3 — s3:* (on arn:aws:s3:::qovery*)

The s3:ListAllMyBuckets permission in Statement 1 is required to verify bucket existence before creation. It is read-only and does not grant access to bucket contents.

SQS — sqs:* (on arn:aws:sqs:*:*:qovery*)


What Qovery Creates in Your Account

Here’s a summary of all resources Qovery provisions per cluster:

Security Best Practices

Some permissions can be scoped more narrowly for advanced use cases. Contact Qovery support for a minimal policy template tailored to your specific configuration (e.g., if you don’t use managed databases, RDS and ElastiCache permissions can be removed).
STS Assume Role provides temporary credentials that automatically rotate. Qovery never stores long-lived access keys, and you can revoke access instantly by deleting the CloudFormation stack. See the AWS installation guide for setup instructions.
No. S3 and SQS permissions are scoped to qovery* resources only. Other services (EC2, EKS, RDS, etc.) create new resources dedicated to your Qovery cluster. Qovery does not read or modify resources created outside of Qovery.
Enable AWS CloudTrail in your account to get a full audit log of every API call made by the Qovery IAM role. You can also review Qovery’s audit logs for a high-level view of operations.