AWS EC2 환경에서 데이터베이스(PostgreSQL, MySQL 등)는 보통 보안상의 이유로 퍼블릭 접근을 막고 VPC 내부에서만 접근 가능하도록 구성합니다.
이때, 개발자나 운영 담당자가 사내 네트워크(로컬 PC)에서 안전하게 DB에 접속하려면 SSH 포트포워딩(터널링) 방식을 활용하는 것이 가장 간편하고 안전한 방법입니다.
1️⃣ 준비사항
항목설명
| EC2 인스턴스 | DB가 설치되어 있는 서버 (또는 DB에 접근 가능한 Bastion 서버) |
| PEM 키 파일 | AWS EC2 접속용 개인키 (예: mykey.pem) |
| 보안그룹 | EC2의 SSH(22번 포트)는 회사 IP만 허용되어 있어야 함 |
| DB 클라이언트 | psql, DBeaver, TablePlus 등 DB 접속 도구 |
2️⃣ SSH 포트포워딩 원리
SSH 클라이언트가 로컬 포트와 EC2 서버 포트 사이에 암호화된 통신 터널을 생성합니다.
[로컬 PC] ←(암호화 터널:SSH)→ [EC2 서버] → [DB 서버(Localhost:5432)]
즉, 로컬 PC에서 localhost:5433 으로 접속하면, 실제로는 EC2의 localhost:5432 (PostgreSQL 등)에 접속하는 효과가 납니다.
3️⃣ 실행 명령 예시 (PostgreSQL 기준)
ssh -i ~/mykey.pem -L 5433:localhost:5432 ec2-user@<EC2_Public_IP>
옵션설명
| -i ~/mykey.pem | 개인키 경로 지정 |
| -L 5433:localhost:5432 | 로컬의 5433 포트를 EC2 내부의 5432 포트로 연결 |
| ec2-user@<EC2_Public_IP> | 접속 대상 EC2의 사용자와 공인 IP |
✅ 이 명령을 실행한 터미널은 SSH 세션이 열린 상태로 유지되어야 합니다.
세션이 끊기면 포트포워딩도 함께 종료됩니다.
4️⃣ DB 클라이언트에서 접속
SSH 터널이 열린 상태에서 DB 클라이언트를 다음과 같이 설정합니다.
항목값
| Host | localhost |
| Port | 5433 |
| User | postgres (또는 DB 계정명) |
| Password | DB 비밀번호 |
| Database | 접속할 DB명 (예: appdb, vwstest 등) |
5️⃣ 연결 확인
터미널에서 직접 psql로 접속해도 됩니다.
psql -h localhost -p 5433 -U postgres -d vwstest
정상적으로 접속되면, 포트포워딩이 성공적으로 작동하고 있는 것입니다.
6️⃣ 보안 팁
- PEM 키는 외부 유출이 절대 금지이며, 파일 권한을 600으로 설정하세요.
-
chmod 600 ~/mykey.pem
- DB 보안그룹에서는 외부 접근(0.0.0.0/0) 을 모두 차단하고,
EC2 내부 또는 Bastion 서버 IP 만 허용하세요. - 필요 시 autossh 나 ProxyCommand 를 이용해 포트포워딩 자동화를 설정할 수 있습니다.
✨ 마무리
이 방식은 별도의 VPN 없이도 AWS EC2의 SSH 터널을 활용하여
DB에 암호화된 통신 경로로 접속할 수 있는 안전한 방법입니다.
공용망을 통하지 않고 내부적으로만 접근이 가능하므로,
보안성과 편의성을 모두 확보할 수 있습니다.



