-
AWS CloudFront에서 CloudFlare로 이관한 후기Cloud Computing 2023. 9. 20. 03:13
2023년 6월, 여러 게임의 편의 기능을 제공하며 유저를 조금씩 모아보겠다는 취지로 사이드 프로젝트를 개발하여 오픈했다.
개발 시간은 1.5일 정도 걸렸지만 오픈한지 한 달이 되던 때에 하루에 700~800명 정도가 사용하고, 리텐션은 40%가 살짝 넘는 지표를 오가닉으로 만들어냈다.
지표는 점점 성장 중이었고, 서비스 확장에 대한 고민을 하며 하루를 보내던 중 충격적인 문자메시지를 받았다.
당시 이미지와 같은 리소스 크기가 비교적 큰 것들은 AWS 외부의 호스팅을 이용했고, 서버 연동이 일체 없는 정적 웹사이트를 호스팅해서 서비스 중이었다.
CloudFront 및 S3의 비용은 굉장히 넉넉하게 프리티어의 선을 넘지 않을 것이라고 생각했기에 어떠한 모니터링도 진행하지 않았다.
과금 메시지를 보고 당황해서 상세 내역을 확인해 보니 결제 건의 전체가 CloudFront의 비용이었다.
서비스 하던 CloudFront의 Distribution 로그를 확인한 결과 서비스가 DDoS 공격(L7, HTTP Flood)을 당하는 중이었다.
공격자는 VPN에서 여러 아이피를 대여하여 수천 개의 아이피로 분당 수만 개에서 많게는 수십만 개의 요청을 보내는 중이었다.
상황파악 후 WAF를 걸어서 트래픽을 완화시켰고, 공격자도 차단을 확인했는지 며칠 동안 공격이 중단되었다.
일주일 정도 지났을까.. 골 때리는 상황이 발생했다. 공격자가 요청이 차단을 당하던 말던 막무가내로 트래픽을 보내기 시작한 것이다.
AWS WAF는 L7 방화벽으로 CloudFront에 연동하여 사용한다.
공개되어 있는 많은 자료들이 AWS WAF가 설정된 아키텍처를 WAF -> CloudFront -> Origin으로 표기하곤 하는데 사실상 CloudFront -> WAF -> Origin 그림이 정확하다.
따라서 Origin으로 트래픽을 보내는 것을 막아주고, 본래의 Origin Content가 소비되는 것을 막아주기는 한다.
하지만 문제는 WAF에서 트래픽을 필터하기 전, AWS CloudFront가 온전히 트래픽을 받기는 했기 때문에 해당 비용은 개발자에게 과금된다.
그런데 이게 생각보다 굉장히 요금이 크다.
https://aws.amazon.com/ko/cloudfront/pricing/
위의 요금을 참고하면 CloudFront의 요금은 아래처럼 정리할 수 있다.
1) CloudFront에서 외부망으로 나가는 송신 요금 (GB당 과금)
2) CloudFront에서 오리진(내부망 또는 뒤의 프록시)으로 보내는 송신 요금 (GB당 과금)
3) 요청 요금 (10,000개당 과금)
WAF로 인해 2번의 과금 건은 발생하지 않게 되었으나, 공격을 당하는 입장에선 나머지 항목도 굉장히 큰 부담이었다.
3번의 요청 요금도 컸지만, WAF에서 공격자를 차단하게 되면 어떻게든 차단했다는 응답 프로토콜을 내보내게 되는데 그 트래픽 사이즈 또한 온전히 개발자의 부담이다.
또한, CloudFront만 과금하는 것이 아니다. WAF 비용은 별개이다. 이것 또한 무시하지 못할 금액이다.
https://aws.amazon.com/ko/waf/pricing/
WAF가 아닌 더 확실한 대응이 필요했다. CloudFront로 요청이 오기 전 프록시 서버에서 DDoS를 막아준다던가, 공격자 아이피를 CloudFront 서버의 L3 단계에서 차단하는 솔루션이 필요했다.
AWS는 클라우드 컴퓨팅 회사 중 단연 탑으로 많은 기능을 제공한다.
해당 솔루션이 없을리는 없었고, 조금의 서치만으로 AWS Shield Advanced 라는 것을 알게 되었다.
https://aws.amazon.com/ko/shield/pricing/
AWS Shield Advanced를 보고 CloudFront를 못 쓰겠다는 결론을 지었다.
기본 3,000 USD + 추가금은 너무 대기업에 특화된 솔루션이 아닌가 한다.
나는 AWS의 CloudFront를 굉장히 자주 사용해 왔었다.
AWS 서비스에서 외부로 나가는 Outbound 비용은 99% CloudFront가 압도적으로 싸고 성능도 좋다.
예를 들면, EC2를 보자 : https://aws.amazon.com/ko/ec2/pricing/on-demand/
위의 CloudFront 요금 정책과 비교해 보면 감이 오겠지만 EC2도 그렇고 대부분의 AWS 서비스는 외부와 통신할 때 CloudFront를 무조건 연동하는게 압도적인 이득을 볼 수 있다.
많은 사람들이 EC2나 EC2 앞에 Application Load Balancer를 두고 EC2에 인증서를 직접 설치하여 해당 Public URL을 DNS에 바로 등록해서 사용하곤 하는데 이는 굉장히 비효율적인 구성이다.
그래서 지금껏 서비스를 CloudFront 없이 배포했던 적이 없다.
하지만 이번 서비스는 해당 과금정책으로 인해 CloudFront를 과감하게 버리게 되었다.
네이버 등 다른 클라우드 업체를 서치해 봤으나 DDoS 방어 솔루션 중 마음에 드는 과금 정책을 가진 클라우드 업체를 찾기 어려웠는데,
해당 업체에서 1등이라고 소문이 자자한 CloudFlare의 과금정책을 확인했더니 굉장히 만족스러웠다.
https://www.cloudflare.com/ko-kr/plans/
WAF와 트래픽 상관없이 무료이다. 그래서 과감하게 바로 CloudFlare로 갈아탔고 현재까지도 만족하며 이용하고 있다.
결과적으로 현재의 구조는 아래처럼 구성되었다.
AWS 오리진에서 CloudFlare로 보내는 비용이 CloudFront를 붙였을 때보다 비싸긴 하지만 공격을 받는 입장에선, 그리고 받을 수도 있는 서비스 업체 입장에선 CloudFlare를 이용하지 않을 수 없을 것 같다.
TMI지만, DDoS 공격자를 유추할 수 있게되어 실제로 소송을 준비했었다.
소송 전 마지막으로 공격자에게 사과 및 과금된 건에 대한 배상을 요청했고 원만하게 합의하여 끝났다.
우리가 만든 서비스를 본인도 비슷하게 만들어보고 싶었고 질투해서 공격한 거라고 하더라.
DDoS 공격으로 우리가 서비스를 내리게 되면 오픈소스를 할 줄 알았던 듯 하다.