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:- STS Assume Role (recommended) — A CloudFormation stack creates an IAM role with temporary, auto-rotating credentials
- Static Credentials — An IAM user with an access key pair (requires manual rotation)
Policy Structure
The Qovery IAM policy has two statements:- 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. - Statement 2 — Permissions scoped to
qovery*resources only (S3 buckets and SQS queues).
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
Can I restrict these permissions further?
Can I restrict these permissions further?
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).
Why use STS Assume Role instead of static credentials?
Why use STS Assume Role instead of static credentials?
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.
Does Qovery access my existing AWS resources?
Does Qovery access my existing AWS resources?
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.How can I audit what Qovery does with these permissions?
How can I audit what Qovery does with these permissions?
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.