AWS 를 활용하여 HTTPS 설정하는 방법

기록의 습작·2023년 3월 21일
0

오늘은 웹사이트에 HTTPS (Hypertext Transfer Protocol Secure)를 설정해보려한다! 로컬 환경이라면 크게 상관 없겠지만 누구나 접근할 수 있는 배포된 환경이라면 필수로 적용해야 하는 것이 바로 HTTPS 설정을 해볼것이다..!

HTTPS 를 적용해야 하는 이유?

설정하기에 앞서 우리는 왜 HTTPS 설정을 해야 할까요?

기존의 서버와 클라이언트가 데이터를 주고 받기 위한 프로토콜인 HTTP 는 암호화가
되지 않은 평문 데이터를 전송하기 때문에 제 3자가 해당 데이터를 조회할 수 있습니다.

따라서 누구든 마음만 먹으면 네트워크단에서 소중한 데이터를 확인할 수 있어서
보안에 매우 취약 하다는 이슈가 존재한다.

이러한 문제를 해결하기 위해 네트워크 상에서 제 3자가 정보를 볼 수 없도록 암호화를 지원하는 HTTPS 프로토콜이 등장 했다.

HTTPS 가 적용된 웹사이트의 장점

  1. 웹사이트에서 주고받는 정보를 암호화한다.
  2. 공인된 민간기업 CA(Certificate Authority) 의 인증을 받기 때문에 신뢰하고 사용할 수 있다.
  3. HTTPS 사용 시 검색엔진 최적화(SEO) 혜택을 볼 수 있다.
    1. 구글에서는 HTTPS 를 적용 하고 있는지를 검색 순위의 결정 요소에 포함(가산점)하고 있다.
  4. 크롬이나 파이어폭스 등 일부 브라우저에서는 안전하지 않은 사이트의 접속을 막는 추세이다.
  5. 과거엔 HTTP 에 비해 속도가 느렸지만, 하드웨어의 발전과 HTTPS/2 업그레이드로 속도차이가 차이를 못느낄 정도로 개선되었다.

이러한 장점들 때문에 대부분의 웹사이트는 현재 HTTPS 를 적용하고 있다.

어떻게보면 모든 웹사이트 보안의 가장 중요한 핵심 요소 라고도 할 수 있다...!


HTTPS 설정을 할 수 있는 방법은 여러가지 있지만, AWS를 사용하고 있는김에 ACM 인증서를 발급받아 적용해볼 것이다!

ACM 인증서 발급받기

AWS 에서 AWS Certificate Manager 에 들어가 인증서를 먼저 요청해야한다.

해당 인증서는 HTTPS 설정을 하기 위한 SSL 인증서다.

꼭 AWS 인증서가 아닌 외부 SSL 인증서가 있다면 프라이빗 인증서 요청을 통해 사용할 수도 있다.

  1. 먼저 사용할 도메인 이름을 적어준다.

이 때 추가로 서브도메인을 여러개 사용할 예정이라면, [이 인증서에 다른 이름 추가] 를 눌러서 추가해줄 수 있고, 위 사진처럼 * 키워드를 사용하여 한번에 서브도메인을 받아줄 수도 있다!

(이미지 속 도메인 주소는 임의로 적은 도메인 주소입니다.)
  1. 보통은 도메인을 구매 후 DNS 검증을 통해 해당 도메인의 소유권을 검증한다.

이제 인증서를 생성을 누르면…

비어있던 인증서란에 이렇게 인증서가 등장..!
하지만 아직 검증 전이기 때문에 사용할 수 없는 상태로 존재한다.

DNS 검증을 설정해주었는데 아무리 기다려도 활성화가 안되는데.. 이유가 뭐지?

바로 도메인과 AWS 네임서버가 연결되어 있지 않기 때문!

네임서버는 IP 주소와 도메인 주소를 연결해주는 역할을 해주는 중요한 친구다!

그럼 네임서버를 빨리 연결해주러 가보자!


Route 53 설정 후 ACM 검증하기

먼저 네임서버를 받으려면 Route53 이란 호스팅 영역을 생성해주어야 한다.

💡 **Route53** ??

Route53 이란 AWS 에서 제공하는 DNS.
도메인을 IP 로 변환하여 네트워크 통신을 통해 목적지를 찾아가게 해준다.

생성하는건 크게 어렵지 않다!

도메인 이름만 명시해준 후 생성해주는 것이 전부!

이렇게 호스팅 영역을 생성하게 되면

저렇게 4개의 네임서버 주소가 생성되고, 4개의 주소를 도메인을 구매한 사이트에 가서 연결해준다.

(ex. 가비아에서 구매한 도메인일 경우 가비아 홈페이지에 들어가서 설정!)

이제 다시 ACM 으로 넘어가서 내 인증서를 들어가보면

도메인 항목에 검증 대기중인 CNAME 레코드가 하나 있는데 이 레코드를 Route 53 에 생성해주면 된다.

그럼 내 Route 53 에 해당 CNAME 레코드가 생성된다.

이제 짧으면 5분 내로, 길면 1시간 정도까지 기다리면 내 인증서의 상태가 발급됨으로 초록불이 번쩍!!

이제 HTTP 도메인을 HTTPS 로 만들어주는 마법의 AWS SSL 인증서를 발급받았다.


ELB로 HTTPS 리스너 설정하기

사실 처음에는 로드밸런서가 어디있는지 찾는거부터 오래 걸렸다..

검색을 해도 AWS 에선 뜨질 않는다..

로드 밸런서는 EC2 서비스에 들어가서 왼쪽 카테고리를 내리다보면 로드밸런싱 안에 꽁꽁(?) 숨겨져 있다.


로드밸런서에 들어가보면 지금은 텅 비어있다.

너무 허전하니 얼른 로드밸런서를 하나 생성해보자!

로드밸런서 생성 버튼 클릭!

3개의 로드밸런서 중 HTTPS 설정을 하려면 Application Load Balancer (ALB) 를 사용하면 된다.

ALB 를 생성해주고 ALB 의 리스너 규칙과 인증서 적용만 해주면 쉽게 HTTPS 를 설정해줄 수 있다.

이제 직접 ALB 설정을 해보자!

  • Basic configuration
    • 여기선 말 그대로 기본적인 설정을 해주면 된다.
      • 로드밸런서 이름을 설정해주기
      • 로드밸런서 스키마 정하기
        • internet-facing : 외부 트래픽을 분산시키는 로드밸런스
        • internal : 내부 트래픽을 분산시키는 로드밸런스
      • IP 타입 정하기

  • Network mapping
    • 본인이 설정한 VPC 가 있다면 해당 VPC 와 알맞은 가용영역을 체크해주시면 된다.
    • 설정한 VPC 가 없다면 기본 VPC 가 자동으로 골라져 있을 것이다.
      • 기본 VPC 는 아래 4개 전부 체크해주시면 된다.

        (가용영역 및 네트워크 개념은 해당 글에서 다루지 않겠다.)

  • Security groups
    • 직접 생성한 보안그룹이 있다면 선택한다. (없으면 default 보안그룹 사용)

  • Listeners and routing (제일 중요한 부분!)
    • 들어오는 정보를 해석하여 어떤 타겟으로 보낼지 설정해주는 곳이다.
    • 외부 클라이언트와 ALB 사이에 프로토콜과 포트를 지정한다.

여기서 우리는 기다리고 기다리던 HTTP → HTTPS 설정을 해줄 수 있다.

위 사진에 프로토콜을 HTTP 에서 HTTPS 로 변경하게 되면 인증서를 등록할 수 있는

[Secure listener settings] 창이 생기고 여기서 아까 만든 ACM 인증서를 등록한다.

HTTPS 로 들어온 요청을 이제 어디로 보낼지 타겟을 지정해주어야 한다.

[Create target group] 으로 들어가 목적지 타겟을 만들어 준다.

타겟 타입은 본인이 보낼 타겟 타입을 지정해주면 된다.(저는 인스턴스로 보낼 거라 인스턴스 타입!)

Target group name 에 타겟의 이름을 작성해준다.

이제 해당 타겟의 프로토콜과 포트번호를 적어준다. (저는 인스턴스 내부로 HTTP:80 요청을 보낸다.)

이 후 따로 설정한 VPC 나 프로토콜, Healthy check 경로가 있다면 추가로 작성한다.

여기선 실제로 어떤 인스턴스로 보낼지와 포트번호를 입력한다.

보낼 인스턴스를 체크한 후 [Include as pending below] 를 눌러주면 아래 Review targets 로 이동하면서
등록이 됩니다.

타겟 그룹까지 이제 생성이 완료되었습니다!

위에 타겟그룹란을 한번 새로고침하면 방금 만든 타겟이 뜰텐데 선택해준 후 로드밸런서 설정이 끝난다.

아까 텅 비어있던 로드밸런서 창에 이제 내가 만든 로드밸런서가 생겼다!

밑에 리스너도 잘 등록되어 있는걸 확인하실 수 있다.

이제 로드밸런서 설정까지 마무리를 해보았는데 Route 53 호스팅 영역에 생성한 도메인 레코드를
방금 만든 ALB 와 연결해주는 작업
을 해야한다!

그래야 해당 도메인 주소로 들어오는 요청을 ALB 가 받아줄 수 있다!!


Route 53 레코드와 ALB 연결하기

다시 Route 53 호스팅 영역으로 돌아와 주황색 레코드 생성 버튼을 눌러 ALB 와 연결될 A 레코드를 하나 생성한다.

처음에 들어갈 땐 별칭이 체크되어 있지 않을 텐데 별칭을 체크해주면 트래픽 라우팅 대상을 정해줄 수 있다.

라우팅 대상은 만든 로드밸런서에 대한 별칭을 선택하고, 선택한 Region 을 고른 후 ALB 를 연결해준다.

이렇게 레코드를 하나 만드는 것으로 ALB 와의 연결이 끝났다.

이제부터 저 도메인으로 들어온 요청들은 모두 ALB 를 통해 들어온다.

ALB 리스너 설정으로 원하는 HTTPS 도 잘 적용이 되었다!


추가 리스너 작업

근데 뭔가 이상한점이 하나 있다.

보통 사이트들은 HTTP 로 요청이 갈 때 HTTPS 로 바꿔서 요청을 보내주는데 지금 설정한 사이트는 그냥 그대로 HTTP 요청을 보내고, HTTPS 로 바꿔주지 않고 있는 상태다.

그럼 어떻게 바꿔줄 수 있을까??

바로 방금 작업했던 리스너 설정을 추가로 해주면 요청을 바꿔줄 수 있다!

로드밸런서 창 아래에 리스너 추가로 필요한 리스너를 추가한다.

아래 셀렉트 박스를 보시면 눈에 띄는 키워드가 하나 보인다.

Redirect Redirect Redirect Redirect Redirect Redirect Redirect

이미 안봐도 끝났다.

HTTP:80 으로 들어오는 모든 요청을 HTTPS:443 으로 리다이렉트 시켜주는 리스너를 추가해준다.

이렇게 추가로 리스너 설정까지 해주면 사이트로 오는 모든 요청에 HTTPS 를 적용해줄 수 있다.


이상 간단한 것 같으면서도 나름 복잡한 AWS를 활용한 HTTPS 설정이였다..!

profile
GyUL의 Backend 개발일기

0개의 댓글