포트 터널링을 사용하여 네트워크 요새를 통해 개인 데이터베이스 인스턴스에 연결하려면 어떻게해야합니까?


12

에 공개적으로 액세스 할 수있는 네트워크 요새 example.compute-1.amazonaws.com와 개인 postgres 데이터베이스 인스턴스가 있습니다.postgres.example.us-east-1.rds.amazonaws.com:5432

나는 요새를 사용하여 요새에 넣을 수 있습니다.

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

그런 다음 요새에 들어가면 ssh 터널을 만듭니다.

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

그런 다음 localhost를 사용하여 요새에서 데이터베이스에 연결하여 터널이 작동하는지 확인할 수 있습니다.

$ psql -p 5432 -h localhost -U postgres

그러나 요새에 있지 않고 데이터베이스에 원격으로 연결할 수 없습니다.

$ 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?

포트 5432에서 인바운드 트래픽을 허용하도록 요새의 보안 그룹을 구성했습니다.

ssh -L올바르게 사용 하고 있습니까? 요새 밖에서 사용해야합니까? 모든 조언을 주시면 감사하겠습니다.

답변:


20

SSH 터널을 만들면 열린 포트가 외부에 노출되지 않습니다. 열린 포트는으로 만 사용할 수 있습니다 localhost. 효과적으로 당신이 한 일은 요새에서 요새까지 터널을 만드는 것입니다.

대신, 요새를 통해 로컬 컴퓨터에서 터널을 만드는 것이 좋습니다.

따라서 로컬 컴퓨터에서 요새까지 연결의 일부로 터널을 만듭니다 . 다른 SSH 연결을 만들 필요가 없습니다.

따라서 로컬에서 다음을 실행합니다.

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

postgres.example.us-east-1.rds.amazonaws.com이 개인 IP 주소로 확인된다고 가정합니다.

그런 다음 여전히 로컬로 서버에 연결하려면 서버가 로컬 인 것처럼 연결하십시오.

$ psql -p 5432 -h localhost -U postgres

이렇게하면 요새에 대한 프롬프트를 사용할 필요가 없습니다.


이것은 나를 위해 일했습니다. 감사합니다! psql 명령을 잊어 버린 사람에게는 내가 잊어 버린 한 가지는 DB 보안 그룹이 요새에서 액세스를 허용하는지 확인하십시오.
Goran

-1

이것은 나를 위해 일했습니다. psql 클라이언트 가 로컬로 설치되어 있는지 확인하십시오 .

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

AWS에서 DB 인스턴스를 생성 할 때 다음을 정의해야합니다.

  1. 사용자 이름
  2. 암호
  3. 데이터베이스 이름
  4. 포트 번호

또한 데이터베이스가있는 VPC에 대한 보안 그룹을 만들어야했습니다. 생성 한 후 DB 인스턴스가 보안 그룹에이 인스턴스를 사용하는지 확인하십시오. 보안 그룹에는 다음 규칙이 있습니다.

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

그래도 요새를 통과하지는 않겠지? RDS에 직접 연결
RhysC

rds 인스턴스가 노출되는 vpc를 통과합니다. 생성시 vpc를 rds 인스턴스에 연결합니다.
timxor

예, 원래 질문은 VPC에서 배스 천 서버를 통과하는 것과 관련이 있다고 생각하므로 RDS 인스턴스가 공개적으로 노출되지 않습니다 (잘 읽습니다)
RhysC

그것은 질문이 아니며 귀하의 대답은 문제 해결에 전혀 도움이되지 않습니다.
Radko Dinev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.