EC2 로드 밸런서 HTTPS 트래픽 처리불능에 대해 질문합니다.

조회수 653회

안녕하세요, 저는 지금 프론트엔드 개발자를 준비하고 있는 취업준비생입니다.

포트폴리오를 준비하면서 웹 풀스택 개인 프로젝트를 진행중입니다.

AWS를 이용한 프로젝트 배포과정에서 적용한 HTTPS 트래픽 처리 과정에서, EC2 Load Balancer에서 HTTPS 트래픽을 처리하지 못하는 문제를 해결하지 못해 질문합니다.

현재 프로젝트 배포를 위해 사용하고 있는 AWS 서비스들은 아래와 같습니다.

  • S3

  • EC2 (Load Balancer 포함)

  • RDS

  • Route 53

  • CloudFront

발생한 문제의 상세한 내용은 아래와 같습니다.

가상의 향수 쇼핑몰을 주제로 프로젝트를 만족스럽게 구현하였고, AWS를 이용하여 프론트엔드 / 백엔드 / 데이터베이스도 성공적으로 배포하였습니다.

그런데 회원 기능을 구현하면서 로그인 상태를 검증하고 지속할 방법으로 쿠키를 사용하였습니다. 문제는 기본적으로 사용되는 HTTP 프로토콜에서는 몇 가지 이유로 쿠키 사용이 불가능하여 배포 환경을 수정하면서 HTTPS를 사용해보기로 하였습니다.

Route 53으로 도메인을 하나 구입하고, ACM으로 SSL 인증서를 발급받은 뒤.

CloudFront를 이용해서 S3로 배포 중인 프론트엔드 파트를 구입한 도메인으로 연결함과 동시에 SSL 인증서를 적용하여 HTTPS를 사용하도록 설정했습니다.

그리고 EC2 환경에서도 HTTPS 사용이 가능하도록 Load Balancer를 설정, HTTP 리스너와 HTTPS 리스너를 설정하고 SSL 인증서를 적용한 뒤 EC2 인스턴스를 대상그룹으로 지정하여 백엔드로 들어오는 트래픽을 처리하도록 설정하였습니다.

그런데 이후 Load Balancer에서 헬스체크 테스트를 해보니, HTTP 트래픽은 백엔드에 잘 도달하여 응답까지 되는 반면 HTTPS 트래픽이 제대로 처리되고 있지 않는 결과를 확인하였습니다. 백엔드 로그와 Load Balancer 엑세스 로그 등을 확인해보니 헬스체크 요청이 백엔드에 제대로 도달하고있지 못하는 것을 확인하였습니다.

아래 항목들은 제가 문제를 해결하기 위해 수집한 정보들입니다.

  • 로그에서 elb_status_code가 "502"이고, target_status_code가 "-"인 것을 보아서는 로드 밸런서가 HTTP 502 오류를 반환하고 있으며, 이는 대상에서 적절한 응답을 받지 못하고 있는 것으로 보입니다.

  • 네트워크 탭에서 확인된 정보에 따르면, 클라이언트(브라우저)는 OPTIONS 메소드를 사용하여 사전 요청(이른바 "preflight" 요청)을 서버에 보내고 있지만 이 사전 요청에 대한 응답이 없거나, 응답이 잘못되었을 때 502 오류가 발생할 수 있다고 합니다.

아래 항목들은 제가 문제를 해결하기 위해 시도했던 방법들입니다.

  • Route 53 레코드 수정 :

프론트엔드에서 백엔드로 요청을 보내는 서브 도메인 app.essence-aura.com을 생성하고, 로드 밸런서 라우팅을 연결하였습니다.

메인 도메인 essence-aura.com에서는 S3로 배포 중인 프론트엔드 정적 파일에 접근하며, 프론트엔드 내부적으로는 서브 도메인 app.essence-aura.com에게 백엔드 요청을 보내게 됩니다.

  • ACM 인증서 검증:

발급된 SSL/TLS 인증서가 Load Balancer와 CloudFront에 제대로 적용되었고, 모든 서브도메인이 포함되어있으며 유효한 상태임을 확인하였습니다.

  • SSL/TLS 핸드셰이크 체크:

Load Balancer 로그를 통해 SSL/TLS 핸드셰이크가 성공적으로 수행되고 있음을 확인했습니다.

  • 서버 시간 동기화:

EC2 인스턴스의 시간이 NTP(chronyd)를 통해 정확히 동기화되어 UTC 기준으로 적용됨을 확인하였습니다.

  • 로드 밸런서 대상 그룹 설정:

로드 밸런서의 대상 그룹 설정을 HTTP와 HTTPS로 구성하였고, EC2 인스턴스에서 사용하는 포트인 3001 포트로 적용되고 있음을 확인했습니다.

  • EC2 인스턴스 포트 설정:

인스턴스 인바운드 규칙에 3001 포트가 허용중이며, SSH로 인스턴스에 접근하여 백엔드 서버가 포트 3001에서 수신 대기 중임을 확인했습니다.

  • 보안 그룹 및 네트워크 ACL 설정:

EC2 인스턴스에서는 3001 포트를 허용하고 있으며, 네트워크 ACL 설정은 초기값 그대로 모든 트래픽을 허용하고 있는 상태임을 확인했습니다.

제 능력으로 가능한 선까지 문제 해결을 위해 노력했지만 며칠을 소모해보아도 문제가 해결되지 않아 질문해봅니다.

EC2 Load Balancer에서 HTTPS 트래픽을 처리하지 못하는 이유가 무엇일까요?

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)