[배포] EC2 인스턴스에 HTTPS 적용하기 (with Route53, ALB)

이진규·2023년 3월 31일
2
post-thumbnail

0. HTTPS 적용 이유

0-1 HTTP

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

0-2 HTTP의 안전성

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

0-3 HTTPS

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

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

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

1. route53 도메인

도메인을 구매하는 방법은 다음과 같습니다. 혹시나 설명이 부족한 경우 밑의 링크를 참고하면 좋을 것 같습니다.

도메인 구매 방법

1-1 구매 방법

route 53 → 좌측 등록된 도메인 → 도메인 등록

  1. 원하는 도메인 이름 선택
  2. 장바구니 추가 후 하단 계속 클릭
  3. 결제 정보 입력

결제가 완료되면 route 53 대시보드로 이동해서 위 사진처럼 확인할 수 있습니다.

※ AWS가 아닌 다른곳에서 도메인을 구매했다면 aws route53에 도메인을 등록해야 하지만 AWS에서 직접 구매하면 별도로 등록해줄 필요가 없습니다. (다른곳에서 도메인을 구입한 경우는 다른 블로그를 참조하면 좋을 것 같습니다.)

2. 인증서 발급

2-1 인증서 요청

Certificate Manager로 이동

인증서 요청

2-2 인증서 정보 입력

퍼블릭 인증서 (디폴트)

발급받은 도메인 이름을 넣어주고, 검증 방법은 route53에서 구매한 경우 dns검증을 해줍니다.

이후 요청 클릭

2-3 도메인 소유권 검증

해당 인증서를 클릭해줍니다.

도메인에 대한 소유권이 있는지 검증하는 과정으로, Route 53에서 레코드 생성 버튼을 클릭합니다.

route 53을 통해 도메인을 구매했기 때문에 자동으로 설정이 되므로, 바로 생성 버튼을 누르면 됩니다.

인증서 발급 끝

3. Target Group 생성

ALB를 세팅하기 전에, 요청을 분산시켜줄 그룹이 필요합니다. 생성한 EC2 인스턴스들이 들어갈 그룹이고 로드밸런서가 그룹별로 요청을 분산시켜줍니다.

3-1 그룹 생성

  • 인스턴스 선택, 그룹 이름 작성
  • 기본 포트번호는 80으로 설정돼있는데 이 포트번호는 내가 띄울 서비스의 포트 번호
    를 입력해주시면 됩니다.

그룹에 포함할 인스턴스 선택 후 include as pending below 클릭후 완료 ec2 인스턴스 한대라 로드밸런싱이 의미가 없지만, https 프로토콜 적용을 위해서 로드밸런싱을 적용하는 것입니다.

4. ALB(Application Load Balancer) 세팅

AWS에서 인증서를 발급받은 도메인을 사용하기 위해서는 로드밸런서를 이용해야 합니다.

ALB란 Applcation Load Balancer으로 ELB(Elastic Load Balancer)라고도 부릅니다.

로드 밸런서란 간단히 이야기 하면, 여러 서버가 띄워져 있을 때 , 클라이언트로 부터 인입되는

요청을 로드밸런서 한곳에서 모두 요청을 받고, 각 서버에게 분배해주는 서버를 의미합니다.

ALB는 각 그룹별로 요청을 분산해주고, 각 가용역역에 있는 ALB 노드가 각 인스턴스들에게 요청을 분산 시켜줍니다.

4-1 ALB 생성

ec2 대시보드에서 좌측 하단 로드밸런서 탭 → 생성

4-2 ALB 설정

이름 빼고 나머지는 기본 설정으로 합니다.

4-3 가용영역 설정

가용영역에 대한 내용은 다른 분 블로그에서 학습하시면 좋을 것 같습니다.

총 4개의 가용역역이 있는데, 두개 이상 선택을 권장해서 두개의 가용영역을 설정합니다.

※ 가용영역 설정 시 인스턴스의 가용영역을 포함시켜야 합니다.

4-4 보안 그룹 설정

ec2랑 같은 보안그룹을 설정합니다. (별도로 만들어도 되지만 별도로 만든다면 ec2의 보안그룹에 alb의 보안그룹을 추가해줍니다.)

4-5 리스너, 라우팅 설정

  • HTTPS 프로토콜 리스너를 추가
  • 위에서 생성한 타겟 그룹 선택

4-6 인증서 설정

  • 이전에 발급받은 인증서를 선택
  • 하단 로드밸런서 생성 클릭 후 마무리

4-7 Health Check

ALB가 활성화 상태가 되고 target group에 가보면 Unhealthy 상태입니다.
서버가 살아있는지 여부에 대해 판단하기 위한 지표인데 실제 서버는 살아있으므로 넘어가도록 합니다.

5. ALB와 도메인 연결

이제 생성한 ALB와, 구매한 도메인을 연결하는 과정입니다.

5-1 레코드 생성

레코드 생성을 클릭

  • 레코드 이름은 비워두고, 유형 A로 기본값 사용
  • 이제 별칭 토클을 ON 하고 Application/Classic Load Balancer에 대한 별칭 → region 선택 → ALB 선택

마무리

위의 과정을 거치면 해당 인스턴스에 HTTPS가 적용 된것을 확인할 수 있습니다.
추가적으로 HTTP -> HTTPS 리다이렉션을 적용을 추천하는데 제가 작성한 블로그를 참고하면 좋을 것 같습니다.

참고자료

HTTPS 개념 및 관련 자료
HTTPS 개념 및 관련 자료2
HTTPS 개념 및 관련 자료3

profile
항상 궁금해하고 공부하고 기록하자.

2개의 댓글

comment-user-thumbnail
2024년 5월 25일

리액트랑 스프링 부트를 같이 배포할 때
스프링 부트에 위에 작업을 그대로 적용시켜도 될까요??

마지막에 말씀하신 http -> https 리다이렉션 작업은 프론트에서 nginx로 따로 설정해주면 스프링부트 ec2 서버에서는 따로 적용시켜줄 필요 없는것이 맞을까요??

답글 달기
comment-user-thumbnail
2024년 7월 16일

감사합니다 덕분에 살았습니다

답글 달기