20241204 TIL : AWS Bastion 호스트를 통한 프라이빗 RDS 접속

MCS·2024년 12월 4일

TIL

목록 보기
18/45

오늘 학습한 내용

  • AWS Bastion 호스트를 통한 프라이빗 RDS 접속
    • Bastion 호스트란?
    • 프라이빗 서브넷에 있는 RDS 접속하기
    • 마무리

AWS Bastion 호스트를 통한 프라이빗 RDS 접속

RDS를 보안을 위해 프라이빗 서브넷에 두었다면, 보통 이와 연결된 EC2에서만 접근이 가능하도록 보안 그룹 규칙이 설정되어 있을 것이다.
그러한 경우 로컬에서 DB 데이터를 확인하기 어렵다. 이를 위해 Bastion Host에서 RDS 접근이 가능하도록 설정하는 방법을 알아보았다.

위 이미지는 이전에 진행했던 프로젝트의 인프라 아키텍쳐이다.

Bastion 호스트란?

Bastion은 보루, 요새라는 뜻을 가지고 있다. 위 아키텍쳐를 보면, Web 서버와 Was 서버, DB는 프라이빗 서브넷에 두어 일반적인 방법으로는 외부에서의 접근이 불가능하다. 다만 이 서비스들에 접근을 아예 불가능하게 만들어버리면 관리하는 것이 불가능하므로, 이들에 접근할 수 있는 진입점인 Bastion 호스트를 두고 사용할 수 있다.
위 아키텍쳐는 NAT Gateway를 두어 프라이빗 서브넷에 있는 서비스들이 인터넷에 접근 가능하도록 설정했다. 하지만 NAT Gateway는 프리 티어 대상도 아니고, 비용도 상당히 비싸므로 잘 고려해서 사용하는 것이 권장된다.

프라이빗 서브넷에 있는 RDS 접속하기

VPC, 서브넷, 보안 그룹 등에 대한 설명은 각 프로젝트에 목적에 따라 아키텍쳐 구조가 달라질 수 있기 때문에 최대한 간단하게 짚고 넘어가 보았다.

우선 Bastion Host 역할을 담당한 EC2를 생성한다. 키 파일을 만들어 다운로드 받아놓고, 보안 그룹에서는 22번 포트를 허용해 SSH 접속이 가능하도록 한다. 그리고 탄력적 IP(선택사항)를 부여해 고정 퍼블릭 IP를 만든다.

RDS는 생성할 때 퍼블릭 액세스를 허용하지 않도록 설정하고, private 서브넷을 만들어 서브넷 그룹을 지정한 후 부여한다. 또한 보안 그룹 설정에서 DB 포트에 대해 소스를 앞서 Bastion Host에서 생성했던 보안 그룹 ID를 지정한다.

이렇게 설정되었다면, RDS는 Bastion Host에서의 접근을 제외한 모든 접근이 불가능해진다.

MySQL Workbench로 확인하기

DB 데이터를 GUI로 관리하는 방법에는 여러 가지가 있겠지만, MariaDB를 사용하는 관계로 MySQL Workbench를 사용해 보았다. (HeidiSQL을 사용하거나, IntelliJ Ultimate을 사용중이라면 여기서도 할 수 있다.)

  1. 새로운 Connection을 만든다. Connection Name은 자유롭게 설정하고, Connection Method는 Standard TCP/IP over SSH로 설정한다.
    일반적인 Standard TCP/IP와는 다르게, SSH 관련 설정들이 보인다.

  2. SSH Hostname은 {Bastion Host EC2의 퍼블릭 IP}:22 로 설정한다.

  3. SSH Username은 {Bastion Host EC2 사용자명} 으로 설정한다. 만약 amazon linux를 사용했다면 기본값이 ec2-user일 것이고, 우분투를 사용했다면 ubuntu일 것이다.

  4. SSH Password는 키 파일을 사용할 것이기 때문에 공란이다.

  5. SSH Key File은 EC2를 생성할 때 같이 생성했던 키 파일을 지정한다.

  6. MySQL Hostname은 RDS의 엔드포인트로 설정한다.

  7. MySQL Server Port는 RDS의 포트로 설정한다.

  8. Username은 RDS를 생성할 때 지정했던 RDS의 Username으로 설정한다.

  9. Password는 RDS를 생성할 때 지정했던 RDS의 Password로 설정한다.

  10. Default Schema는 필요에 따라 설정한다.

위 설정 후 Test Connection을 통해 접속이 되는지 확인한다.


성공적으로 접속이 되는 것을 확인했다!

마무리

Bastion Host를 통해 접속 가능하도록 설정했는데, 사실 Bastion Host가 노출된다면 RDS도 위험해 질 수 있는 부분이 있다. 최대한 노출되지 않도록 조심하는 것이 좋을 것 같다.
만약 로컬에서 동작하는 스프링부트 앱에서 RDS에 접근하고자 한다면, SSH 터널링에서 오는 오버헤드가 있기 때문에, EC2 환경에서 직접 DB에 접근하는 것과는 성능에서 어느 정도 차이가 발생할 수 있어 유의해야 한다.

profile
백엔드를 잘 하고 싶은 사람

0개의 댓글