AWS
[RDS] SSH 터널링과 포트 포워딩으로 로컬 Spring RDS 연결
J_Dev
2025. 2. 10. 16:25
개요
- 로컬 환경에서 RDS와 연결하여 테스트해야 하는 상황이 발생하였습니다.
- RDS를 Public으로 개방하면 보안상 큰 위험이 따르므로, 보다 안전한 접근 방식이 필요하였습니다.
- SSH 터널링을 활용하여 EC2를 경유하고, 포트 포워딩을 통해 RDS와 애플리케이션을 안전하게 연결하였습니다.
1.로컬에서 포트 포워딩 설정
1). EC2 접속 테스트
- 포트 포워딩을 설정하기 전에 SSH 터널링에 사용할 EC2 인스턴스에 정상적으로 접속 가능한지 확인합니다.
- EC2 인스턴스의 인바운드 규칙은 SSH 포트(22번) 이 허용되어있어야 합니다.
명령어를 사용하여 EC2에 접속합니다. 접속성공시 아래 이미지와 같이 터미널에 출력됩니다.
ssh -i "<pem key 위치>" ubuntu@<EC2 퍼블릭 IP>
2) 포트포워딩 설정
- 이제 로컬 머신에서 SSH 터널링을 통해 RDS를 EC2를 경유하여 연결합니다.
- 아래와 같이 에러메시지출력이 없으면 연결 성공입니다.
ssh -L 3307:<RDS_ENDPOINT>:3306 -N -f -i "<pem key 위치>" ec2-user@<EC2 퍼블릭 IP>
- 명령어 설명
- L 3307::3306 → 로컬 포트 3307을 RDS의 3306 포트에 연결(로컬PC MySQL 충돌 방지 3307 사용)
- N → SSH 터널링만 실행하고 쉘을 띄우지 않음
- f → 백그라운드에서 실행
- i "<pem key 위치>" → EC2 접속을 위한 SSH 키 파일
- ec2-user@<EC2 퍼블릭 IP> → EC2에 접속하여 RDS로 연결
2. Spring 에서 연결
1) applicatioin.properties 설정
- 포트 포워딩을 완료했으므로 Spring Boot에서 MySQL 연결을 로컬 포트(3307)로 설정합니다.
- 도커 컨테이너로 실행중인경우 URL을
jdbc:mysql://host.docker.internal:3307/
로 설정하여 컨테니어 밖의 localhost와 연결합니다.
spring.datasource.url=jdbc:mysql://localhost:3307/your_database_name
spring.datasource.username=your_db_username
spring.datasource.password=your_db_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
2) 애플리케이션 실행
- 애플리케이션을 실행하면 JDBC, JPA 등의 오류가 발생하지 않아야 정상적으로 연결된 것입니다.
결론
- 이번 포스트에서는 RDS를 Public으로 개방하지 않고도 SSH 터널링을 활용하여 안전하게 접근하는 방법을 알아보았습니다.