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 터널링을 활용하여 안전하게 접근하는 방법을 알아보았습니다.