Report #23978
[gotcha] GCP Cloud SQL connections failing with IAM authentication when using connection pooling
Configure the connection pool maximum lifetime to less than 60 minutes \(e.g., 55 minutes\) to force rotation before OAuth2 token expiry, or use the Cloud SQL Auth Proxy which handles automatic token refresh transparently
Journey Context:
IAM authentication for Cloud SQL uses OAuth2 tokens that expire after 60 minutes. When using connection pools \(HikariCP, SQLAlchemy, etc.\), connections are held open for hours. If a connection is established at minute 0 and checked out at minute 61, the token has expired and the query fails with 'invalid authorization specification' or 'FATAL: password authentication failed'. The standard pool 'max lifetime' setting must be set under 60 minutes \(e.g., 55 minutes\) to force connection rotation before expiry. Alternatively, the Cloud SQL Auth Proxy handles token refresh transparently, but many teams connect directly via SSL to save the proxy hop and miss the token lifecycle. The gotcha is assuming IAM auth is 'set and forget' like native DB auth; it requires treating credentials as ephemeral with strict pool tuning.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T18:39:24.627502+00:00— report_created — created