kkokkio - 프로젝트/트러블슈팅

DataGrip에서 RDS(MySQL)에 SSH 터널로 안전하게 접속하기

파란배개 2025. 6. 16. 09:29

AWS에서 RDS는 기본적으로 외부에 노출되지 않는다. 특히 Publicly Accessible = false인 RDS에 로컬 개발 환경에서 접속하려면 EC2 인스턴스를 중계로 사용하는 SSH 터널링 방식이 가장 안전하고 일반적인 접근법이다.

문제 개요

로컬에서 DataGrip을 사용하여 Amazon RDS(MySQL)에 접속하려 했지만 다음과 같은 문제에 부딪혔다.

  • 보안 그룹에 내 IP를 허용했음에도 타임아웃 발생
  • RDS 엔드포인트가 내부 VPC 전용으로 설정되어 있음

이 문제를 해결하기 위해 여러 방법을 검토했지만, 결국 EC2를 통한 SSH 터널링으로 해결했다.

왜 직접 접속이 안 되는가?

Amazon RDS는 다음과 같은 보안 정책을 기본으로 한다:

  • Publicly Accessible이 false인 경우 외부에서 직접 접근 불가
  • RDS가 속한 VPC 내 리소스만 접근 가능
  • EC2는 VPC 내부라 접근 가능하지만, 로컬 환경은 외부 인터넷으로 간주됨

즉, VPC 외부에서는 RDS 엔드포인트로 직접 연결할 수 없으며, 내부 자원을 경유해야 한다.

SSH 터널링의 개념 및 설정

SSH 터널링은 다음과 같은 방식으로 동작한다:

  1. 로컬 PC에서 EC2로 SSH 연결을 맺고,
  2. 그 연결을 통해 로컬 포트와 RDS 엔드포인트를 포트 포워딩

터미널에서는 다음 명령어로 실행할 수 있다:

ssh -i your-key.pem -L 3307:<rds-endpoint>:3306 ec2-user@<ec2-public-ip>

이 명령은 "내 PC의 3307 포트 → EC2 → RDS의 3306 포트"로 연결을 만든다. 그러나 DataGrip은 이 과정을 자체적으로 UI를 통해 지원한다.

DataGrip을 통한 접속 구성

1. 사전 조건

  • EC2에 접근 가능한 .pem 키 파일 보유
  • EC2와 RDS는 같은 VPC/Subnet에 있어야 함
  • 보안 그룹 설정:
    • EC2: 포트 22(SSH) 허용 (내 IP)
    • RDS: 포트 3306 허용 (소스로 EC2 보안 그룹 지정)

2. DataGrip 설정 방법

Connection 탭

  • Host: your-db.xxxxxx.rds.amazonaws.com
  • Port: 3306
  • User: MySQL 사용자명
  • Password: MySQL 비밀번호

SSH/SSL 탭

  • Use SSH tunnel 체크
  • Host: EC2 퍼블릭 IP
  • Port: 22
  • User: ec2-user 또는 ubuntu
  • Private key file: ~/.ssh/your-key.pem