Skip to main content
AWS RDS provides a managed PostgreSQL database for Onyx. This guide covers password authentication, TLS, and IAM authentication.
Onyx supports PostgreSQL 15 and later. Use the latest minor of a supported major version.

Guide

1

Create an RDS PostgreSQL instance

In the Amazon RDS console, click Create database.
  • Select PostgreSQL as the engine type
  • Choose Standard create for the creation method
2

Configure database settings

Settings:
  • Set a Master username (for example, postgres)
  • Set a strong Master password
Instance configuration:
  • Choose an Instance class. db.t4g.medium suits small deployments; db.m7g.large suits production
  • Configure Storage size and enable autoscaling if needed
3

Configure connectivity and security

  • Select your VPC and Subnet group
  • Configure the VPC security group to allow port 5432 from your Onyx instance or EKS nodes
  • Set Public access to No for production (recommended)
4

Configure Onyx

Get the Endpoint from the RDS instance details. The database name is postgres unless you set one.For Docker Compose deployments, set these variables in your .env file:
The bundled relational_db container keeps running but Onyx no longer uses it.For Kubernetes deployments, disable the bundled PostgreSQL and point the chart at RDS in values.yaml:
values.yaml
To keep the password out of values.yaml, create a Kubernetes Secret with keys username and password and set auth.postgresql.existingSecret to its name instead of values.Onyx runs its database migrations on the next start.

Optional: Verify the RDS certificate

RDS encrypts connections by default, but Onyx does not verify the server certificate unless you tell it to. To verify it, download the RDS CA bundle and set the TLS mode.
For Docker Compose, mount the bundle and set the mode in .env:
docker-compose.prod.yml
.env
For Kubernetes, store the bundle in a Secret and enable postgresTls. The chart mounts the CA and sets the variables for you:
values.yaml
POSTGRES_SSLMODE accepts the libpq values disable, allow, prefer, require, verify-ca, and verify-full. Only verify-ca and verify-full check the server certificate, and both require POSTGRES_SSLROOTCERT.

Optional: Enable IAM authentication

IAM database authentication replaces the static password with short-lived IAM tokens. Onyx fetches a new token for each connection and always verifies the RDS certificate.
1

Enable IAM authentication on RDS

  • Open your RDS PostgreSQL instance and click Modify
  • Under Database authentication, enable IAM database authentication
  • Click Continue, then Apply immediately
2

Create the IAM database user

Connect to your database with the master credentials and run:
3

Configure the IAM policy

Get your DbiResourceId (or DbClusterResourceId for Aurora):
Create this IAM policy. Fill in the region, account-id, and resource-id, then attach the policy to the role Onyx runs as: the EC2 instance role, or the EKS node role or pod identity.
4

Download the RDS CA bundle

IAM authentication requires TLS. Onyx reads the CA bundle from /app/bundle.pem inside each container.
5

Configure Onyx for IAM authentication

For Docker Compose deployments, set these variables in your .env file. Leave POSTGRES_PASSWORD unset:
Then uncomment the bundle.pem volume mounts for the api_server and background services in docker-compose.prod.yml:
docker-compose.prod.yml
For Kubernetes deployments, set the variables in values.yaml and disable the bundled PostgreSQL:
values.yaml
Store the CA bundle in a Secret:
Then mount it at /app/bundle.pem in the API server and every worker. Add this to the volumes and volumeMounts of each of those deployments in values.yaml:
values.yaml
USE_IAM_AUTH overrides POSTGRES_SSLMODE and the other POSTGRES_SSL* variables. Onyx ignores them while IAM authentication is on.
6

Restart Onyx

Docker Compose
Kubernetes
For more details, see the AWS RDS IAM authentication documentation.

Next Steps

Configure Authentication

Set up authentication for your Onyx deployment with OAuth, OIDC, or SAML.

More Onyx Configuration Options

Learn about all available configuration options for your Onyx deployment.