Aurora com conectividade gerenciada só aceita autenticação IAM
O que aconteceu
Ao criar um cluster Aurora PostgreSQL na AWS pelo caminho padrão, tentamos fornecer a um colega uma URL de conexão comum (postgresql://usuario:senha@host/db), para ele acessar o banco sem precisar instalar nada da AWS. A conexão por senha falhava sempre com o erro PAM authentication failed, mesmo com a senha correta e o usuário criado certo. Só funcionava gerando um token temporário pela AWS CLI.
Causa raiz
O cluster havia sido criado com a conectividade gerenciada pela AWS (o “Internet access gateway”, que aparece no DNS como um endpoint rdsrelay). Nesse modo, o banco fica numa rede da própria AWS — sem VPC, sub-rede ou grupo de segurança na nossa conta — e o acesso passa obrigatoriamente por esse relay, que só aceita autenticação IAM. Senha estática nunca chega ao Postgres: o relay rejeita antes. Como consequência, não existe URL fixa com senha, e o token IAM expira em 15 minutos e depende das credenciais AWS de quem o gera.
Correção
Para permitir acesso por senha (URL fixa, sem AWS CLI), o banco precisa estar numa VPC nossa. Provisionamos um novo cluster Aurora Serverless v2 dentro da VPC default, com a instância marcada como publicly accessible e um grupo de segurança liberando a porta 5432 apenas para IPs conhecidos. Assim a senha funciona normalmente. Para gerenciar os IPs (que mudam), criamos a regra make db.ip.allow, que libera o IP atual no grupo de segurança.
Nota (2026-07-31): desde a spec 20260710000000_leads_db_public_access, o security group do cluster de leads libera
0.0.0.0/0na 5432, e a spec 20260731210414_remove_db_ip_allow_improve_help propõe remover a regradb.ip.allow. Enquanto essa spec não for implementada, a regra ainda existe.
Como evitar
Quando o objetivo for acesso por senha com URL fixa (ex.: compartilhar com um colega ou com uma ferramenta que não fala IAM), criar o Aurora dentro de uma VPC própria com grupo de segurança — nunca pelo modo de conectividade gerenciada (rdsrelay), que força IAM. Se o acesso for sempre IAM, o modo gerenciado é aceitável e mais simples.
Ver também database_cluster_vpc_is_fixed_at_creation: a VPC escolhida aqui não pode ser trocada depois.