10P by GN⁺ 2일전 | ★ favorite | 댓글 1개
  • AWS VPC 네트워킹과 NAT Gateway 구성 오류로 인해 S3 데이터 전송 비용이 하루 만에 약 $900, 한 달 누적으로 $1,000을 초과한 사례
  • EC2에서 S3로의 전송은 무료라고 알려져 있으나, VPC 내 NAT Gateway를 경유하면 유료 데이터 처리 요금이 발생
  • 문제의 원인은 S3용 VPC Gateway Endpoint 누락으로, NAT Gateway를 거치지 않고 S3로 직접 연결하는 설정이 없었던 점
  • Gateway Endpoint는 무료이며 데이터 전송 요금이 발생하지 않음, Terraform 등으로 간단히 설정 가능
  • AWS 인프라 운영 시 비용 감시와 VPC Endpoint 구성 점검의 중요성을 보여주는 사례

문제의 배경

  • Geocodio는 내부 대용량 지리 데이터 파일을 S3로 미러링하기 위해 AWS를 사용
    • 데이터는 주소 포인트, 경계 데이터, 인구조사 정보 등으로, 수 GB에서 수백 GB 규모
    • Hetzner에 호스팅된 ETL 플랫폼에서 AWS 처리 인프라로 정기적으로 동기화 필요
  • AWS의 데이터 전송 비용이 높음은 업계 전반의 공통 불만으로, Cloudflare와 Corey Quinn 등이 관련 문제를 지적
  • 작성자는 프로젝트 시작 전 비용 구조를 검토해
    1. 같은 리전 내 EC2–S3 전송은 무료
    2. S3로의 업로드(입력)는 무료
      라는 점을 확인하고 비용을 예측

예기치 못한 비용 발생

  • S3 동기화 프로세스 배포 후 AWS Cost Anomaly Detection에서 이상 경고 수신
    • 하루 동안 NAT Gateway 데이터 전송량이 20,167.32GB, 비용 $907.53 발생
    • 월 누적 비용이 이미 $1,000을 초과
  • EC2–S3 전송이 무료인 줄 알았던 상황에서 NAT Gateway 요금이 청구된 이유를 조사

원인 분석: NAT Gateway 경유

  • VPC에서 NAT Gateway를 사용하는 경우, S3 트래픽도 기본적으로 NAT Gateway를 통해 라우팅
    • 동일 리전 내 AWS 서비스로의 요청이라도 NAT를 거치면 GB당 $0.045의 데이터 처리 요금 발생
  • 이로 인해 EC2–S3 간 전송이 무료임에도 불구하고 NAT Gateway 비용이 청구
  • 해결책은 S3용 VPC Gateway Endpoint 생성
    • NAT Gateway나 Internet Gateway를 거치지 않고 VPC에서 S3로 직접 연결
    • 완전 무료이며 시간당 요금이나 전송 요금 없음

해결 과정

  • Terraform으로 인프라를 관리하고 있어, Gateway Endpoint 리소스를 추가하고 라우트 테이블에 연결
    • AWS가 자동으로 라우팅을 업데이트하여 S3 트래픽을 NAT Gateway 대신 Endpoint로 전송
  • 이후 NAT Gateway 관련 과금이 중단

교훈과 권장 사항

  • 오랜 기간 AWS를 사용했음에도 S3용 VPC Endpoint 설정 누락으로 인한 비용 발생
  • AWS 네트워킹은 복잡하며, 비용 구조는 설정 방식에 따라 크게 달라질 수 있음
  • 재발 방지를 위한 권장 사항
    • AWS Cost Anomaly Detection 활성화: 이상 비용을 조기에 탐지 가능
    • VPC Endpoint 사용: NAT Gateway를 사용하는 VPC에서 S3·DynamoDB 접근 시 필수
    • 가정 검증: “EC2–S3 전송은 무료”라는 전제만 믿지 말고, 소량 테스트 후 비용 모니터링 필요
    • 클라우드는 복잡함: 장기 사용자라도 지속적인 주의 필요
  • 유사 사례로 Recall.ai가 WebSocket 데이터 처리 비용으로 연간 $100만을 지불한 사례 언급

후속 조치

  • Geocodio는 모든 VPC의 S3 통신 경로를 점검하고 Gateway Endpoint 구성 완료
  • AWS 사용자에게 VPC Endpoint 설정 확인을 권장
  • 요약: NAT Gateway는 AWS 서비스로의 트래픽도 과금 대상이며, VPC Endpoint 사용으로 비용 회피 가능

추가 자료

Hacker News 의견
  • 세 개의 주요 클라우드 관련 서브레딧에서 이런 비용 폭탄 사례가 하루에 한 번꼴로 올라오는 걸 자주 봄
    클라우드 업체들은 항상 지연된 알림만 제공하고, 사용자는 그저 기도와 구제 요청밖에 할 수 없는 상황임
    게다가 일부는 “기술적으로 하드캡 계정을 제공하는 건 불가능하다”고 주장하지만, 실제로 Azure에는 이미 그런 계정이 존재함

    • 나는 이게 악의적인 의도라기보다는 무능과 인센티브 부재의 조합이라고 생각함
      10년 넘게 AWS를 써왔는데, 서비스 간 설계 불연속성과 조직 내 사일로화가 심각했음
      큰 조직에서는 KPI를 해칠 문제를 해결하려는 임원이 없고, 대신 AI나 블록체인 같은 유행 서비스 출시로 승진 점수를 쌓는 데 집중함
    • AWS가 어제 초과 요금 없는 정액제 요금제를 발표했음
      월 $0, $15, $200 플랜 중 선택하면, 예기치 못한 요청이나 데이터 전송 증가로 인한 요금 폭탄을 막을 수 있음
      AWS 공식 블로그 링크
    • 같은 소식인데, 이번엔 CDN용 정액제 요금제임. S3 스토리지와 대역폭도 포함된 $0 티어가 있음
      관련 HN 스레드
      비용 상한을 설정하면서 서비스 안정성을 유지하는 게 어렵긴 하지만, 이번 사례로 기술적으로 가능함이 증명됨
    • AWS는 고객이 실수로 과금되면 나중에 환불해주는 쪽을 택함
      서비스 중단이나 인프라 장애로 인한 평판 리스크를 피하기 위해서임
    • 이런 글에서 가장 슬픈 건 “우리가 청구서를 더 잘 이해했어야 했다”는 결론으로 끝나는 것임
      하지만 문제는 클라우드 자체일 수도 있음. 예측 가능한 비용 구조가 필요한 소규모 사업자에게는 클라우드가 적합하지 않을 수도 있음
  • 이런 일이 너무 자주 일어나서, S3 VPC 엔드포인트는 VPC 생성 시 기본으로 설정돼야 한다고 생각함
    그리고 NAT 게이트웨이 대신 fck-nat 같은 대안을 쓰면 GB당 트래픽 요금을 절약할 수 있음

    • 하지만 S3 Gateway 엔드포인트는 리전 간 S3 작업을 깨뜨림, 기본값 변경은 고객을 망가뜨릴 수 있음
    • IPv6로 전환하고 Egress Gateway를 쓰는 방법도 있음
    • 콘솔에서 VPC를 만들 때는 체크박스 하나로 설정 가능함
    • 콘솔이 아니라 IAC(Infrastructure as Code) 로 구축하는 경우엔 모든 구성을 명시적으로 작성하는 게 맞음
    • 기본적으로 VPC는 보안 우선 구조로 설계되어야 함
      기본 접근 거부 상태에서 명시적으로 인터넷 접근을 허용해야 하며, 그렇지 않으면 공격자가 데이터를 유출할 수 있음
  • 나도 비슷한 실수를 한 적 있음
    AWS 추천 알고리즘에 테스트용 데이터를 업로드하고 잊어버렸는데, 몇 달 뒤 은행에서 잔고 부족 알림을 받았음
    알고리즘이 계속 돌아가면서 매달 1천 달러 이상이 청구되어, 결국 5천 달러가 사라졌음

    • 나는 청구 부서에서 일한 적이 있어서 이런 일에 건전한 편집증을 가지게 됨
      매일 잔고를 확인하고, 모든 청구 메일을 중요 표시함
      그리고 각 서비스마다 가상 카드 한도를 설정해두는 습관을 들였음
  • 나도 같은 실수를 해서 6만 달러를 날린 적 있음
    왜 S3 엔드포인트가 기본으로 배포되지 않는지 이해할 수 없음

    • 내부 회의에서 “이걸 기본으로 넣자” 하면 “수익이 줄어든다”는 이유로 미뤄질 것 같음
    • “그게 1년치 연봉이지만, 직접 인프라를 셀프호스팅하는 복잡함을 생각해보라”는 식의 농담도 나옴
  • “왜 AWS 요금이 폭발했는가”라는 질문을 자주 받는데, 대부분 NAT + S3 + 잘못된 가정 조합임
    EC2→S3 전송은 무료지만, NAT를 거치면 유료가 됨
    그래서 나는 다음 체크리스트를 줌

    1. S3나 DynamoDB와 자주 통신하는 프라이빗 서브넷은 Gateway Endpoint 사용 고려
    2. NAT 비용을 별도 대시보드로 모니터링
    3. 대용량 데이터 이동 전에는 요금 흐름 다이어그램을 그려볼 것
      Cost Anomaly Detection이 제때 작동한 건 다행이었음. 1천 달러 손실도 아프지만, 2만 달러보다 낫음
  • AWS에서 데이터를 다운로드할 때 GB당 $0.09를 내야 한다는 걸 보고 놀람
    데이터를 업로드할 땐 무료인데, 다시 꺼내려면 돈을 내야 함?

    • 이건 락인 전략의 일환임. 들어오긴 쉽지만 나가긴 비쌈
      이번 사례는 NAT 설정 오류로 인해 내부 전송이 외부 전송으로 계산된 특이 케이스임
    • GB당 9센트는 거의 휴대폰 요금제 수준의 바가지 같음. 이런 이유로 Cloudflare가 인기를 얻는 듯함
    • 업로드는 싸지만 다운로드는 비쌈. 고객이 데이터를 사용자에게 제공할 때마다 AWS가 그 일부를 가져가는 구조임
    • 소비자용 서비스는 월정액에 포함되지만, AWS는 직접 비용을 인식하게 만드는 구조
    • “캘리포니아산, 나갈 수는 있지만 떠날 수는 없다”는 농담이 떠오름
  • Amazon이 이런 실수에 대해 환불해주는지 궁금함

    • 금액과 상황에 따라 다름. 나도 예전에 큰 금액을 환불받았지만, 여러 차례 소명과 재발 방지 계획을 제출해야 했음
    • 작성자가 “AWS가 계정 크레딧을 줄지도 모르니 결과를 업데이트하겠다”고 함
    • 실제로 AWS는 이런 경우 환불해주는 편임. 데이터가 실제로 외부로 나간 게 아닐 가능성이 높기 때문임
    • 나도 몇 번 환불받은 적 있음. 다만 재발 방지 조건이 붙음
    • 결국 고객 규모와 지불 능력에 따라 다름. 월 20달러 고객은 1천 달러를 못 내지만, 월 3천 달러 고객은 신경 안 씀
  • VPC NAT Gateway는 악명 높음
    예전에 Amazon 재직 중 비슷한 문제를 겪었지만, 회사 계정이라 돈은 안 냈음
    실제로 돈을 내야 하는 사람들은 정말 안타까움

    • 개인적으로 NAT 게이트웨이가 왜 이렇게 흔한지 이해가 안 됨. 대부분의 경우 Internet Gateway면 충분함
  • 이번 사례에는 직접 도움이 안 되지만, AWS가 어제 CDN용 정액제 요금제를 출시함
    S3 스토리지와 대역폭이 포함된 $0 티어도 있음
    관련 링크
    앞으로 다른 서비스에도 확대되길 기대함

  • 나도 22살 때 인프라를 처음 만지다 이틀 만에 300달러 요금을 맞은 적 있음
    AWS는 훌륭하지만, 초보자에게 비용 계산이 너무 불투명함

    • 왜 그걸 개선하지 않는지 궁금함