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/0 na 5432, e a spec 20260731210414_remove_db_ip_allow_improve_help propõe remover a regra db.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.