최근 시작하게 된 프로젝트에서 AWS 기반의 인프라 담당을 맡게 됐다.
그 과정에서 보안 상의 이유로 VPN을 설정했고, Public/Private Subnet에 따라 보안 규칙을 잘 지키며 개발하고자 한다.
RDS와 같은 데이터베이스는 보안을 위해 직접 접근할 수 없도록 Private Subnet에 위치해두는 것이 좋다.
하지만 그러면 local에서도 접속할 수 없는 문제가 발생한다.
이를 위한 해결 방법이 SSH 터널링이다.
🔍 SSH 터널링이란?
SSH 터널링은 SSH 연결을 통해 특정 네트워크 트래픽을 안전하게 전달하는 기술으로, 주로 보안이 필요한 경우나 외부에서 직접 접근할 수 없는 서버에 연결할 때 사용한다.
⚙️ Bastion Host(원격 서버)를 통한 SSH 터널링 설정하기
SSH 터널링을 하기 위해서는 Private Subnet에 있는 RDS와 통신할 수 있는 Bastion Host가 필요하다.
이를 위해 Public Subnet에 미리 Bastion Host 서버를 만들어뒀으며, RDS와 통신이 가능한 상태이다. RDS에 접근할 수 있는 서버가 하나 있음을 가정하고 Datagrip에서 SSH 터널링 설정을 진행해보자.
먼저 아래와 같이 + 버튼을 클릭해 연결하고자 하는 DB를 클릭한다.
원하는 DB를 클릭하면 아래와 같은 화면이 뜬다.
먼저 원격 서버를 연결해야 하므로 SSH/SSL를 클릭한다.
이후 화살표에 표시된 버튼을 클릭해 원격 서버 주소를 연결하자.
아래 작성된 값을 제대로 넣어주고 Test Connection을 클릭해 제대로 연결되는지 확인하자.
- Host: 원격 서버 주소
- Username: ec2-user (서버마다 다르다. 필자는 ec2를 이용했으므로 ec2-user이다.)
- Private key file: 키페어 경로 입력
OK를 누르고 아래와 같이 SSH configuration에 설정한 원격 서버를 클릭해준다.
이제 SSH 터널링 설정은 끝났으며, RDS를 연결해주기만 하면 된다.
- Host: RDS 엔드포인트 주소
- Port: RDS의 포트(RDS의 인바운드(보안) 그룹에서 해당 포트에 대해 원격 서버의 IP를 열어줘야한다.)
- User: RDS 생성 시 설정한 유저명
- Password: RDS 생성 시 설정한 패스워드
이후 Test Connection을 누르면 아래와 같이 성공적으로 RDS가 연결된 것을 확인할 수 있다.