Skip to content

Resolving RDS Postgres "no pg_hba.conf entry" Connection Error

Problem Statement

When connecting to PostgreSQL on Amazon RDS, you may encounter this error:

no pg_hba.conf entry for host '16.151.149.51', user 'analytics', database 'database', no encryption

This occurs despite:

  • Correct IP address added to security groups
  • Encryption settings properly configured
  • Working network connectivity

The core issue is typically an SSL/TLS configuration mismatch between your client application and the RDS instance. PostgreSQL uses pg_hba.conf to control access, and in RDS environments this file is managed automatically with SSL requirements enforced by default.

1. Enable SSL in Your Connection (sslmode=require)

This is the simplest fix for most cases:

bash
psql "postgres://user:password@rds-hostname/dbname?sslmode=require"

For programming languages:

js
// Add to connection configuration
ssl: {
  rejectUnauthorized: true,
  ca: fs.readFileSync('./us-east-1-bundle.pem').toString()
}
python
import psycopg2

conn = psycopg2.connect(
    host="rds-hostname",
    user="user",
    password="password",
    dbname="dbname",
    sslmode="require"
)

WARNING

Without SSL enabled, RDS rejects connections even with valid credentials. The error message is misleading.

2. Download and Use RDS SSL Certificate Bundle (Secure Method)

For full certificate validation (sslmode=verify-full):

  1. Download the AWS RDS CA bundle for your region
  2. Configure your connection:
js
const fs = require('fs');

const dbConfig = {
  host: 'your-rds-endpoint',
  user: 'username',
  password: 'password',
  database: 'dbname',
  port: 5432,
  ssl: {
    rejectUnauthorized: true,
    ca: fs.readFileSync('path/to/global-bundle.pem').toString()
  }
};

TIP

Find your certificate authority name in RDS console > Your DB instance > Connectivity & security > Certificate authority

3. Verify Secrets Manager Rotation Issues

If using AWS Secrets Manager with automatic password rotation:

  • Rotated passwords take several minutes to propagate
  • Symptoms: Error occurs with correct newly-rotated password
  • Solutions:
    • Wait 10-15 minutes after rotation
    • Restart RDS instance
    • Confirm expected error changes to password authentication failed when RDS syncs

4. Check Credentials and Username

Verify you're using:

  • Correct master username (check RDS console)
  • Current password (especially if manually rotated)
  • Proper database name

When credentials are invalid during SSL problems, RDS returns the misleading pg_hba.conf error.

5. EC2 Instance Connection Setup

For EC2-to-RDS connections:

  1. In RDS Console, go to your DB instance
  2. Choose Actions > Set up EC2 connection

This automates network configuration between EC2 and RDS.

Solutions to Avoid

While this "fixes" the connection, it disables encryption:

txt
Steps:
1. Create new parameter group
2. Set `rds.force_ssl = 0`
3. Reboot RDS instance

Security Risk

Never disable SSL/TLS in production environments. Data transmitted is unencrypted and vulnerable.

Environment-Specific Fixes

AWS Glue

For Glue 2.0 connections:

bash
--extra-jars s3://path/to/postgresql-42.6.2.jar
--user-jars-first true

CDK (Cloud Development Kit)

typescript
new DatabaseInstance(this, 'database', {
  engine: DatabaseInstanceEngine.postgres({version: PostgresEngineVersion.VER_15}),
  parameterGroup: new ParameterGroup(this, 'params', {
    engine: DatabaseInstanceEngine.postgres({version: PostgresEngineVersion.VER_15}),
    parameters: { 'rds.force_ssl': '0' } // ❌ Avoid in production
  }),
  // ...other options
});

Summary of Best Practices

  • Always use SSL with sslmode=require or verify-full
  • Download CA bundles directly from AWS documentation
  • Test connections immediately after Secrets Manager rotations
  • Never disable rds.force_ssl in production environments
  • Verify username/password in RDS console if errors persist

For most connection issues, adding ?sslmode=require to your connection string resolves the problem while maintaining security.