안녕하세요 SSAFYcial 9기 박철순입니다.
최근 프로젝트를 진행하며 배포 과정에서 사용했던 AWS의 CloudFront를 통해 HTTPS를 적용하여 SSL인증을 보다 쉽게 구성한 사례 및 방법을 공유하려고 합니다.
HTTPS란
우리가 보통 사용하는 웹 사이트를 보면 https://cheoltecho.tistory.com 처럼 HTTPS 프로토콜을 사용하며,
다음과 같이 자물쇠 모양으로 보안 연결이 되어 있는 것을 확인할 수 있습니다.
반면에 우리가 로컬 개발 시 실행하는 API 서버나, 클라이언트 서버는 http://localhost:8080 처럼 HTTP 프로토콜을 사용하는 것을 쉽게 볼 수 있습니다. 이렇듯 보안 연결이 사용되지 않았다고 경고하며, 웹 사이트에 대한 신뢰성이 떨어지게 됩니다.
HTTPS는 HTTP 프로토콜에 전송 중 데이터 유출을 방지하기 위해 통신에 보안을 추가한 프로토콜입니다.
자세히 말하자면 HTTP에 SSL 기술이 더하여 전달되는 데이터를 SSL 암호화하여 보안성을 높인 것입니다.
이러한 HTTPS를 적용하기 위해서는 다음과 같은 복잡한 절차가 필요합니다.
- HTTPS 인증서 구매/발급 (비용 발생)
- 인증서 병합 및 설정
- 웹서버에 인증서 설치
- 웹서버 설정 변경
- HTTPS 적용
- HTTP 리다이렉션 등등
HTTPS를 사용하려면 관련 인증서가 필요합니다. 이 인증서를 발급받는데에 비용이 발생합니다. 그리고 그 인증서를 적용하려는 웹서버에 올려 적용하고, HTTP > HTTPS 리다이렉션 등을 해야합니다.
AWS의 CloudFront를 사용하면 이러한 작업을 쉽게 처리할 수 있습니다.
CloudFront를 이용한 HTTPS 구성
다음은 제가 Trip Seed 프로젝트에 적용한 클라이언트-서버 아키텍처입니다.
Netlify로 배포된 웹서버와 CloudFront는 HTTPS 통신을 하고 CloudFront와 Rest API를 제공하는 EC2 API 서버는 HTTP 통신을 합니다.
그리고 일반적인 방식에서 SSL 인증서 발급을 위한 비용이 발생한다고 했었습니다.
AWS에서 인증서는 AWS Certificate Manager(ACM) 서비스를 통해 발급받을 수 있고, 무료로 발급이 가능합니다.
이러한 방식의 큰 장점은 HTTPS 통신을 웹서버에서 각각 적용할 필요 없이 인프라 레벨에서 해결할 수 있다는 것입니다.
Amazon CloudFront란?
AWS에는 다양한 클라우드 서비스가 존재합니다. 그 중에서 Amazon CloudFront 는 AWS의 CDN 서비스입니다.
CDN은 사용자에게 빠르고 안정적인 콘텐츠 전송을 위해 웹 콘텐츠를 전 세계 다양한 곳에 위치한 서버에 복제하여 사용자와 가까운 위치에서 콘텐츠를 제공합니다.
CloudFront는 유연한 설정 옵션을 제공하여 콘텐츠 전송을 커스터마이즈할 수 있습니다.
캐싱 동작, 인증 및 접근 제어, SSL/TLS(보안 소켓 계층/전송 계층 보안) 암호화, DDoS 보호 등을 구성할 수 있습니다.
또한 CloudFront 는 다른 AWS 서비스와 통합되어 사용자가 콘텐츠를 저장하고 제공하는데 사용하는 다른 AWS 서비스와 함께 작동할 수 있습니다.
AWS Certificate Manager에서 인증서 요청
이때 주의 사항으로 us-east-1 리전에서 SSL 인증서를 요청해야 합니다.
CloudFront에 사용되는 Custom SSL Certificate가 us-east-1 리전에만 지원되기 때문입니다.
CloudFront 생성
- 원본 도메인에 API 도메인 주소, EC2 주소를 입력합니다.
- Redirect HTTP to HTTPS 적용합니다.
- 발급했던 SSL을 연결합니다.
- 대체 도메인 이름을 설정해줍니다.
CloudFront 생성이 완료가 되면 이제 완료 되었습니다.
클라이언트가 CloudFront 대체 도메인으로 HTTPS 요청을 하면
CloudFront는 인증 작업을 거친 후 원본 도메인으로 HTTP 요청을 하고
결과값을 다시 클라이언트 웹서버로 전달하게 됩니다.
웹서버에서 CloudFront를 통해 컨텐츠를 잘 불러온 것을 확인할 수 있습니다.
마치며
HTTPS를 적용하는 방법은 CloudFront 이외에도 ALB 사용, certbot 등 다양한 방법이 있습니다.
CloudFront는 이러한 SSL 인증을 적용하는 것 외에도 필드 암호화를 통한 특정 데이터 암호화, 캐싱을 이용한 빠른 데이터 및 콘텐츠 전송 등을 할 수 있게 합니다.
AWS의 많은 서비스는 서로 연동되고 호환되며 개발의 생산성을 크게 향상시키는 것을 경험하였습니다.
[참고]
'Tech > Cloud' 카테고리의 다른 글
클라우드 인프라를 위한 x86서버 (4) | 2023.08.23 |
---|---|
[Reminder] Spring Cloud Netflix로 알아보는 MSA (0) | 2023.02.19 |