[AWS - EC2] 포트번호 없이 접속, MySQL외부접속 - Final Project

조상래·2021년 5월 10일
0

코드스테이츠

목록 보기
71/73

이번 N행시의 밤 프로젝트를 진행 하면서 EC2로 서버를 배포하고 RDS를 사용하지 않고 EC2 내부에 MySQL을 사용하기로했다. 정석으론 RDS를 사용해서 데이터베이스의 안정성을 높이는게 좋지만 개발 단계에서 MySQL을 사용했고, 완성도가 높아지면 RDS를 사용하자고 말을 맞췄다.

1. EC2 서버 포트번호 없이 접속

참고로 인스턴스의 운영체제는 우분투이다.

EC2로 개방한 서버에 접속하려면 복잡한 주소 뒤에 포트번호를 붙여줘야 할 것이다. 여간 귀찮은 일이 아닐 수가 없다. 참고로 도메인을 이용해도 포트번호를 붙여줘야 할텐데 이 부분을 해결해보자. (인바운드 규칙 설정은 필수이다.)

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

iptables라는 명령어를 사용하면 된다. PREROUTING을 설정해주는 것이다. 80번 포트(http)로 접근을 했을 때 8080포트(서버를 열 때 사용한 포트)로 보내라는 것.

$ sudo iptables -t nat -L

위의 명령어로 상태를 확인해볼 수 있다.

만약 잘못 설정하였다면 아래의 명령어로 초기화 해줄 수 있다.

$ sudo iptables -F -t nat

2. EC2인스턴스 MySQL 외부접속

임의로 데이터베이스를 수정하거나 확인할 때 GUI 사용하지않고 쌩으로 쿼리문을 쳐서 확인하고 수정했었다. 너무 불편하고 힘들어 외부에서 GUI로 접속할 수 있는 방법이 없을까 하고 찾아 봤는데 있었다.

먼저 해줘야할 것은 인바운드 규칙을 공개로 돌려놓는 것. MySQL은 기본적으로 3306포트를 사용한다.

1) 인스턴스 내에서 외부접속 허용

$ vim(또는 vi) /etc/mysql/mysql.conf.d/mysqld.cnf

위의 명령어로 mysqld.cnf를 vim(vi)편집기로 열어준다.

그리고 3 2 쉬프트 G 를 순서대로 눌러(편집기 단축키) 32번째 줄로 간다.

bind-address 를 0.0.0.0 으로 바꾸어 퍼블릭으로 전환한다.

2) MySQL 외부 접속 유저만들기

먼저 루트 계정으로 MySQL에 접속한다. 그리고 외부 접근이 가능한 유저를 만들 것이다. 유저를 따로 만드는 것은 루트 계정에 외부 접근이 가능하게 설정해두는 것은 매우 위험한 행동인 것이기 때문이다.

mysql> CREATE USER '유저이름'@'%' IDENTIFIED BY '비밀번호';

위의 명령어로 유저를 만들어 주자. %는 와일드카드로 모든 아이피에서 접근 가능하게 한다는 뜻이다.

그리고 만들어진 유저에 권한을 주면 된다.

mysql> GRANT ALL PRIVILEGES ON *.* TO '유저이름'@'%' WITH GRANT OPTION;

grant 명령어를 사용하는 것인데 외부 접속이 가능하도록 만드는 것이다.

2-1) MySQL 유저 정보 확인하기

mysql> USE mysql;

mysql 데이터베이스를 선택한다.

mysql> SELECT host, user, authentication_string FROM user;

위의 명령어로 유저를 조회해볼 수 있는데 authentication_string은 패스워드이다. MySQL 5.7부터 바뀌었다고 한다.

난 publiceTest라는 유저로 만들었고 %로 외부접속을 허용하였다. 그렇다면 localhost라고 되어있는 것은 localhost에서만 접속할 수 있다는 것을 알 수 있을것이다.

3) GUI에서 연결 설정

(DBeaver를 기준으로 설명)

MySQL을 선택하여 연결을 해보자.

순서대로 필요한 정보를 기입하고. Test Connection을 눌러 연결 테스트를 해보자.

위와 같은 에러가 난다면,

Driver properties를 눌러 allowPublicKeyRetrieval을 true로 바꿔준다. 그리고 다시 연결 테스트를 해보았을 때

위와 같이 뜬다면 성공이다.

여기서 참고할 것은 DBeaver 외의 다른 GUI는 ssh 접속을 이용하는 것으로 EC2 인증서를 인증하는 절차가 있는 것으로 알고있다.

profile
Codestates Full IM26기 수료

0개의 댓글