Session Manager Port forwarding을 사용해서, Private Subnet에 있는 RDS에 액세스 하는 방법

Session Manager Port forwarding을 사용해서, Private Subnet에 있는 RDS에 액세스 하는 방법을 정리해 봤습니다.
2023.02.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Session Manager Port forwarding을 사용해서, Private Subnet에 있는 RDS에 액세스 하는 방법을 정리해 봤습니다.

하고 싶은 것

이번 블로그에서는 Private Subnet에 있는 EC2에 포트 포워딩을 한 다음, Postgre Client로 RDS에 접속해 보도록 하겠습니다.

RDS의 경우 PostgreSQL을 사용했고, 접속을 위해 postgres client는 pgAdmin을 사용했습니다.

보안 그룹 설정

먼저 EC2의 보안 그룹은 다음과 같습니다.

이번 테스트에서는 직접 EC2 인스턴스로 접근하지 않기 때문에, 따로 보안 그룹 설정은 필요하지 않습니다. 그렇기 때문에 실제로 존재하지 않는 1.2.3.4/32 라는 IP 주소를 설정했습니다.

RDS이 보안 그룹은 다음과 같습니다.

EC2 인스턴스로 포트 포워딩을 한 다음, RDS에 접근할 생각이기 때문에, EC2의 보안 그룹을 추가해줍니다.

포트 포워딩으로 RDS에 접근

먼저 포트 포워딩을 하기에 앞서, 다음 정보가 필요합니다.

  • EC2 인스턴스 ID
  • RDS 엔드포인트
  • 마스터 사용자 이름
  • 초기 DB 이름

그리고 로컬 PC에서 AWS CLI를 이용해서 포트 포워딩을 실시해야하기 때문에, AWS CLI를 설치하고 설정을 해야합니다.

AWS CLI에 관해서는 아래 블로그를 참고해 주세요.

aws ssm start-session \
--target 인스턴스ID \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["RDS 엔드포인트"],"portNumber":["5432"], "localPortNumber":["13306"]}'

다음 명령어로 포트 포워딩을 합니다.

포트 포워딩을 실행한 다음 CMD화면은 다음과 같습니다.

해당 멸령어의 경우 로컬 포트 ​​13306에 액세스하면 EC2 인스턴스를 통해 RDS의 5432 포트로 전달됩니다.

이제 postgres client인 pgAdmin를 통해서 RDS에 접근해 보도록 하겠습니다.

RDS에 접근 하기 위한 pgAdmin에서의 설정은 다음과 같습니다.

  • Host name : localhost
  • Port : 13306
  • Maintenance database : 초기 데이터베이스 명 or 접근할 데이터베이스 명
  • Username : 마스터 사용자 이름

pgAdmin의 설정이 끝난 뒤, RDS로 접근해 보면, 포트 포워딩을 실시한 CMD창에서는 연결을 수락했다는 메시지가 나타납니다.

마지막으로 pgAdmin에서도 문제 없이 해당 데이터베이스로 접근 한 것을 확인할 수 있습니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !