DevOps/AWS

AWS CM과 로드 밸런스로 HTTPS로 변환하기

Code Maestro 2023. 12. 31. 02:25
728x90

HTTPS를 변환하는 방법에는 크게 1) 웹서버를 사용하는 방식2) AWS를 사용하는 방법이 있다. 두 개의  공통점 모두 SSL/TLS 인증서가 필요하다. 

 

이 포스팅에서는 AWS를 사용하여 HTTPS로 변환하는 방법을 소개하고자 한다.

 

참고로 웹서버(NGINX) HTTPS 변환은 Certbot으로 SSL 발급, Nginx로 HTTPS로 리다이렉트 

 

nginx HTTP 로 들어오면 강제로 HTTPS 로 전환하도록 설정하기(force redirect to SSL)

 

www.lesstif.com

위의 두 블로그 글을 참고하길 바란다.

 

1. 도메인 생성 

SSL을 발급하려면 먼저 도메인을 생성해야 한다. 필자는 대표적인 도메인 사이트 가비아를 사용하였다. 

(꼭 가비아가 아니라 무료 도메인 사이트를 사용해도 상관이 없다.)

 

관리 버튼을 눌러 네임 서버가 아래와 같이 나올 것이다. 

 

 

 

이번에는 AWS 사이트에 접속하여 Route 53 항목에 들어간다.

 

호스팅 영역을 생성하여 

 

 

가비아에서 생성한 도메인 이름을 적고, 호스팅 영역 생성 버튼을 누르자.

 

 

이제 내가 구입한 가비아의 도메인의 네임서버를, 방금 생성한 도메인 영역의 것으로 바꿔준다.

 

네임서버 - 설정

호스트명을 모두 바꾼다.

 

Route53 도메인 4개를 가비아 설정에 넣는다. (마지막에 있는. 은 제거하고 넣습니다.)

 

그리고 본인 인증을 하고 설정을 저장하면 끝이다.

 

 

2. 인증서 발급

인증서 발급을 위해 AWS의 Certificate Manager를 사용한다.

 

 

 

 

생성한 도메인 이름을 넣고, DNS 검증 옵션을 선택한다. 키 알고리즘은 간편하게 RSA 2048을 사용하였다. 그리고 요청 버튼을 클릭한다.

 

ACM 메뉴(왼쪽)에서 인증서 나열을 클릭하면, 방금 요청한 인증서를 확인할 수 있습니다. DNS 검증 기준으로 검증 대기 중 / 아니요 / 부적격 이 나온다면 정상적으로 발급한 거다.

 

그럼에도 계속 상태가 '검증 대기 중' 상태임을 알 수 있다. 발급 시간이 오래 걸리면 인증서 ID 누른 다음에

 

레코드 생성 버튼을 누른다.

 

 

 

이러면 5 안에 상태가 발급됨으로 바뀌는 확인할 있다

 

3. Load Balancer 대상 그룹

이제 HTTPS로 변환을 원하는 EC2 보안 그룹에 들어가서

 

보안 그룹 - 인바운드 규칙 편집을 해보자. 

 

80 포트, 8080번 포트(웹 서버에서 사용 중인 포트 번호/ 스프링 기본 포트), 443번 포트에 대해 Anywhere-IPv4, Anywhere-IPv6를 모두 등록하고, 우측 하단의 규칙 저장을 클릭한다. 이는 HTTP, HTTPS 모든 요청을 열어주겠다는 의미이다. 

 

EC2 왼쪽 메뉴의 대상 그룹을 클릭해 보자. 

 

 

 

프로토콜의 포트를 기본 80 포트로 설정해 준다. 

 

사용할 인스턴스를 선택한다.

 

 

 

 

포트 번호를 확인하고, 대상 그룸을 생성하면 

정상적으로 생성된 확인할 있다.

 

4. HTTPS Load Balance 생성

 

이제 메뉴의 로드 밸런스를 클릭.

 

 

 

맨 왼쪽의 로드밸런스를 선택한다.

 

이름을 사용자 임의로 설정해준다.

네트워크 매핑은 최소 2개의 AZ를 설정해야 하지만, 반드시 EC2가 사용하는 VPC인 서브넷과 매핑되어야 한다.

 

EC2로 다시 돌아가서 상세 정보에서 VPC ID와 서브넷 ID를 확인해서 일치시켜 준다. 

 

 

다시 로드 밸런스로 돌아가서 보안 그룹은 Ec2 동일하게 설정해 준다.

 

 

HTTP 80, HTTPS 443에 대한 리스너를 생성해 준다. 그리고 다음으로 전달에서 이전에 생성한 로드 밸런스 대상 그룹으로 선택해 준다. 

 

기존 SSL/TLS 서버 인증서는 ACM에서 만든 인증서를 적용해준다.

 

로드 밸런서를 생성하면 끝.

 

 

5. 도메인 레코드 생성

다시 AWS의 Route53에서 자신이 만든 도메인을 선택한다.

 

레코드 생성.

 

레코드 유형은 A로 선택하고, 서울 리전과 아까 생성한 로드 밸런스를 선택한다.

 

이러면 호스트 영역의 레코드가 생성됨을 확인할 있다.

 

 

6. 로드 밸런서 HTTPS로 리다이렉트.

다시 EC2에서 로드 밸런서 항목을 선택한다. 생성한 로드 밸런서 정보 확인하면...

 

443, 8080의 리스너가 존재하고, 443에는 SSL 인증서도 연결되어 있음을 알 수 있다.

 

이제 각각을 클릭해 규칙을 편집해 보자.

 

 

먼저 443 포트를 보면 ACM에서 발급한 SSL로 생성한 보안 정책을 볼 수 있다.

 

 

이제 80 포트의 리스너 규칙을 편집해 보자. 

 

라우팅 액션을 URL로 리디렉션으로 선택한다. 프로토콜을 HTTPS로 변경하고, 포트를 443으로 설정. 상태 코드를 301로 설정하고 변경 내용을 저장한다.

 

 

이러면 80 포트의 HTTP 요청을 HTTPS로 영구 리다이렉트 시켜서 HTTPS로 변환시켰다. 

 

실제 사이트를 들어가 보면 

 

 

이전의 HTTPS 보안 경고 표시가   

 

안 뜨고, 영구적으로 HTTPS로 변환된 것을 확인할 수 있다. 

728x90