AWS Cerificate Manager를 통해 HTTPS 통신 구현하기

SummerToday·2024년 7월 28일
0
post-thumbnail
post-custom-banner

AWS Elastic Beanstalk에 배포해놓은 블로그 서비스에 해킹의 시도가 발견되었는데, 1차적으로 해킹을 시도하던 IP의 접속을 차단하였고, 2차적으로 HTTPS 보안 통신을 구현해야겠다고 생각하여 ACM을 이용하여 HTTPS를 구현해보고자 한다.

일단, 제일 기본적인 HTTPS 통신을 이용해 통신 중 데이터를 암호화라도 해야지 안심이 될 것 같았다. 애당초 서버에는 민감한 개인정보가 저장이 되지 않기도 해서, HTTPS 통신을 활성화 하는 것이 가장 최우선이라고 생각했다.

ACM에서 SSL/TLS 인증서 발급

  • SSL/TLS 인증서
    SSL/TLS 인증서는 인터넷 상에서 안전한 통신을 보장하기 위해 사용되는 디지털 인증서이다. SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 웹 브라우저와 웹 서버 간에 전송되는 데이터를 암호화하여 도청, 변조 및 위조를 방지하는 프로토콜이다. SSL은 이제 거의 사용되지 않으며, TLS가 그 역할을 대체하고 있다.

  • ACM 서비스에 접속하여 인증서를 요청한다.


  • 검증 대기 중인 인증서에 Route53에서 레코드를 생성해준다.


  • 5분 정도 기다려주면 인증서 발급이 완료된다.


AWS Elastic Beanstallk에 ACM 인증서 등록

  • Elastic Beanstalk에 ACM 인증서를 등록하기 위해 Elastic Beanstalk에 접속하여 구성 탭에 들어간다.


  • 오토스케일링 그룹을 설정해준다. 비용 절감을 위해 최대 인스턴스 개수는 2개로 설정하였다. 참고로 단일 EC2인 경우에는 HTTPS 연결을 위해 EC2 인스턴스에서 Let's Encrypt 인증서를 직접 발급 받아 설정해주어야 한다. 복수개의 EC2인 경우에는 이처럼 ELB를 이용해 쉽게 HTTPS를 구현할 수 있다.


  • 리스너에 HTTPS의 443 포트를 등록해준다. 인증서는 ACM에서 발급 받은 인증서를 선택해준다.


AWS Route53 설정

참고로 이미 전에 Route53 DNS 호스팅 설정을 통해 inkyung.site를 통해 해당 서비스를 접속할 수 있도록 구현해놓은 점을 참고 바란다. 이 과정도 정리를 했어야 했는데, 급하게 설정하느라 블로그에 정리를 아직 못했다.. 시간 될 때 이에 대해 추가 포스팅을 할 예정이다.

기존 단일 EC2 환경에서는 도메인에 EC2 IP주소를 매핑해주기만 하면 됐지만, ELB를 통해 트래픽이 여러 EC2로 분배되는 경우에는
도메인값과 ELB의 DNS 이름을 매핑시켜주어야 한다. 그러면 Route53을 통해 ELB를 거쳐 Auto Scailing Group에 있는 EC2들로 트래픽이 진행된다.

  • Route53 서비스에 접속하여 호스팅 영역을 설정한다.


  • 첫번째 A 레코드를 편집하여 ELB의 DNS 이름을 매핑시켜준다.


잠시 시간을 기다려주면 설정이 완료된다.


테스트

https://inkyung.site/login

위 링크에 접속하여 사이트가 정상 동작하는 지 확인한다.

HTTPS 연결을 통해 정상 동작하는 것을 확인하였다.

이로써 SSL/TLS 프로토콜을 사용하여 서버와 클라이언트 간에 전송되는 데이터를 암호화하고, 이를 통해 중간에서 데이터가 도청되거나 가로채이는 것을 방지할 수 있게 되었다.

해킹을 시도한 IP 접속을 차단하고 HTTPS 통신을 구현했으니, 이 전과 달리 보안성이 향상이 되어 그나마 안심이 되었고, 왜 웹이나 앱의 보안이 중요한 지 이번 기회를 통해 확실히 깨달은 것 같다. 여기서 멈추지 않고 여유가 되면 WAF도 구축해볼 예정이다.

profile
IT, 개발 관련 정보들을 기록하는 장소입니다.
post-custom-banner

0개의 댓글