aws ELB를 이용하여 https를 적용한 과정을 정리해보려고 합니다.
먼저, aws ELB가 무엇인지 그리고 이를 어떻게 이용하고 적용하는지 살펴보도록 하겠습니다.
💡Elastic Load Balancing?
Elastic Load Balancing은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다. 등록된 대상의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅합니다. Elastic Load Balancing은 수신 트래픽이 시간이 지남에 따라 변경됨에 따라 로드 밸런서를 확장합니다. 대다수의 워크로드에 맞게 자동으로 조정할 수 있습니다
💡로드 밸런서의 이점?
로드 밸런서는 워크로드를 가상 서버와 같은 다수의 컴퓨팅 리소스로 분산합니다. 로드 밸런서를 사용하면 애플리케이션의 가용성과 내결함성이 높아집니다.
애플리케이션에 대한 요청의 전체적인 흐름을 방해하지 않고 필요에 따라 로드 밸런서에서 컴퓨팅 리소스를 추가 및 제거할 수 있습니다.
로드 밸런서가 정상적인 대상에만 요청을 보내도록 컴퓨팅 리소스의 상태를 모니터링하는 상태 확인을 구성할 수 있습니다. 또한 컴퓨팅 리소스가 주요 작업에 집중할 수 있도록 암호화 및 복호화 작업을 로드 밸런서로 오프로드할 수 있습니다.
그리고 Elastic Load Balancing은 다음 로드 밸런서를 지원합니다. Application Load Balancers, Network Load Balancers, Gateway Load Balancers 및 Classic Load Balancer.
이 중에서 https 적용을 위해서는 Application Load Balancer를 이용하였습니다.
💡Application Load Balancer 구성 요소
로드 밸런서는 클라이언트에 대한 단일 접점 역할을 수행합니다. 로드 밸런서는 여러 가용 영역에서 EC2 인스턴스 같은 여러 대상에 수신 애플리케이션 트래픽을 분산합니다. 이렇게 하면 애플리케이션의 가용성이 향상됩니다. 로드 밸런서에 하나 이상의 리스너를 추가할 수 있습니다.
리스너는 구성한 프로토콜 및 포트를 사용하여 클라이언트의 연결 요청을 확인합니다. 리스너에 대해 정의한 규칙에 따라 로드 밸런서가 등록된 대상으로 요청을 라우팅하는 방법이 결정됩니다. 각 규칙은 우선 순위, 하나 이상의 작업, 하나 이상의 조건으로 구성됩니다. 규칙에 대한 조건이 충족되면 작업이 수행됩니다. 각 리스너에 대한 기본 규칙을 정의해야 하며, 필요에 따라 추가 규칙을 정의할 수 있습니다.
각 대상 그룹은 지정한 프로토콜과 포트 번호를 사용하여 EC2 인스턴스 같은 하나 이상의 등록된 대상으로 요청을 라우팅합니다. 여러 대상 그룹에 대상을 등록할 수 있습니다. 대상 그룹 기준으로 상태 확인을 구성할 수 있습니다. 로드 밸런서의 리스너 규칙에서 지정한 대상 그룹에 등록된 모든 대상에서 상태 검사가 수행됩니다.
다음 다이어그램은 기본 구성 요소를 보여 줍니다. 각 리스너에는 기본 규칙이 포함되어 있고 하나의 리스너에는 요청을 다른 대상 그룹으로 라우팅하는 다른 규칙이 포함되어 있습니다. 하나의 대상은 두 개의 대상 그룹에 등록됩니다.
aws ELB를 이용하여 Https 연결하기
이 전에 미리 SSL인증서를 발급해야합니다!
aws ELB로 들어가서, Application Load Balancer를 클릭합니다.
다음으로 로드밸런서의 이름을 만들어주고,
Internet-facing, IPv4를 선택합니다 (default로 되어있을 것입니다)
다음으로 Mappings에서는 아무거나 두 가지 이상만 선택해주시면 됩니다.
Security groups에서는 해당 인스턴스의 보안그룹을 선택해주시면 됩니다.
다음은 리스너와 라우팅 부분입니다.
리스너는 HTTP, HTTPS 프로토콜 두 개를 만들어줍니다. 각각의 포트는 80, 443으로 설정해줍니다.
HTTP는 HTTPS로 리다이렉션하면 되구, HTTPS는 타겟 그룹을 생성하여 추가해줍니다.
(이 Default action은 ELB를 생성한 후에 해야하는 것 같습니다
저 또한 생성 후에 수정하기로 규칙을 추가했습니다.)
그리고 SSL 인증서는 기존에 생성한 ACM을 가져오면 됩니다.
여기까지 설정 후에 elb를 생성하면 됩니다.
다시 돌아와서,
리스너 HTTP는 규칙에 HTTPS로 리다이렉션을 하면 되고,
HTTPS는 타겟그룹을 만든 후에 규칙에 추가해주면 됩니다!
이때 주의해야 할 것은
🔥타겟그룹 생성에서, 타겟그룹에 해당 ec2 인스턴스 "타겟"으로 등록해주어야 한다는 것입니다!🔥
생각해보면 당연히 타겟으로 인스턴스를 등록해주어야 요청이 들어왔을 때 해당 타겟 그룹의 타겟으로 라우팅이 될 텐데,
저는 처음 https 연결 시에 이 과정을 빼먹어서 오랫동안 삽질을 했었습니다.
그래서 더욱 기본적인 원리에 대한 공부가 필요하다고 생각합니다.
이 다이어그램을 보면 당연한 과정이니까요:)
여기서 끝이 아니고,
Route53에 해당 도메인으로 들어가줍니다.
그리고 레코드 유형 A에서 편집을 누르고,
트래픽 라우팅 대상을 수정해야합니다.
트래픽 라우팅 대상에서 아까 만든 elb를 선택하고 저장하면 최종 끝입니다!
이제 해당 도메인을 https로 접속해도 잘 접속이 되는것을 확인할 수 있습니다.
[reference]