개발 일지

AWS EC2에 HTTPS 적용하기(2) 본문

카테고리 없음

AWS EC2에 HTTPS 적용하기(2)

junjun_ 2024. 2. 29. 15:35

앞에서 도메인 구매, 도메인 인증, 인증서 발급 및 적용을 완료했습니다.

2편에서는 로드 밸런서 설정을 완료한 후에 HTTPS 요청이 내부적으로 어떻게 처리되는지 까지 알아보겠습니다.

 


순서

1. 도메인 구매

2. 도메인 인증 

3. 인증서 발급 및 적용

4. 타겟 그룹 설정

5. 로드 밸런서 설정 

6. 번외) HTTPS 요청 흐름

 

들어가기 전에 1 (로드 밸런서란)

로드 밸런서와 타겟 그룹에 대해 간단하게 정리하고 가겠습니다.

 

로드 밸런서란

로드 밸런서는 네트워크 트래픽을 여러 서버에 분산시켜 서버의 성능을 최적화하고, 과부하를 방지하며, 가용성을 높이는 장치나 소프트웨어입니다. 이를 통해 웹사이트나 애플리케이션의 응답 시간을 개선하고, 서버 장애 시에도 서비스가 계속 제공되도록 할 수 있습니다.

주요 기능 및 이점:
트래픽 분산: 사용자 요청을 여러 서버에 고르게 분배하여 각 서버의 부하를 줄입니다.
고가용성: 하나의 서버가 다운되더라도 다른 서버로 트래픽을 분산시켜 서비스 중단을 방지합니다.
확장성: 트래픽이 증가할 때 더 많은 서버를 추가하여 용량을 확장할 수 있습니다.
보안: 로드 밸런서를 통해 SSL 종료, 트래픽 암호화를 처리하여 백엔드 서버의 부하를 줄이고 보안을 강화할 수 있습니다.

세션 지속성: 사용자 세션을 동일한 서버로 유지하여 일관된 사용자 경험을 제공할 수 있습니다.

 

타깃그룹이란

타겟 그룹은 로드 밸런서가 트래픽을 분산시킬 서버 집합을 정의하는 논리적 그룹입니다. 각 타겟 그룹에는 여러 개의 서버(혹은 인스턴스)가 포함될 수 있으며, 로드 밸런서는 이 그룹 내에서 트래픽을 분배합니다.

 

들어가기 전에 2 ( EC2 설정 확인 )

1. EC2 보안그룹 https 설정 

  • https를 사용하기 때문에 https 포트인 443 포트를 열어놔야 합니다.

 

2. 연결할 EC2가 사용하는 보안그룹과 서브넷 확인

  • 로드 밸런서를 사용할 때 EC2가 사용하는 것과 같은 것을 매핑 켜주어야 하므로 미리 확인해 두시면 좋습니다

 

이제 본격적으로 타깃그룹과 로드 밸런서에 관한 설정을 해보도록 하겠습니다.

 

타겟 그룹 설정

aws ec2 서비스 탭에서 설정할 수 있습니다.

  • aws ec2 로드밸런서 텝에 대상 그룹(타깃 그룹)으로 들어갑니다. 

 

 

  • 인스턴스 선택

 

 

  • 원하는 타깃 그룹 이름을 입력해 줍니다. 
  • 포트번호의 디폴드는 80으로 되어있으나, 본인이 EC2서버의 http포트를 8080번을 사용한다면 80 대신 8080번을 넣어줘야 합니다. ( EC2의 보안그룹에서 확인 가능합니다) 저는 8080을 사용하기 때문에 8080을 넣어줬습니다.
  • VPC도 마찬가지로 ec2서버에서 사용하는 걸로 선택합니다.
  • 다른 항목들은 디폴트로 두고 다음으로 넘어갑니다.

 

  • ec2 서버를 선택하고, 사용하는 포트인 8080을 넣어준 후 아래에 보류 중인 것으로 포함을 누르면

 

  • 아래 대상 보기에 대상으로 추가된 것을 확인할 수 있습니다.
  • 생성을 누르면 완료입니다.

 

로드벨렌서 생성

이제 로드 밸런서를 생성해 주도록 하겠습니다.

마찬가지로 EC2 탭에서 로드 밸런서 탭으로 들어가서 로드 밸런서 생성을 클릭합니다.

 

  • 첫 번째애플리케이션 로드 밸런서 생성을 선택하고 다음으로 넘어갑니다

 

  • 기본구성에서는 로드 밸런서 이름을 적어주고 

 

  •  반드시 확인하셔야 할 것은, VPC는 EC2가 사용하는 VPC 서브넷을 선택해야 한다는 것입니다.
  • 아래 매핑은 가용영역을 선택하는 부분인데 본인의 인스턴스의 가용영역이 반드시 포함되어야 합니다.   

 

가용영역 확인 방법

  • 가용영역과 VPC는 해당 EC2 정보에 네트워킹 탭에서 확인하실 수 있습니다!
  • 보안그룹 정보는 보안탭에서 확인이 가능하니 이 부분도 확인하세요.

 

 

 

 

  • 보안그룹 또한 연결하는 EC2 서버에서 사용하는 보안그룹을 선택해야 합니다.
  • (주의: 보안 규칙에 https이 등록되어 있어야 합니다.) <- 사전준비에서 한 내용!

 

  • HTTPS 리스너와 HTTP리스너 두 개를 만들어 줍니다 
  • HTTP 포트는 EC2에서 사용하는 포트를 적어주고
  • HTTPS의 포트는 443을 사용합니다.
  • 기본 작업에는 바로 전 단계에서 만들어준 타겟 그룹을 선택합니다

 

  • 보안 정책과, 인증서 소스는 그대로 두고 인증서에서 인증서 선택을 눌러 전 포스팅에서 만든 인증서를 가져옵니다. Route S5에 연결했던 그 인증서)

 

이제 모든 설정이 끝났습니다. 다른 항목들은 디폴트로 두고 맨 밑에 생성을 눌러주면 로드 밸런서 생성 완료입니다.

 

도메인 레코드 생성

 

이전 포스팅에서, Route 53을 통해 생성한 호스팅 영역의 레코드 4개(A, NS, SOA, CNAME) 중

A 레코드는 다음 글에서 만들 것이라고 했었는데요. 이 단계에서 만들면 됩니다.

 

A 레코드를 만들어보겠습니다. 

  • 레코드 생성을 누르고

 

  • 저는 루트 도메인에 대한 레코드를 만들 것이기 때문에 레코드이름(서브도메인)은 비웠습니다
  • 레코드 유형은 A - IPv4를 선택한 뒤 별칭을 체크하고
  • 애플리케이션/클래식 로드 밸런서에 대한 별칭을 선택하고 
  • 리전 설정 하면 아까 만든 로드 밸런서를 자동으로 가져옵니다.
  • 레코드 생성을 누르면 진짜 완료입니다.

 

HTTPS 요청 흐름

각각의 역할

  • Route 53: 도메인 이름을 ALB의 DNS 이름으로 변환하여 클라이언트의 요청을 ALB로 라우팅 합니다.
  • ALB(애플리케이션 로드밸런서): 클라이언트와의 HTTPS 트래픽을 처리하고, SSL/TLS 종료를 통해 요청을 복호화하여 EC2 인스턴스로 전달합니다. 응답을 다시 암호화하여 클라이언트에게 반환합니다.
  • EC2 인스턴스: 내부적으로 HTTP 트래픽을 처리하고, 응답을 ALB로 반환합니다.

 

1. DNS 요청 처리 (클라이언트 -> Route 53 -> 클라이언트)

  • 사용자가 https://example.com을 입력하면, 브라우저는 Route 53에 DNS 쿼리를 보냅니다.
  • Route 53은 example.com에 대한 A 레코드를 확인하고, ALB의 DNS 이름으로 변환하여 반환합니다.

 

2. HTTPS 요청 전달 (클라이언트 -> ALB)

  • 브라우저는 반환된 ALB의 DNS 이름을 사용하여 HTTPS 요청을 ALB로 보냅니다.
  • ALB는 HTTPS 요청을 수신하고, SSL/TLS 인증서를 사용하여 암호화된 트래픽을 복호화합니다.

 

3. EC2 인스턴스 응답 (ALB -> EC2 인스턴스 -> ALB)

  • ALB는 복호화된 HTTP 요청을 타깃 그룹의 EC2 인스턴스로 전달합니다.
    • 이때 ALB는 라운드 로빈, 최소 연결 수 등 설정된 로드 밸런싱 알고리즘에 따라 트래픽을 EC2 인스턴스에 분산시키지만 위에 예제는 단일 인스턴스임으로 분산이 필요 없습니다.
  • EC2 인스턴스는 HTTP 요청을 처리하고, HTTP 응답을 ALB로 반환합니다.

 

4. HTTPS 응답 전달  (ALB -> 클라이언트)

  • ALB는 EC2 인스턴스로부터 받은 HTTP 응답을 다시 암호화하여 클라이언트에게 HTTPS로 전달합니다.

 

정리

여기까지 ec2에 https을 연결시키는 방법에 대해 정리해 보았습니다.

  • 도메인 구매 및 인증 
  • 인증서 발급
  • 로드밸런서 생성
  • 리스너 규칙 추가
  • Route 53에 로드밸런서 레코드 추가

 

처음해 보는 연결은 아니지만 직접 정리를 하지 않고 따라만 하니  할 때마다 찾아보게 되는 거 같아서 이번 기회에 정리를 해봤는데 확실히 정리를 하면서 하니 기억에 오래 남을 거 같습니다. 또한 시간이 된다면 여기서 다루는 로드 밸런서, Route 53과 나오는 단어들인 VPC, 가용영역 등등에 대해서도 정리를 해보면 좋을 거 같습니다.