
128.46 달러 = 한화 약 17만 8천원 과금 철회 승인 받았습니다....
휴우....
아래는 문제 원인과 해결방안을 자세히 풀어서 적어놓았습니다
문제 발생

어느날 잘 되던 오토스케일링이 잘 작동하지 않았다.
분명 인스턴스 최소 용량을 1로 설정해두었는데, 0 -> 1로 새롭게 생성하는데, 계속 문제가 생기는 것이었다.
상단의 스크린샷에서 url 링크에 들어가보니,
AWS측에서 액세스키의 비정상적인 접근이 발견되었다고 연락이 왔다.


이것을 확인하자마자 액세스 키를 비활성화한후, 삭제했다.
그리고, 놀라운 상황을 맞이하게 되는데...
바로 과.금.폭.탄이다..

내가 쓰고 있는 서울 리전이외에, 버지니아 북부, 아일랜드, 시드니, 싱가폴 리전에서 인스턴스를 생성하여 가동했고,
이것은 외부 침입자의 흔적이었다.
거의 한화 18만원의 과금이 청구되었다..
이런적은 처음이었기에 너무 당황했지만, 먼저 원인 파악부터 해보고자 하였다.
원인 파악
내가 의심한 정황은 2가지였다.
(1) GitHub private 레포지토리에 .env 파일을 업로드한 경우
(2) 구글 드라이브에 .env 파일을 업로드한 경우
그리고, 이 중 1번의 가능성이 높았다.
GitHub private repo의 특성
- GitHub는 private repo라고 하더라도, 액세스 권한을 가진 팀원이나, 협업 과정에서 실수로 public으로 전환되거나 fork, clone 과정에서 키가 노출될 가능성이 있습니다.
- 무엇보다도, GitHub은 공격자들이 가장 집중적으로 크롤링/스캐닝하는 플랫폼입니다. GitHub 자체적으로도 Secret scanning 기능을 제공할 정도로, AWS Access Key 같은 민감 정보가 repo에 올라오면 자동 수집/악용될 확률이 매우 높습니다.
- 특히 한 번이라도 해당 repo가 public으로 노출되었다가 다시 private으로 바뀌었거나, 다른 사람이 fork했다면, 그 시점에 키가 복제되어 유출될 수 있습니다.
실제 사례 패턴과 부합성
- 말씀하신 것처럼 서울 리전 외 다른 해외 리전에서 인스턴스 생성이 발생한 것은 전형적인 AWS Access Key 유출 공격 패턴입니다.
- 이는 자동화된 봇/스크립트가 GitHub에서 키를 수집 → 전 세계 리전에서 마이닝/스팸 인스턴스를 무차별 생성하는 식으로 많이 발생합니다.
- Google Drive 단독 유출로 이런 일이 벌어지는 건 상대적으로 드뭅니다.
✅ 결론적으로, 가장 유력한 원인은 GitHub private 레포지토리에 .env 파일 업로드한 것이고, 그 이유는 GitHub이 공격자들의 주요 스캐닝 타겟이자 유출 가능성이 높기 때문이다.
실수로 .env 파일을 업로드 한후, 며칠이 지나 확인하고, 지웠지만,
깃 히스토리는 여전히 남아있어, 유출 문제가 여전히 남아있었다.(이래서 .env 파일을 쓰지 말라는 것이군...)
대처 방안
내가 먼저 정황을 설명하고, AWS 측에 과금 철회를 부탁드렸다.
그리고 aws 측에서 받은 회신 전문이다.
AWS측 회신
지은 정 님께,
계정 복구를 위해 필요한 보안 조치를 완료해 주셔서 감사합니다.
참고로, AWS 고객 계약서를 정기적으로 검토해 주시기 바랍니다:
AWS 고객 계약서: https://aws.amazon.com/agreement/
서비스를 사용하는 과정에서 따르는 약관과 책임을 충분히 이해하셔야 합니다.
이번 보안 사건과 관련된 계정의 모든 제한은 해제되었습니다.
이제 저희 Billing Adjustments 팀에서 고객님이 승인하지 않은 사용 요금에 대해 검토할 예정입니다. 다만 그 전에, 동일한 문제가 다시 발생하지 않도록 하기 위해 아래 단계를 완료해 주셔야 합니다:
1. 비용 및 사용량을 모니터링할 수 있는 서비스 중 최소 2개 설정하기
- Budgets: https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html
- Amazon CloudWatch: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/gs_monitor_estimated_charges_with_cloudwatch.html#gs_turning_on_billing_metrics
- 참고: CloudWatch 청구 알람은 반드시 북미 버지니아(N. Virginia) 리전에서 생성해야 합니다.
- AWS CloudTrail: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html
- AWS Trusted Advisor: https://docs.aws.amazon.com/awssupport/latest/user/get-started-with-aws-trusted-advisor.html
- AWS Cost Anomaly Detection: https://docs.aws.amazon.com/cost-management/latest/userguide/getting-started-ad.html#create-ad-alerts
또한, 계정에 인터넷에 노출된 리소스나 API가 있다면 AWS WAF 사용을 고려하시기 바랍니다. AWS WAF는 잘 알려진 공격 유형으로부터 워크로드를 보호할 수 있습니다.
- AWS WAF 문서: https://docs.aws.amazon.com/waf/latest/developerguide/getting-started.html
- AWS WAF 요금: https://aws.amazon.com/waf/pricing/
추가적으로 비용 및 사용량 관리에 관한 내용은 아래 링크를 참고하세요:
https://docs.aws.amazon.com/cost-management/latest/userguide/what-is-costmanagement.html
2. 보안 모범 사례 중 최소 1개 설정하기
- Security Hub: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-enable.html
- GuardDuty: https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_settingup.html
또한, 계정의 루트 사용자에 대해 반드시 MFA(다중 인증) 가 활성화되어 있어야 합니다.
3. 지원 케이스에 회신 시
- 어떤 비용 및 사용량 모니터링 서비스 2개를 설정했는지,
- 어떤 보안 모범 사례 1개를 설정했는지 반드시 알려주셔야 합니다.
또한, 보안 문제 발생 시 빠른 연락을 위해 보조 보안 연락처를 추가하고 계정의 연락처 정보를 최신 상태로 유지해 주시길 권장합니다:
- 보조 연락처 업데이트: https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-alternate.html#manage-acct-update-contact-alternate-edit
- 기본 연락처 업데이트: https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact-primary.html
⚠️ 주의: 위와 같은 예방 조치를 설정하지 않으면
- 6월~8월 동안 발생한 무단 사용 요금에 대한 조정 요청을 제출할 수 없으며,
- 동일한 문제가 다시 발생할 경우에도 향후 청구서에 대해 조정 요청을 제출할 수 없습니다.
예방 조치를 설정하는 데 즉시 도움이 필요하시다면 “Chat” 또는 “Call” 옵션을 통해 지원을 요청하시기 바랍니다.
이해와 협조에 감사드립니다.
고객님의 의견을 소중히 생각합니다. AWS Support Center에서 이번 메일과 다른 대응들에 대해 별점을 선택해 평가해 주시면 감사하겠습니다.
감사합니다.
Luis Fernando S.
Amazon Web Services
요약하자면, AWS 측이 요구하는 추가적인 보안 절차를 설정해야지만,
과금 철회를 검토해보겠다는 내용이었다.
그리고, 바로 실행에 들어갔다.
- AWS Budgets 설정
👉 예산을 설정해서 비용이 초과될 때 이메일 알림을 받는 기능입니다.
25년 9월부터 한달 요금이 100달러를 넘기는 경우, 팀원 3명에게 이메일을 전송하는 알람을 설정해두었습니다. - Amazon CloudWatch Billing Alarm 설정
👉 실시간 요금이 특정 금액을 초과할 때 CloudWatch 알람으로 알려줌.이것 또한 계정 총 요금이 100달러를 초과할때, CloudWatch 알람이 생성되도록 했습니다.
⚠️ 중요: CloudWatch Billing Alarm은 반드시 N. Virginia(us-east-1) 리전에서만 설정해야 합니다. - GuardDuty 활성화
- 계정의 루트 사용자에 대해 반드시 MFA(다중 인증) 가 활성화




=> 이렇게 4가지를 모두 완료하고, 회신을 하자 계정 잠금을 복구할 수 있었다.