이 문서는 '퍼블릭 액세스'가 비활성화된 AWS RDS 인스턴스에 로컬 데이터베이스 클라이언트(DBeaver, pgAdmin 등)를 안전하게 연결하는 방법을 설명한다. 이 방법은 특히 AWS 프리티어 사용자가 예상치 못한 과금을 피하면서도 편리하게 데이터베이스에 접근하기 위해 필수적이다.
AWS RDS 인스턴스에서 '퍼블릭 액세스'를 허용하면 외부 호스트에서 직접 연결할 수 있어 편리하다. 하지만 최근 AWS 정책 변경으로 인해, 사용 중인 모든 퍼블릭 IPv4 주소에 대해 요금이 부과되기 시작했다.
AWS 프리티어는 한 달에 750시간의 퍼블릭 IPv4 주소 사용량을 무료로 제공한다. 이는 대략 퍼블릭 IP를 사용하는 서비스 1개를 한 달 내내 운영할 수 있는 시간이다. 만약 퍼블릭 IP를 가진 EC2 인스턴스와 '퍼블릭 액세스'가 켜진 RDS 인스턴스를 동시에 운영한다면, 총 2개의 퍼블릭 IPv4 주소를 사용하게 된다. 이 경우 프리티어 제공량이 2배로 빠르게 소진되어 예상치 못한 과금이 발생할 수 있다.
따라서 프리티어 혜택 내에서 비용을 관리하려면 RDS의 퍼블릭 액세스를 비허용하여 퍼블릭 IPv4 주소가 할당되지 않도록 설정해야 한다.
RDS의 퍼블릭 액세스를 비활성화하면 불필요한 과금을 막고 데이터베이스를 인터넷으로부터 격리하여 보안을 강화할 수 있다. 하지만 이로 인해 DBeaver나 pgAdmin 같은 로컬 클라이언트에서의 직접 접속이 차단되어, 테이블을 확인하거나 데이터베이스를 관리하는 데 어려움이 생긴다.
이 문제의 해결책은 SSH 터널링을 이용하는 것이다. EC2 인스턴스와 RDS 인스턴스는 동일한 VPC에 속해 있어 서로 간에 비공개적으로 통신할 수 있다는 점을 활용한다.
EC2 인스턴스가 안전한 게이트웨이, 즉 '중계 서버(Jump Host)' 역할을 하는 것이다. 로컬 클라이언트(DBeaver)는 EC2 인스턴스까지 암호화된 SSH 연결을 생성하고, EC2 인스턴스는 그 연결을 받아 RDS 인스턴스로 대신 전달해준다. 이 과정은 마치 직접 연결하는 것처럼 느껴지지만, 실제로는 EC2를 통해 안전하게 우회 접속하는 방식이다.
- EC2 인스턴스의 퍼블릭(공인) IP 주소
- EC2 인스턴스 접속용 SSH 키 페어 파일 (
.pem) - EC2 접속 사용자 이름 (예:
ubuntu,ec2-user) - RDS 엔드포인트 주소 (예:
...rds.amazonaws.com)
-
새 데이터베이스 연결 창 열기: DBeaver에서 새 데이터베이스 연결을 클릭한 뒤, PostgreSQL을 선택한다.
-
SSH 설정: 하단 이미지처럼
+SSH, SSL, ...버튼을 클릭하고 SSH을 선택한다. 그럼 새롭게 SSH 탭이 추가된다.
-
SSH 탭 설정:
- [SSH] 탭을 클릭한다.
- Host/IP: EC2 인스턴스의 퍼블릭 IP 주소를 입력한다.
- User Name: EC2 접속 사용자 이름(예:
ubuntu)을 입력한다. - Authentication Method: Public Key를 선택한다.
- Private Key: "찾아보기"를 클릭하여 해당 EC2 접속용
.pem키 파일을 선택한다.
-
Main 탭 설정:
- Host/IP: RDS 인스턴스의 엔드포인트를 입력한다.
- Database: 연결하고자하는 데이터베이스의 이름을 입력한다.
- Username: RDS 생성시 입력했던 사용자이름을 입력한다.
- Password: RDS 생성시 입력했던 비밀번호를 입력한다.