Session Manager 포트 포워딩을 통해 Private RDS GUI 환경으로 접속하기
Session Manager 포트 포워딩을 통해 Private RDS GUI 환경으로 접속하기
시작하며
Private RDS를 접속하기 위해 EC2(Bastion Host)를 이용 하여 SSH Tunnel 방식으로 접근 하는 방식을 항상 이용 해왔습니다.
하지만, 현재 프로젝트에서 EC2(Bastion Host)없이 Session Manager를 통해 내부 망 인스턴스에 접근 하고 있습니다.
결론적으로 Bastion Host를 이용한 터널링 방식과 다를 바 없지만 터널링 방식이 아닌 포트포워딩 방식을 처음 경험 해보면서 GUI에 어떻게 접근 했는지에 대한 내용을 공유합니다.
이 글을 읽는 예상 독자는 Private RDS를 Workbench, JetBrains의 Data Console 또는 Grip과 같은 GUI 환경으로 접속 하고 싶은 개발자 입니다.
Private RDS의 Security Group에서 Inbound Rule이 접근 가능한 인스턴스로 설정 되어 있다고 가정합니다.

Security group — Inbound Rules
Private RDS를 GUI로 접근 하는 두 가지 방식
- SSH Tunnel
해당 아티클에서 터널링을 통한 접속 방식을 설명 하는것이 목적이 아니기 때문에 간략한 설명만 작성 되었습니다.
자세한 접속 방식은 해당 블로그를 읽어 보시기 바랍니다.
SSH Tunel은 암호화된 SSH 연결을 통해 다른 네트워크 프로토콜의 트래픽을 안전하게 전송하는 방법입니다.
JetBrains를 이용 하는 개발자는 Data Console View를 통해 쉽게 외부 데이터베이스를 GUI 환경으로 접근 하여 그리드 형태의 데이터를 확인 할 수 있습니다.

위 그림 처럼 터널 출발지 인스턴스를 입력 한 뒤 데이터베이스 정보를 입력 하게 되면 손 쉽게 접근 할 수 있습니다.
2. Port Forwarding
포트 포워딩은 네트워크 트래픽을 특정 포트에서 다른 포트나 다른 IP 주소로 리다이렉션하는 기술입니다.
Session Manager를 사용하는 경우, AWS Systems Manager의 포트 포워딩 기능을 활용하여 Private RDS에 안전하게 접근할 수 있습니다.
방법은 매우 간단 합니다.
우선, Bastion Host가 없는 분들은 RDS에 접근 하기 위한 내부 망 인스턴스가 필요합니다.
저는 이전 아티클에서 사용 하고 있는 NAT-Instance 를 활용 하여 RDS로 접근 하도록 하겠습니다.
- 아래 AWS CLI를 활용 하여 명령어를 작성 합니다.
aws ssm start-session \
--target "Instance ID" \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["RDS Endpoint"],"portNumber": ["5432"], "localPortNumber":["12251"]}'

이렇게 “Waiting for connections…” 가 출력되며 콘솔이 유지 되고 있다면 정상입니다.
2. GUI 환경 접속 준비
“Pycharm — database — data source” 로 접근 하여 프로젝트에 해당하는 데이터베이스를 선택 하고, 아래와 같이 정보를 입력합니다.
- Host: localhost
- Port: 포트 포워딩 시 입력한 local port number
- User: 데이터베이스 접속 계정
- Password: 데이터베이스 접속 비밀번호
- Database: 접근 할 데이터베이스 명

그 후, Query Console을 열어 쿼리를 날려보거나 Database Refresh를 클릭 하면 커넥션이 정상적으로 연결 되었다는 화면이 나타납니다.

이렇게 접속 한 DB는 로컬 환경에서 자유롭게 접근이 가능한 장점이 있어 편리합니다.
하지만, Bastion Host 없이 자유롭게 접근 할 수 있는 방법이 아니기 때문에 터널링 방식과 비슷한 원리로 포트 포워딩을 거칠 인스턴스가 필요하다는 단점이 존재합니다.
그리고 Session Manager Configuration에서 설정 되어 있는 Session Timeout 시간이 지나면 Session Closed 되오니 시간을 길게 설정 하시거나, 연결이 끊겼을 시 쉽게 다시 접근 할 수 있도록 Script로 관리하는 것을 추천드립니다.
감사합니다.