AWS RDS - 도메인과 IP 연동 https 적용, MySQL 외부접속

msung99·2022년 10월 17일
0
post-thumbnail

AWS EC2 서버

EC2 인스턴스 생성 및 서버 구축과 관련한 내용은 지난번 포스팅을 참고하면 좋을듯하다.

https://velog.io/@msung99/AWS-EC2-%EC%84%9C%EB%B2%84%EA%B5%AC%EC%B6%95


Domain 적용

  • 가비아라는 사이트에서 내가 원하는 Domain 을 구매했다.
    .com 도메인 대신에 .shop 도메인을 새롭게 만들고 500원에 구매했다.

도메인과 IP 연결하기

레코드 추가를 누르고, IPv4 주소를 값/위치에 복사한다.
레코드는 도메인 이름을 IPV4 주소로 매핑하는 데 사용되는 DNS 레코드 유형으로, 서브 도메인을 여러개 생성하고, 각 서브도메인(ex) www, hi) 별로 ip 연결을 할 수 있다.
( 도메인에 ip에 연결하는 것은 A 레코드를 설정하면 된다)

여기서 호스트에서 @은 도메인 그 자체로 www같은 prefix가 지정되지 않았을 때 사용된다.
예를들어 diary.com 으로 연결할 경우, @ 에 지정된 ip 가 사용된다.

결과적으로 아래처럼 도메인 주소로 접속이 가능해진다.


https (Let's Encrypt) 적용하기

사이트의 보안을 강화시키기 위해서는 HTTP를 HTTPS로 변경하여 줄 필요가 있다.
즉, 클라이언트와 서버가 통신하는 채널을 암호화 채널으로 바꾸어주는 것인데, SSL(TLS) 프로토콜을 사용해서 만들 수 있다.

Let's Encrypt는 사용자에게 무료로 SSL/TLS 인증서를 발급해주는 인증 기관이다.

여기서 제공해주는 'Certbot'이라는 소프트웨어를 설치하여 HTTPS를 발급받고 내 사이트에 적용해볼 것이다.

타사의 인증서의 경우, 1년간 3만원이며, *.example.com 형태의 와일드카드 인증서의 경우 15만원을 호가한다. 하지만, Let's Encrypt를 이용하면 서브 도메인 뿐만 아니라, 하나의 인증서로 모든 서브 도메인에 사용 가능한 와일드카드 인증서도 무료로 발급해준다.

1. CertBot 다운로드

apt 저장소의 Certbot도 있지만, 업데이트가 뜸한 편이므로 Certbot의 Repo를 등록하여 해당 패키지를 다운로드 한다.

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get install python-certbot-nginx

2. SSL 인증서를 적용하여 https 적용하기

$ sudo certbot --nginx -d 자신의도메인

메일 등록과, 약관에 동의하면 기존 http 연결을 어떻게 설정할 것인가에 대한 질문이 나타나게 된다.

1을 입력한다면 http 연결을 https로 자동으로 리다이렉트 하지 않는다.
2를 입력한다면 https 연결을 https 로 자동으로 리다이렉트 한다.

1 또는 2를 입력하고 엔터를 누르면, 구성이 업데이트 되고 Nginx가 재시작된다.

이후 자동으로 등록되며, 3개월뒤에 자동으로 갱신되는 스케쥴도 등록된다.

참고 블로그 : https://syudal.tistory.com/entry/Ubuntu-Nginx-Lets-Encrypt%EB%A1%9C-https-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

EC2 인바운드 규칙 추가하기

ec2 인스턴스의 인바운드 규칙을 추가해줘야한다.
HTTPS에서 사용하는 443번 포트를 열기 위해 HTTPS 유형의 규칙을 추가해준 것이다.

https:// 자신의도메인 으로 들어가면 ssl이 적용된 모습을 볼 수 있다.


Datagrip or Workbench 등으로 Mysql 외부 접속

  • AWS에 MySQL 을 설치했으니, 이를 외부에서도 접속이 가능하게 하는 툴이 있다. Datagrip or Workbench 등이 있는데, 이번에는 Datagrip 를 사용해보겠다.

Datagrip 이란 JetBrains에서 제공하는 데이터베이스 및 SQL용 크로스 플랫폼 IDE이다.

설치는 아래 사이트에서 가능하다.
https://www.jetbrains.com/kokr/datagrip/download/#section=windows

아래와 같이 Test Connection 을 시도했을때 Succeeded 를 확인해야 성공한 것이다. (이와 관련한 트러블슈팅은 아래 내용을 참고하자.)

아래 블로거님의 게시글을 참고하면 좋을듯하다.
외부에서 접속하기 위해선 MySQL 계정이 있어야하며 접근 가능한 권한이 있어야한다. 그리고 AWS EC2 인스턴스(서버)의 규칙을 HTTP, HTTPS, SSH 외에도 MYSQL/Aurora 에 대해서도 포트를 열어줘야 접속 가능하다!
https://luminitworld.tistory.com/82


트러블슈팅

EC2 인스턴스를 생성할때 키페어를 생성하고 pem 파일을 다운받은후, WinSCP 로 EC2 서버에 접근을 하려는데 계속 putty 를 생성할 수가 없었다.

해결방법은 간단했다. putty 를 다운받아서 pem 파일을 putty 파일 형식으로 변환할 수 있게 해줬다.

putty 다운로드 링크 : https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.htm

2) DataGrip으로 MySQL 외부접근 access 거부

EC2 서버에 대해 DataGrip 으로 외부에서 MySQL 에 접근을 하여 DB 를 조작할 수 있게 해주고 싶었는데, 외부에서 접속하기 위해선 MySQL 계정이 있어야하며 접근 가능한 권한이 있어야했다.

해결과정은 아래와 같다.

  1. mysql 새로운 계정생성 및 DB에 대한 모든 접근 권한을 부여
$ sudo mysql -u root -p
mysql> create user 'lumin'@'%' identified by 'password'; // mysql 에 로그인 

mysql> grant all privileges on Lumindb.* to 'lumin'@'%'; // 생성한 데이터베이스에 대한 모든 권한을 부여
mysql> flush privileges;  // 초기화
mysql> show grants for 'lumin'@'%';  // 해당 사용자에 대한 권한을 보여줌
  1. mysql 외부 접속설정
$ cd /etc/mysql/mysql.conf.d
$ sudo vim mysqld.cnf  // mysqld.cnf 을 열고 bind-address 부분을 0.0.0.0 으로 설정해서 외부 접속을 허용해준다.

$ sudo service mysql restart // 변경사항을 적용하기 위해서 mysql을 재시작합니다.

3.EC2 인스턴스 규칙 수정

그리고 AWS EC2 인스턴스(서버)의 규칙을 HTTP, HTTPS, SSH 외에도 MYSQL/Aurora 에 대해서도 아래와 같이 포트를 열어줘야 접근 가능하다!

MYSQL 규칙을 추가하고 위치 무관으로 설정해서 어디서나 접근할 수 있도록 해줬다.

다시 DataGrip에서 EC2의 IP주소에 대한 MySQL 의 외부접근을 시도해보니 해결되었다.

해결에 도움은 받은 글 : https://luminitworld.tistory.com/82

0개의 댓글