Come posso utilizzare il tunneling delle porte per connettermi a un'istanza di database privato tramite un bastione di rete?


12

Ho un bastione di rete che è accessibile pubblicamente su example.compute-1.amazonaws.come un'istanza di database postgres privata supostgres.example.us-east-1.rds.amazonaws.com:5432

Posso usare ssh nel bastione usando

$ ssh -i key.pem ec2-user@example.compute-1.amazonaws.com

Quindi una volta che sono nel bastione creo un tunnel ssh con:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

Posso quindi verificare che il tunnel funzioni collegandosi al database dal bastione utilizzando localhost:

$ psql -p 5432 -h localhost -U postgres

Tuttavia, non riesco a collegarmi al database da remoto (senza essere nel bastione).

$ psql -p 5432 -h example.compute-1.amazonaws.com -U postgres
psql: could not connect to server: Connection refused
Is the server running on host "example.compute-1.amazonaws.com" () and accepting
TCP/IP connections on port 5432?

Ho configurato il gruppo di sicurezza del bastione per accettare il traffico in entrata sulla porta 5432.

Sto usando ssh -Lcorrettamente? Dovrei usarlo al di fuori del bastione? Qualsiasi consiglio sarebbe molto apprezzato.

Risposte:


20

Quando si crea un tunnel SSH, non espone la porta aperta al mondo esterno. La porta aperta, è disponibile solo come localhost. Così efficacemente quello che hai fatto è creare un tunnel dal tuo bastione, al tuo bastione.

Invece, quello che vuoi fare è creare un tunnel dal tuo computer locale attraverso il tuo bastione.

Quindi, crei il tunnel come parte della tua connessione dal tuo computer locale al tuo bastione . Non è necessario creare un'altra connessione SSH.

Quindi, localmente, eseguiresti:

$ ssh -i key.pem -L 5432:postgres.example.us-east-1.rds.amazonaws.com:5432 ec2-user@example.compute-1.amazonaws.com

Supponendo che postgres.example.us-east-1.rds.amazonaws.com si risolva nell'indirizzo IP privato.

Quindi per connetterti al tuo server, sempre localmente, connettiti come se il server fosse locale:

$ psql -p 5432 -h localhost -U postgres

In questo modo, non è necessario utilizzare un prompt sul bastione.


Questo ha funzionato per me, grazie! L'unica cosa che ho dimenticato per chiunque abbia il comando psql si blocca lì: assicurati che il tuo gruppo di sicurezza db consenta l'accesso dal bastione.
Goran,

-1

Questo ha funzionato per me. Assicurati di avere il client psql installato localmente.

psql --host=myAwsDbEndpointUrl.ciqykqusf0nv.us-west-1.rds.amazonaws.com --port=5432 --username=myUserName --password --dbname=myDbName

Quando crei la tua istanza db su aws, assicurati di definire quanto segue:

  1. nome utente
  2. parola d'ordine
  3. nome del database
  4. numero di porta

Ho anche dovuto creare un gruppo di sicurezza per il VPC in cui si trovava il database. Dopo averlo creato, assicurati che la tua istanza db lo usi per il suo gruppo di sicurezza. Il gruppo di sicurezza ha le seguenti regole:

inbound--> type:PostgreSQL, protocol:TCP port range:5432, source:0.0.0.0/0

outbound--> type:All Traffic, protocol:All, port range:all, destination:0.0.0.0/0

Non sta attraversando un bastione, giusto? Ti stai appena collegando direttamente a RDS
RhysC il

Passa attraverso un vpc attraverso il quale viene mostrata l'istanza rds. Alleghi il vpc all'istanza rds al momento della creazione.
timxor,

Sì, penso che la domanda originale riguardasse il passaggio attraverso un server bastione nel VPC, quindi l'istanza RDS non è esposta pubblicamente (bene, ecco come l'ho letta)
RhysC,

Non era questa la domanda e la tua risposta non aiuta affatto a risolvere il problema.
Radko Dinev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.