[AWS] EC2 HTTP를 HTTPS로 바꾸기

Dyong_Song·2024년 3월 24일
0
post-thumbnail

EC2 HTTPS로 연결하기 포스팅을 따라하여, 성공한 기록 남겨둡니다!


📌 AWS 로드 밸런서를 활용한 HTTPS 전환법

해당 방법은 소형 서버 혹은 개발 공부를 위한 프로젝트 진행시, Route53과 Elastic Load Balancer, 도메인 구입으로 인한 과금이 발생합니다.

❓ HTTPS란? SSL 보안 프로토콜 위에서 HTTP 통신을 하는 프로토콜

HyperText Transfer Protocol(HTTP) + Secure Socket Layer(SSL) = HTTPS
데이터 전송의 보안을 강화하기 위해, 암호화 사용
→ 모든 웹사이트(로그인 기능을 포함하는)는 HTTPS 사용 必
→ 기존의 HTTP 프로토콜에서 암호구간을 추가한 프로토콜을 의미

프로토콜(Protocol)? (개인 노션 자료)
데이터의 교환 방식을 정의하는 규칙 체계

1. 도메인 구매하기 (가비아)

  • 1년 동안 저렴하게 사용 가능한 것을 구매하도록 하자!
  • 도메인은 Route53에서 발급받은 NameServer(NS)와 연결

    ❓ 도메인?
    인터넷 주소, 즉 웹사이트의 위치를 나타내며, IP 주소의 별칭

2. Route53을 통해 도메인 인증하기

  • 호스팅 영역을 생성한 뒤, 구매한 도메인 이름으로 등록
  • 등록시 유형은 퍼블릭
  • 호스팅 영역을 생성하면, 해당 도메인에 대한 4개의 NS를 확인할 수 있음
    → NS가 4개인 이유: 하나의 NS가 없어지면 해당 서비스가 없어지기 때문에

    ❓ DNS(Domain Name System)는 도메인을 IP주소로 바꿔주는 역할을 하는 시스템 계층

    Domain과 NS 참고 포스팅

3. 도메인과 Route53의 NS 연결하기

  • 발급받은 4개의 NS 주소를 구매한 도메인과 연결하기 위해, 가비아의 도메인 관리로 이동
  • 네임서버 설정에서 4개의 네임서버 등록해주기 (마지막 .은 제외할 것!)
  • 이로써, AWS는 Route53에서 연결한 도메인이 내가 소유한 도메인이란 것을 인식할 수 있음

4. SSL 인증서 발급받기 (Certificate Manager)

구매한 도메인에 인증서를 발급받아야 HTTPS로 전환할 수 있다!

  • (해당 과정을 나중에 Let's Encrypt로 진행해보자)
  • AWS certificate Manager 대시보드로 이동하여, 인증서 요청하기 (구매한 도메인 이름 입력, DNS 검증)
    → ACM은 SSL/TSL 인증서를 손쉽게 관리하고, 배포, 갱신할 수 있는 서비스
  • 인증서를 선택하여, Route 53에서 레코드 생성하기를 통해 CNAME 레코드 만들어주기

    ❓ CNAME 레코드?
    하나의 도메인에 다른 이름을 부여하는 방식 → 서브 네임 지정
    이 경우, DNS 인증 방식을 사용하기 때문에, CNAME 레코드가 생성된다.
    → Route53에 등록한 도메인에 대해 인증서를 발급하면, 유일한 Key-Value 형태로 AWS에서 CNAME을 부여한다.
    → 이 Key 값을 통해, CNAME 도메인 레코드가 사용자의 소유권임을 증명한다.
    → 위 과정을 이메일 인증을 통해 진행해도 무방 (Route53 같은 도메인 DB에 대한 권한이 충분하지 않거나, DNS 레코드를 다루기 어려운 상황)

  • 일정 시간(10분~2시간 사이) 이 지나면, 발급받은 SSL이 '발급됨' 상태로 전환

5. EC2 인바운드 규칙 변경하기 (HTTPS 포트 443 열기)

서버를 돌리고 있는 EC2 보안그룹의 443포트(HTTPS)를 열어주자! (인바운드 규칙 편집)
→ 4와 6 둘 다 열어두기

6. EC2 대상 그룹 생성

EC2의 메뉴 중 로드 밸런싱 탭의 대상 그룹으로 이동!
→ 대상 그룹을 만들 때, 포트 번호를 8080으로 변경 (Spring 서버 포트)
주의사항: health check를 하는 path는 query가 포함되지 않은 get 요청시, 반환되는 값이 있는 곳으로 설정 (없다면, get 요청을 보냈을 때, "Connection OK"를 반환하는 API를 하나 만들자!)
→ 해당 대상 그룹이 적용될 인스턴스를 선택한 뒤, 8080 포트로 연결

7. 로드 밸런서 생성

❓ 로드 밸런서?
대량의 트래픽을 감당하기 위해 서버를 여러 대 돌리는 경우, 모든 클라이언트의 요청에 일관성있게 응답하기 위해 사용되는 기술 → 트래픽을 균등하게 분산시켜 주는 기능

  • Application Load Balancer를 선택하여 생성
  • 네트워크 매핑시, EC2가 사용하는 VPC, 서브넷과 매핑되도록 설정할 것!
  • 최소 2개 이상의 서브넷을 두어야 하므로, EC2의 서브넷을 하나, 나머지 하나는 아무거나
  • 보안그룹 설정 역시 EC2에서 사용하는 보안그룹으로 설정
  • 로드 밸런서의 리스너(어떤 포트로 들어오는 것을 Listen 할 것인지)를 HTTP 8080과, HTTPS 443 등록할 것 / 이때, 대상 그룹은 위에서 만든 대상그룹
  • 보안 리스너 설정에서 발급된 SSL 인증서를 Default 인증서로 설정

8. 도메인 A 레코드 생성하기

Route53의 구매한 도메인의 호스팅 영역에서 레코드 생성을 통해 A레코드 만들기
❓ A 레코드?
도메인 이름을 IPv4 주소로 매핑 → 사용자가 도메인 이름을 입력한 경우, 도메인과 연결된 웹 서버의 IPv4 주소로 라우팅

9. 로드 밸런서 리스너 규칙 추가

  • 로드 밸런서의 리스너 규칙에서 443 규칙 수정 (전달 그룹을 생성한 대상 그룹으로 설정 - 이미 되어있을 수 있음)
  • 8080 포트의 경우, 호스트 헤더에 구매한 도메인 / Redirect 대상에 HTTPS443으로 설정 / 우선순위 1
profile
꾸준한 개발자가 되자! Do steady yong

0개의 댓글

관련 채용 정보