Cliente local de base de dados e RDS privado: porque a ligação expira
Um cliente local não chega a uma instância RDS privada por três motivos distintos. Verifique o DNS dividido, a rota e as provas do grupo de segurança antes de mudar qualquer coisa.
O portátil de um programador expira ao ligar-se ao ponto final privado de RDS, enquanto as mesmas credenciais funcionam a partir de um anfitrião bastião. Nada está em baixo. Ao caminho entre esse portátil e a base de dados falta uma de três coisas: um nome que resolva, uma rota que transporte o tráfego ou uma regra de grupo de segurança que admita a origem que a base de dados vê realmente. Descubra qual falta antes de mudar as outras duas.
Leia a falha na camada certa
Uma expiração não é um único erro. Um nome que não resolve falha antes de um pacote sair da máquina. Um endereço sem rota envia pacotes para um buraco negro. Uma porta filtrada produz uma espera que parece exatamente o anfitrião errado. Execute os passos por ordem e pare no primeiro que falhar.
dig +short db.internal.example
nc -vz db.internal.example 5432
Se o nome devolver um endereço público, ou não devolver nada, o túnel ainda não é o problema.
Se o nome resolver e o teste da porta ficar pendurado, compare o endereço que resolveu com o endereço que a base de dados comunica. Um ponto final gerido pode resolver num endereço privado dentro da VPC e em nada útil fora dela, e um endereço copiado de uma consulta antiga apontará para um anfitrião que já não responde.
Separe o túnel da rota
Ligar uma VPN de cliente não encaminha automaticamente todos os intervalos privados. O perfil transporta as rotas que o serviço empurra, e o cliente pode instalar apenas algumas delas. Veja que intervalos o cliente acrescentou realmente e se o endereço da base de dados cai dentro de um deles.
ip route get 10.20.40.15
ip addr show tun0
Uma rota que aponta para a interface do túnel é necessária; não é suficiente, porque o lado oposto ainda tem de aceitar o tráfego.
Os perfis de túnel dividido são a origem habitual desta falha parcial. Funcionam para a aplicação para a qual o perfil foi desenhado e deixam o intervalo da base de dados fora do túnel, o que produz exatamente a expiração que uma firewall produziria.
Ajuste o grupo de segurança à origem real
O grupo de segurança do RDS admite origens, não pessoas. Consoante a arquitetura, a origem pode ser o conjunto de clientes da VPN, o endereço privado de um bastião ou um endereço NAT para o qual o tráfego é traduzido. Leia a regra e a origem real do pacote em conjunto.
aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0 \
--query 'SecurityGroups[].IpPermissions'
Uma regra para o endereço de casa de um único portátil é um problema de manutenção, não um desenho de acesso.
Quando uma VPN de cliente ou um gateway NAT está no caminho, a base de dados pode ver o endereço do tradutor em vez do endereço do túnel do programador. É por isso que uma regra copiada de uma configuração de bastião que funciona pode falhar para um portátil: os dois caminhos chegam de origens diferentes embora ambos pareçam internos.
Prefira um caminho estreito a um largo
Quando um programador precisa de uma base de dados, o encaminhamento baseado em sessão é frequentemente mais barato de operar do que um túnel de rede completo. O cliente local liga-se a uma porta encaminhada, e o componente remoto estabelece a ligação à base de dados a partir de dentro da rede.
ssh -N -L 5432:db.internal.example:5432 bastion.internal.example
Mantenha a verificação TLS intacta nesse desenho. O cliente deve continuar a validar o certificado do servidor contra o nome que espera; uma porta encaminhada local não é motivo para desativar a verificação, e desativá-la esconde exatamente o problema de identidade que vale a pena apanhar.
A escolha entre um túnel completo e um encaminhamento estreito é uma decisão sobre o âmbito, não sobre teatro de segurança.
Deixe um caminho repetível para trás
Documente o nome do ponto final em vez de um endereço resolvido, o intervalo de origem que o grupo de segurança admite e a função de base de dados que o programador usa. Estes três factos explicam a maioria das falhas futuras sem uma chamada. Acrescente também a versão do perfil de cliente, porque uma mudança de perfil pode remover uma rota que o antigo transportava.
Depois teste o caso negativo uma vez: um cliente fora da origem aprovada deve continuar a ser recusado.
Uma base de dados privada que só funciona para a pessoa que a configurou não é acesso privado; é uma exceção não documentada à espera de ser redescoberta. Escreva o caminho, e o próximo programador herda um método em vez de um mistério.