-
-
Notifications
You must be signed in to change notification settings - Fork 163
Description
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:
- an IAM token password
- a correct username/action mapping (e.g.
adminforDbConnectAdmin)
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.1with 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
psqlconfirms 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
-
Open the DSQL cluster in the AWS Console
-
Click “Connect” → “Connect with token”
-
Choose:
- User / Action: Admin (
DbConnectAdmin)
- User / Action: Admin (
-
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=admincauses 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:
psqlsucceeds 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)