Uma solução (mas não a única solução!) é usar o que é chamado de Bastion Host. Um Bastion Host é um servidor com capacidade muito baixa que fica em sua sub-rede pública e é o único servidor que permite conexões SSH de entrada.
Este servidor deve ser completamente protegido, e dependendo do seu nível de paranóia, existem algumas técnicas que você pode usar para esconder o fato de que este servidor está escutando conexões SSH. Veja, por exemplo, o link . Claro, você não precisa endurecê-lo apenas para se conectar à sua instância do RDS.
De qualquer forma, você pode configurar suas regras do EC2 Security Group da seguinte forma:
- O Grupo de segurança do host Bastion permite a porta 22 somente do seu IP local (para que você possa fazer SSH, mas ninguém mais pode)
- O Grupo de segurança do RDS permite que as conexões do banco de dados que chegam na porta X (dependem do seu banco de dados) somente do host de bastiões
A propósito, você pode conseguir "somente do Bastion Host" especificando o endereço IP privado do seu Bastion Host, ou listando o nome do grupo de segurança que o Bastion Host usa.
Agora você tem duas opções aqui:
OPÇÃO # 1: configure o encaminhamento de porta local como parte de sua conexão SSH
Por exemplo, se você estiver no OS X ou Linux, conecte o SSH ao host bastião e configure o encaminhamento de porta local com:
ssh -l <bastion-host-username> -L <local-port-you-connect-to>:<rds-private-ip>:<rds:listening-port> <bastion-host-public-ip>
E digamos que você esteja se conectando ao Postgres a partir de um Bastion Host baseado no Ubuntu. Pode parecer assim:
ssh -l ubuntu -L 5432:<rds-private-ip>:5432 <bastion-host-public-ip>
Sua máquina local agora está ouvindo na porta 5432
e encaminhará qualquer uma dessas conexões para <bastion-host-public-ip>
, que por sua vez a encaminhará para a porta 5432
on <rds-private-ip>
OPÇÃO # 2: procure por esse recurso no seu cliente de banco de dados
Eu sei que o DBVisualizer suporta isso. Não tenho certeza sobre o Squirrel. Basicamente, em vez de configurar manualmente o encaminhamento de porta local usando o SSH, seu cliente SQL lida com isso para você.