AWS - https

hamingu·2021년 7월 14일
2
post-thumbnail

1차 프로젝트 리팩토링에 들어가며..
기업협업에서 소셜로그인 및 토큰 생성에 대해 진행하며 토큰을 보다 안전하게 그리고 효율적으로 관리하는 방법에 대해 고민했다.
그 후 현재 1차 프로젝트 리팩토링... 정말 access token하나 달랑 만들어서 만료시간 등에 대한 개념없이 그냥 로그인 유지 정도로만 사용되어있는 코드를 보며 경악을 금치 못했다.🤦‍♂️
이 부분에 대한 리팩토링이 시급하다고 생각하며, 같이 1차 프로젝트를 진행했고 리팩토링도 함께 진행 중인 프론트 동기 유진님과 함께 우선 refresh token을 안전하게 관리하기 위해 https 환경으로 배포를 하고 도메인을 연결하는 작업을 진행하고자 했다.

💣 본 블로그 글인 도메인을 연결하여 https 배포를 진행하는 데에 있어서 느낀 점과 얻은 정보를 서술한 글입니다. https 배포를 위해 순서와 방법이 정리된 글을 원하시는 분은 뒤로가기 ㅠㅠ

https 배포~

왜 https를 써야할 까? 아주 간략하게만 설명하자면 보안성의 문제이다.
https는 Hypertext Transfer Protocol Secure의 약자인데 http는 여기서 Secure 부분이 빠진 약자이다.

http를 사용할 때에는 서버에서 브라우저로 전송하는 정보가 암호화되지 않는 치명적인 단점이 존재하고 정보가 암호화되지 않았다면.. 도난의 위험이 크다.

반대로 https를 사용하면 ssl을 이용해 이 문제를 해결할 수 있는데 SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버 브라우저가 민감한 정보를 주고받을 때 이것이 도난당하는 것을 막아준다.

바로 우린 이 특징을 이용해 refreshtoken을 httponly 쿠키로 보관하여 탈취당할 위험을 보다 줄이는데에 초점을 맞출 것이다.

DNS 도메인 등록

DNS는 도메인 네임 서버의 약자이다.

DNS가 해주는 역할은 우리가 생성한 도메인이 실제 주소인 IP와 매칭할 수 있도록 도와준다

ROUTE 53의 호스팅 영역에서 호스팅을 생성하면 네임서버가 존재하게 되는데
이 네임 서버를 도메인에 등록해주면 연결이 완료된다.

도메인 자체를 route 53으로 생성하게 되면 도메인 생성 때인지 인증서 생성 때인지 이 호스팅을 자동으로 도메인에 맞게 생성하고 연결해주는걸 클릭 한 번으로 지원해준다.
어느 단계인지 사실 잘 기억이 나지 않는다..;

SSL 인증서

https는 ssl을 이용해 보안을 강화할 수 있다고 설명했다. 그렇다면 ssl 인증서는 https 배포를 위한 필수 조건이라고 받아들일 수 있겠다.

AWS EC2 인스턴스가 정상 실행 중이라고 가정한 후 ssl 인증서를 얻기위해

AWS ROUTE 53에서 도메인을 구매하였다.(ㅠㅠ 비싸다.. 도메인 없이 퍼블릭 ip를 바로 인증서와 연결하여 사용할 수는 없을까?? 알아봐야겠다.)

AWS의 Certificate Manager로 진입하면 SSL 인증서를 만들 수 있는데 여기서 설정해야 하는 부분이 있다.

  1. 공인 인증서이냐 사설 인증서이냐?
  2. 도메인 추가
  3. 검증방법 선택(나는 DNS로 했다 왜냐? DNS로 ec2 인스턴스와 도메인을 연결했으니까!)
  4. 그 후 쭉 확인 또는 다음을 누르면 인증서가 완성된다. 그 후 인증서를 살펴보면 인증서의 이름, 유형, 값이 있다.

위 과정을 진행한 후 인증서의 이름, 유형, 값을 route 53의 호스팅 생성에 들어가 각 필요한 위치에 넣어주면 인증서 발급이 최종적으로 완성된다.

로드밸런서 활용

로드밸런서를 처음 접할 때는 서버에 부하가 생기지 않도록 로드밸런서가 클라이언트 요청을 여러 서버에 적절히 분산시켜주는 역할로 알고 있었다.

그리고 현재 여기서 로드밸런서는 http요청을 https로 리다이렉트 해주는 역할을 하는 듯하다.
로드밸런서 등록으로 가서 로드밸런서에 아까 https 활용을 위해 만든 ssl인증서와 그리고 어떤 서버인지 즉 어떤 ec2 인스턴스인지를 연결시켜준다.

호스팅 영역에 로드밸런서 정보 등록

호스팅 영역의 네임서버를 도메인에 등록해 실제 IP 주소와 매칭 시켜줄 수 있도록 세팅을 했다(저 위에서)
이제 도메인 입력 시 어떤 요청이 들어갈지를 설정해주는 작업이 남아있다.

호스팅 영역에서 레코드 생성을 들어가면 도메인 이름을 설정하는 칸이 있다.
내가 구매한 xxxxx.com은 디폴트 값으로 있고 xxxxx앞에 식별할 수 있는 문자를 더 넣는 작업이다.
예를들어 www.xxxxx.com 처럼.
이렇게 등록해준 후 값, 라우팅 대상 즉 이 도메인을 입력하면 어떤 값으로 라우팅 되는지를 설정한다.
우린 EC2 인스턴스 서버로 요청을 보내야하고 이 인스턴스 서버는 https가 활용되어야 한다.
https인증서와 인스턴스 서버가 잘 매칭된 로드밸런서를 값으로 지정해주면 끝~

사실 이런식으로 블로그 정리하는거에 굉장한 환멸감을 느낀다.
순서도 제대로 정리하고 싶고 내가 이해한 정확한 뜻과 목적등을 자세히 서술하고 싶으나 까먹기 전에 큰 틀로만 주저리 주저리 떠들었다.(그리고 잘 연결된 도메인이 갑자기 연결이 안된다는...) 추가로 내 프로젝트의 경우 8000포트로만 접근이 가능한데 ec2에서는 80포트로 접근이 된다. 80포트로 오는 요청을 8000포트로 리다이렉트 하는 포트포워딩 작업도 필요하다. 전체적으로 본 블로그 글인 아주 처음부터 하나하나 다 수정될 예정이다

profile
프로그래밍구

0개의 댓글