EC2 HTTPS로 연결하기

Server The SOPT·2022년 7월 21일
29

👾 작성자: 이승헌
🐬 작성자의 한마디: https로 연결은 눈감고 한다

우선 해당 글을 포스팅하기에 앞서 http에서 굳이 https로 연결하는 이유에 대해 이야기해보려 합니다.

HTTP

HTTP는 Hyper Transfer Protocol의 줄임말입니다. 간단하게 표현하자면 서버와 클라이언트가 통신하는데 정해놓은 규약이라고 생각하면 편할 것 같습니다.

HTTP의 안전성

HTTP 통신은 특별한 보안이 존재하지 않습니다. 예를 들어서 어떤 사람이 악의를 가지고 HTTP의 네트워크 신호를 약탈한다면 해당 통신내용이 외부에 드러나게 됩니다. 해당 통신 사용자의 개인정보나 중요한 보안이 그대로 드러나기 때문에 이러한 문제점을 고쳐야겠지요

HTTPS

HTTP는 전송계층의 TCP위에서 동작합니다. 여기서 SSL(Secure Sockets Layer)이라는 보안계층이 전송계층 위에 올라갑니다. HTTPS는 SSL위에 HTTP를 얹어서 보안이 보장된 통신을 하는 프로토콜입니다.

더 자세한 내용은 구글링을 통해서 알아보셔도 좋을 것 같습니다

이제 본격적으로 저희의 서비스를 HTTPS로 연결하는 방법에 대해 알아보도록 하겠습니다.

준비물
1. 도메인 (필자는 가비아를 이용하였습니다) 링크
2. 할 수 있다는 의지

도메인 인증

우선 본인이 구매하거나 무료로 얻은 도메인에 대해 인증을 해야합니다.

AWS에서 Route 53에 접속하여 호스팅 영역 생성을 눌러줍니다.

본인이 얻은 도메인 이름을 입력해줍니다.
다른 설정은 건드리지 않고 호스팅 영역 생성을 눌러줍니다.

호스팅 영역에서 도메인 이름을 클릭해주면 위와 같은 화면이 나옵니다.
레코드 생성 버튼을 누릅니다.

위 사진의 값 부분에 본인의 EC2 퍼블릭 IP를 넣어주면 됩니다.
그 후 레코드 생성 버튼을 누릅니다.

해당 목록의 NS 유형을 보면 4개의 주소가 나와있습니다.
저 같은 경우는 가비아에서 도메인을 구매했으니 가비아 홈페이지에 들어가서 해당 도메인에 4개의 주소를 연결해주면 될 것 같습니다.

가비아 홈페이지에서 My 가비아 -> 본인이 구매한 도메인의 관리버튼 -> 네임서버 설정 버튼 -> 1차 ~ 4차까지 위의 4개의 주소를 순서대로 넣어주시면 됩니다

AWS Certificate Manager

인증서 요청을 눌러줍니다.

따로 건드릴것 없이 다음을 눌러줍니다.

도메인 이름을 입력하는 form에 인증서를 적용할 domain을 입력해줍니다.
저는 프론트엔트, 백엔드에 해당 도메인을 모두 적용할 것이기 때문에 와일드카드인 *를 앞에 붙여주었습니다.

*.(domain 명)

그 후 다른 설정은 건드리지 않고 다음으로 넘어갑니다.

인증서 리스트에서 새로고침 버튼을 눌러주면 검증 대기 중의 상태로 도메인이 표시될 것 입니다.
인증서 아이디를 누르면 우측에 Route53에서 레코드 생성 버튼을 눌러줍니다.

레코드 생성 버튼을 눌러주면 잠시 후 해당 인증서가 발급됨으로 바뀌는 걸 보실 수 있습니다.

Target Group

로드 밸런서에 적용하기 위한 Target Group을 만들어줘야합니다.

EC2 페이지에서 왼쪽 하단의 로드 밸런싱 부분에 대상 그룹을 선택합니다

Create target group 버튼을 눌러줍니다.

target type은 instances를 선택해줍니다.

원하는 타겟 그룹 이름을 입력해줍니다. 여기서 주의할 점은 여기서의 포트 번호는 내가 실행할 서비스의 포트번호입니다 즉 본인이 서버의 포트를 8080번을 사용한다면 80번이아닌 8080번을 넣어주어야 합니다!!

Health checks 부분은 말 그대로 간단한 서버 요청을 보내서 정상작동하는지 확인하는 부분입니다. 관련 api를 굳이 안만들어도 상관없으니 Next를 눌러 넘어가겠습니다.

적용할 인스턴스를 체크하고 아래의 Include as pending below 버튼을 눌러줍니다.
그 후 Create target group 버튼을 눌러 target group을 생성해줍니다.

로드 밸런서

ec2의 로드 밸런서에 들어와서 로드 밸런서 생성 버튼을 눌러줍니다.

맨 왼쪽의 Application Load Balancer버튼을 눌러줍니다.

원하는 로드 밸런서 이름을 적어줍니다. 형식에 벗어나지만 않으면 크게 문제 없습니다.

이 부분에서는 주의할 점이 있습니다. 가용영역을 선택하는 부분인데 본인의 인스턴스의 가용영역이 반드시 포함되어야 합니다.

본인의 ec2 인스턴스의 네트워킹 탭을 누르면 확인할 수 있습니다. (귀찮으시면 그냥 4개 다 선택해도 됩니다.)

보안 그룹은 본인의 인스턴스와 같은 보안 그룹은 사용하시면 됩니다.
(주의: 보안 규칙에 https이 등록되어 있어야합니다.)

가장 핵심인 부분입니다 HTTP, HTTPS 프로토콜 리스너에 위에서 만든 Target Group을 선택해줍니다

그 후 저희가 아까 받은 인증서를 등록해줍니다.
이제 거의 다 왔습니다. 충분히 길었지만 원활한 설명을 위한거니 이해 부탁드립니다.

도메인 설정

마지막입니다!!

Route53으로 돌아가서 도메인 이름을 눌러줍니다.

레코드 생성 버튼을 눌러줍니다.

저는 백엔드 도메인을 위해 앞에 api를 붙여주었습니다. 레코드 유형은 그대로 A로 두시고 별칭 버튼을 눌러서 위와같이 선택해주시고 3번째 줄에 아까 만들어놓은 로드 밸런서를 등록합니다.

이제 포스트맨으로 가셔서
제 기준 https://api.<도메인> 으로 서버 통신을 하시면 잘되는걸 볼 수 있습니다.

긴 글 읽어주셔서 감사합니다.

profile
대학생연합 IT벤처창업 동아리 SOPT 30기 SERVER 파트 기술 블로그입니다.

10개의 댓글

comment-user-thumbnail
2022년 7월 26일

야무져요👍👍👍👍

답글 달기
comment-user-thumbnail
2022년 7월 26일

깔끔한 글 감사합니다. 제가 예전에 로드밸런스로 https 적용하고 1년간 무료로 쓰다가 1년후 부턴 월 20~30불정도가 차지 됐는데 혹시모르니 주의하세요.

답글 달기
comment-user-thumbnail
2022년 7월 28일

도메인 인증 부분에 도메인 노출됐어요.

답글 달기
comment-user-thumbnail
2022년 12월 30일

감사합니다!!

답글 달기
comment-user-thumbnail
2023년 2월 3일

도움 많이 되어서 몇 가지 꿀팁 적어놓습니당 ㅠㅠ
1. 가비아에서 shop으로 하지 마세요.. 인증서 요청이 계속 안 되었습니다ㅠㅠ 그냥 비싸도 com 쓰세요
2. 2023 기준 빠른 레코드 설정에서 마법사로 변환 -> 단순 라우팅 들어가셔야 저 창이 뜹니다..!! 괜히 값에 엔드포인트 넣으라고 계속 그러는데 뭐지? 이러지 않으셔도 돼용

1개의 답글
comment-user-thumbnail
2023년 3월 10일

감사합니다ㅠㅠ

답글 달기
comment-user-thumbnail
2024년 6월 3일

wowowow

답글 달기
comment-user-thumbnail
2024년 10월 18일

안녕하세요. 포스팅 잘 보았습니다!
혹시 프론트와 백엔드를 서로 다른 계정에서 ec2 인스턴스로 호스팅을 하여도 위와 같은 방식으로 적용하면 별개의 인증서를 사용하게 될텐데 상관이 없을까요?

답글 달기
comment-user-thumbnail
2024년 11월 19일

여러 글을 봤는데, 이거 보고 성공했습니다.
정말 감사합니다.

답글 달기