티스토리 뷰

내용 순서

  1. 상황 설명
  2. MySQL 설정
  3. Private Server의 ACG 수정
  4. 워크벤치에서 커넥션 생성
  5. 워크벤치에서 마주쳤던 문제들
  6. 마무리

 


1. 상황 설명

NAT 게이트웨이 삭제

 

VPC 환경에 Public Subnet과 Private Subnet을 생성했고, NAT 게이트웨이를 사용하여 Private 서버에 데이터베이스를 설치한 후 현재는 NAT 게이트웨이를 삭제한 상태입니다.

 

MySQL GUI 프로그램인 워크벤치를 사용해서 Private 서버에 있는 데이터베이스에 접속하기 위해선 SSH 터널링이 필요합니다. 이 글은 SSH 터널링에 대해 기술합니다.

 

 

 

2. MySQL 설정

netstat -ltunp

 

현재 Private 서버에서 MySQL의 로컬 어드레스가 127.0.0.1으로 바인딩되어 있습니다. 즉, 로컬에서만 MySQL에 접속할 수 있다는 의미입니다. 외부에서 MySQL에 접속하려면 로컬 어드레스를 0.0.0.0으로 변경해줘야 합니다.

 

MySQL 설정 파일 : bind-address

 

서버 종류와 버전에 따라 다르지만, /etc/mysql 어딘가에 MySQL 설정 파일이 있을 겁니다. 저는 /etc/mysql/mysql.conf.d/mysqld.cnf이 설정 파일의 경로입니다.

위 캡처본처럼 기존 127.0.0.1은 주석 처리하고, 0.0.0.0을 새로 작성했습니다.

 

service mysql restart

 

설정 파일을 수정했으므로, MySQL을 restart 해서 변경된 내용이 반영되도록 해줍니다.

 

netsta -ltunp

 

이제 다시 처음의 netstat으로 MySQL의 로컬 어드레스를 확인하면 0.0.0.0으로 바뀐 걸 볼 수 있습니다.

 

 

 

3. Private Server의 ACG 수정

Private Server의 ACG

처음에 ACG를 생성할 땐 Public Subnet이 22 포트로만 접근할 수 있도록 했습니다. 이제 Public Subnet에서 3306 포트로도 접근할 수 있도록 3306을 추가합니다.

 

 

 

4. 워크벤치에서 커넥션 생성

MySQL Workbench Setup New Connection

 

  • Connection Method: Standard TCP/IP over SSH
  • SSH Hostname: Public 서버의 공인 IP
  • SSH Username: root (혹은 따로 생성한 유저의 이름)
  • SSH Password: Public 서버의 비밀번호
  • SSH Key File: 생략 (Public 서버의 인증키)
  • MySQL Hostname: Private 서버의 사설 IP
  • MySQL Server Port: 3306
  • Username: MySQL의 사용자 이름
  • Password: MySQL 비밀번호

 

MySQL Connection 성공

 

성공적으로 커넥션이 생성되었습니다 :)

 

 

 

5. 워크벤치에서 마주쳤던 문제들

  • SSH Key File - 인증 실패

SSH Key File 사용 시 인증 실패

 

원래는 SSH Password나 SSH Key File 두 개 중에 한 개만 사용해도 되는 것 같습니다. 그러나 인증키를 등록하면, 비밀번호를 입력하든 말든 계속 인증 실패, 접속 거부 경고가 뜨더라고요... 좀 찾아보니까, 인증키가 RSA가 아닐 경우엔 인증에 실패한다던데... 자세히는 모르겠습니다.

SSH Key File 없이 SSH Password만 사용하니 SSH 연결에 성공했습니다.

 

 

  • 로컬 어드레스 입력 - MySQL 접속 실패

데이터베이스 서버 접속 불가

 

위 문제를 해결해서 Public 서버에 접속했지만, Private 서버의 MySQL에는 접속을 할 수 없는 문제를 마주했습니다. 이유는 MySQL Hostname에 Private 서버의 사설 IP가 아니라, 가장 처음에 설정했던 MySQL의 로컬 어드레스 0.0.0.0을 입력했기 때문입니다. 사실 무엇이 문제인지 몰라서 꽤 헤맸는데요.

 

 

Public 서버의 로그를 확인하니 3306 포트로의 접속 실패 오류가 보입니다.

방금 워크벤치 팝업에서는 별 생각이 없었는데, 로그에서 확인하니 Private 서버에 있는 데이터베이스에 접속하는 데 0.0.0.0을 사용하는 게 이질적으로 보였습니다. 그래서 Private 서버의 사설 IP로 변경했더니, 잘 연결되더라고요 :)

 

 

 

6. 마무리

(좌) 워크벤치에서 생성한 테이블, (우) Private Server에서의 생성된 테이블 확인

 

이제 워크벤치로 편안하게 데이터베이스를 조작할 수 있게 됐습니다 :)

 

참고로, SSH와 데이터베이스 포트 번호는 디폴트 대신 새로 설정하는 것이 보안상 안전합니다.

728x90