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


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.