Skip to content

AWS Aurora DSQL (IAM auth) not supported: SQLPage fails with invalid password packet size / cannot generate IAM token #1195

@Cyberider

Description

@Cyberider

Summary/Intro:

SQLPage has no built-in way to mint/refresh the needed AWS IAM token to authenticate with the DSQL database (because that requires AWS SigV4 signing via AWS SDK/CLI).

I’m trying to run SQLPage against Amazon Aurora DSQL (PostgreSQL-compatible, IAM-authenticated) from an AWS Lightsail Ubuntu 22.04 instance (but the same problem would also happen from the SQLPage Lambda runtime).

DSQL uses short-lived IAM auth tokens (SigV4-style) as the PostgreSQL password. Manual psql works only when I provide an IAM token and use the correct username mapping.

SQLPage cannot connect and repeatedly logs:

  • Failed to connect to the database: error returned from database: invalid password packet size
  • Then exits / restarts under systemd, causing upstream 502s in my setup.

Environment

  • SQLPage version: 0.40.0
  • OS: Ubuntu 22.04 (Lightsail)
  • Target DB: Aurora DSQL in us-west-2
  • Connection style: TLS required (sslmode=require)
  • SQLPage launched via systemd as a non-login user (e.g., sqlpage)

What works (manual)

Using the DSQL console “Connect with token”, I can connect from the same machine:

export PGPASSWORD='<DSQL token (presigned URL format, expires ~15m)>'
psql "host=<cluster>.dsql.us-west-2.on.aws port=5432 dbname=postgres user=admin sslmode=require" -c "select now();"

This succeeds. If I omit user=admin, DSQL returns:

  • Wrong user to action mapping. user: ubuntu, action: DbConnectAdmin

So DSQL requires both:

  1. an IAM token password
  2. a correct username/action mapping (e.g. admin for DbConnectAdmin)

What fails (SQLPage)

SQLPage has no visible options/help for AWS/IAM/DSQL token generation and appears to attempt a normal Postgres password auth. With database_url like:

{
  "database_url": "postgresql://@<cluster>.dsql.us-west-2.on.aws:5432/postgres?sslmode=require",
  "database_driver": "postgres"
}

SQLPage repeatedly fails with:

  • invalid password packet size

Even when AWS credentials are available in the environment, SQLPage does not appear to generate/use a DSQL IAM token.

Expected behavior

It would be great if SQLPage could support Aurora DSQL IAM authentication, e.g.:

  • ability to generate the required IAM auth token automatically (SigV4) when connecting
  • ability to set/override the PostgreSQL username explicitly (DSQL requires a specific mapping, e.g. admin)
  • docs/examples for Aurora DSQL

Workaround (in the meantime)

Because DSQL requires a rotating IAM token (~15 minutes), and SQLPage doesn’t generate tokens, you need a local component that does.

Practical workaround

Run a local PostgreSQL pooler/proxy on the server (PgBouncer or similar):

  • SQLPage connects to the local proxy on 127.0.0.1 with a static password
  • The proxy connects to DSQL using the IAM token as its upstream password
  • A small timer/job refreshes the token periodically (e.g., every 10 minutes) and reloads/restarts the proxy

This keeps SQLPage stable without restarting it every 15 minutes.

Notes:

  • Manual psql confirms DSQL connectivity is fine when using token + correct username (e.g. admin).
  • On Lightsail there’s no instance role, so the token refresh process uses a dedicated IAM “machine user” (access keys) stored securely and restricted to DSQL permissions.

Reproduction steps

1. Create an Aurora DSQL cluster

  • Region: any (tested in us-west-2)
  • No special configuration required

2. Obtain a DSQL IAM auth token from the AWS Console

  1. Open the DSQL cluster in the AWS Console

  2. Click “Connect” → “Connect with token”

  3. Choose:

    • User / Action: Admin (DbConnectAdmin)
  4. Copy the generated token (a long presigned URL–style string)

This token expires after ~15 minutes.


3. Verify connectivity using psql (works)

On a Linux machine with network access to the cluster:

export PGPASSWORD='<PASTE TOKEN FROM CONSOLE HERE>'

psql "host=<cluster-id>.dsql.<region>.on.aws \
      port=5432 \
      dbname=postgres \
      user=admin \
      sslmode=require" \
     -c "select now();"

Result:
Connection succeeds and returns the current timestamp.

Notes:

  • Omitting user=admin causes DSQL to fail with
    Wrong user to action mapping
  • Using any non-token password fails

4. Attempt the same connection using SQLPage (fails)

Using SQLPage 0.40.0, configure sqlpage.json:

{
  "database_url": "postgresql://admin@<cluster-id>.dsql.<region>.on.aws:5432/postgres?sslmode=require",
  "database_driver": "postgres"
}

Start SQLPage (e.g. via systemd).

Observed behavior:

  • SQLPage repeatedly logs:
Failed to connect to the database: error returned from database: invalid password packet size
  • SQLPage exits or restarts
  • The server never binds to its HTTP port

Providing valid AWS credentials in the environment does not change the outcome.


5. Expected behavior

Since:

  • psql succeeds with the same endpoint using an IAM auth token
  • SQLPage targets PostgreSQL-compatible databases

SQLPage would need to either:

  • Generate and use an IAM auth token for Aurora DSQL, or
  • Provide a documented/first-class way to integrate with token-based PostgreSQL authentication (e.g., via hooks or helpers)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions