4월 말, Google Cloud에서 메일 한 통을 받았다.
“프로젝트에서 의심스러운 활동이 감지됐다.”
처음에는 오탐이라고 생각했다.
그런데 결제 내역을 확인하니 내가 사용하지 않은 Gemini API 호출이 폭증했고, 이미지 생성 기능까지 사용되면서 약 473만 원의 비용이 발생하고 있었다.
더 이상했던 점은 하나였다.
문제가 발생한 프로젝트에서는 Gemini를 사용하지 않았다.
결론부터 말하면 Google에서 문제 비용의 100%를 조정받았고 최종적으로 카드 환불까지 받았다.
하지만 과금이 발생한 4월 말부터 실제 돈을 돌려받은 8월 말까지 약 4개월이 걸렸다.
그리고 개인적으로는 473만 원이 청구된 것보다 Google의 환불 과정이 더 힘들었다.
Gemini를 안 쓰는 프로젝트에서 Gemini 이미지 생성 비용이 나왔다
문제가 발생한 프로젝트는 Google Maps 등 여러 Google API를 사용하던 오래된 프로젝트였다.
Gemini는 사용하지 않았다.
그런데 비용을 세부적으로 확인하니 Gemini 이미지 생성과 이미지 출력 관련 사용량이 대량으로 발생해 있었다.
내 서비스에서는 해당 기능을 호출하지 않았다.
Google의 보안 시스템도 같은 프로젝트에서 이상 활동을 감지해 먼저 경고 메일을 보냈다.
단순한 사용량 증가라고 보기 어려웠다.
의심되는 것은 오래된 Google Maps용 키였다
프로젝트에는 Google Maps 등에 사용하는 API 키가 여러 개 있었다.
그중 하나는 웹사이트에서 사용하기 위해 웹사이트 주소 제한을 적용해둔 상태였다.
하지만 문제가 있었다.
사용할 수 있는 Google API 자체는 제한하지 않았다.
즉,
웹사이트 제한
→ 적용
호출 가능한 API 제한
→ 미적용
상태였다.
나는 Google Maps용으로 만든 키이니 당연히 Maps 위주로 사용될 것이라고 생각했다.
하지만 Google의 표준 API 키는 별도로 API 제한을 걸지 않으면 해당 키를 허용하는 다른 Google API에서도 사용할 수 있는 구조였다.
정확히 이 키가 악용됐다는 사실은 끝내 확인하지 못했다.
Google은 과거 요청에서 정확히 어떤 API 키와 IP가 사용됐는지 내가 확인할 수 있는 수준의 상세 정보를 제공하지 않았다.
따라서 특정 키의 유출을 단정하기보다는,
Gemini를 사용하지 않는 프로젝트에서 비정상적인 Gemini 이미지 생성 요청이 발생했다
는 사실을 중심으로 Google에 조사를 요청했다.
그런데 나만 겪은 일이 아니었다
사건 이후 찾아보니 Google의 공식 개발자 포럼에 매우 비슷한 글들이 계속 올라오고 있었다.
- 몇 년 전 Safe Browsing용으로 만들었던 오래된 Google API 키에서 수천 달러의 Gemini 비용 발생
- 프론트엔드에 포함된 키가 악용돼 약 40분 만에 수천 달러 발생
- Firebase 브라우저용 키와 관련해 짧은 시간에 수만 유로의 Gemini 사용량 발생
공통점은 기존 Google API 키와 Gemini 과금의 조합이었다.
그리고 Google도 결국 이 부분을 바꾸기 시작했다.
현재 Gemini API는 제한 없는 표준 키의 요청을 거부하고 있으며, 새 Gemini 키는 기존 범용 API 키와 분리되는 방향으로 변경되고 있다.
Google 공식 안내 역시 AI용 키를 별도 프로젝트에 만들고 Gemini API만 사용할 수 있도록 제한할 것을 권장한다.
내가 사고를 겪었던 시점과 비교하면 상당히 중요한 변화다.
Google이 이상 활동을 발견했는데도 과금은 이미 473만 원
아쉬웠던 부분은 이것이다.
Google의 보안 시스템은 프로젝트의 이상 활동을 감지했다.
그런데 내가 이를 확인했을 때는 이미 카드 결제까지 진행된 뒤였다.
생성형 AI API는 일반적인 API와 달리 비용 증가 속도가 매우 빠르다.
이미지 생성 같은 고비용 기능을 자동으로 반복 호출하면 짧은 시간에도 큰 비용이 만들어질 수 있다.
결제 알림이나 이상 감지가 있어도 과금을 막아주는 장치가 아니라면 발견했을 때는 이미 늦을 수 있다.
실제로 Google 개발자 포럼에도 수십 분 또는 몇 시간 만에 수천 달러에서 수만 유로까지 비용이 증가했다는 사례들이 올라와 있다.
더 힘들었던 것은 환불이었다
보안 문제를 해결하면 바로 환불될 거라고 생각했다.
전혀 아니었다.
처음 문의한 Google 신뢰 및 안전팀에서는
“보안 문제와 결제 문제는 담당 부서가 다르다.”
며 결제 지원팀에 새로 문의하라고 했다.
결제 지원팀에서는 처음에 카드사를 통한 이의제기를 안내하기도 했다.
하지만 나는 계속 다음 사실을 전달했다.
- 원래 Gemini를 사용하지 않는 프로젝트였다.
- 사용하지 않는 이미지 생성 기능이 호출됐다.
- Google의 보안 시스템도 같은 시점에 이상 활동을 감지했다.
- 정상적인 고객 사용량이 아니므로 내부 조사가 필요하다.
결국 전문 부서 조사로 넘어갔고 Google에서도 특정 날짜에 Gemini 사용량이 비정상적으로 급증했다는 사실을 확인했다.
여러 차례 자료를 제출한 뒤 약 473만 원 전액에 대해 결제 조정이 승인됐다.
여기서 끝인 줄 알았다.
“전액 조정 완료”는 “카드 환불 완료”가 아니었다
Google이 100% 조정을 승인했지만 카드에서 돈이 바로 돌아오지는 않았다.
조정된 금액은 먼저 Google Cloud 결제 계정의 마이너스 잔액, 즉 환불 가능한 크레딧으로 들어왔다.
그래서 다시 환불을 신청해야 했다.
여기부터 상당히 혼란스러웠다.
환불 중인데 ‘결제하기’ 버튼이 나타났다
환불 상태를 확인하려고 결제 화면에 들어갔다가 결제하기 버튼을 눌렀고 실제로 471만 원이 다시 결제됐다.
결국 이 금액까지 다시 환불받아야 했다.
환불 중인 계정에서 이런 버튼이 노출되는 사용자 경험은 상당히 당황스러웠다.
카드 한도를 낮추자 환불까지 실패했다
추가 결제가 두려워 카드 한도를 낮췄다.
그런데 며칠 뒤 카드 앱에 471만 원짜리 Google Cloud 거래가 계속 승인 거절로 나타났다.
나는 Google이 다시 결제를 시도하고 있다고 생각했다.
Google에 문의하고서야 이 거래가 결제가 아니라 카드 환불 시도였다는 설명을 들었다.
Google 설명에 따르면 카드 한도를 줄인 영향으로 은행에서 환불 거래까지 거절하고 있었다.
카드사 앱에서는 결제 실패인지 환불 실패인지 명확하게 구분되지 않았다.
“결제 계정을 닫으세요” → 닫았더니 “카드 환불을 다시 할 수 없습니다”
다음 안내는 더욱 복잡했다.
Google에서는 한국 원화 결제 계정의 잔액을 카드로 돌려받으려면 결제 계정을 닫으라고 안내했다.
안내대로 계정을 닫았다.
그런데 카드 환불이 실패한 뒤 다시 시도해달라고 요청하니 이번에는
“결제 계정이 이미 닫혀 있어서 카드 환불을 다시 실행할 수 없다.”
는 답변이 왔다.
결국 이번에는 은행 계좌로 직접 보내는 수동 해외송금 환불 절차를 안내받았다.
이름, 주소, 은행 정보, SWIFT 코드와 서명이 들어간 별도의 양식까지 작성했다.
심지어 한 번은 지원팀에서 보낸 안내에 내 이름이 아닌 다른 사람의 이름이 들어가 있는 경우도 있었다.
다시 확인을 요청해야 했다.
수동 송금을 준비했는데 다시 “콘솔에서 환불 신청하세요”
은행 송금 양식까지 제출하고 기다리던 중 또 다른 담당자로부터 답변이 왔다.
이번에는 다시
“Google Cloud 결제 화면에서 환불 요청 버튼을 누르라.”
는 안내였다.
앞에서는 닫힌 결제 계정 때문에 카드 환불이 불가능하다고 했는데, 다시 결제 계정을 열고 콘솔에서 환불 요청을 진행하게 됐다.
한 사건을 해결하는 동안
- 신뢰 및 안전팀
- 결제 지원팀
- 전문 조사팀
- 지급 담당팀
사이를 오갔고 담당자가 바뀔 때마다 설명이 조금씩 달라졌다.
환불 자체보다 현재 어떤 환불 절차가 유효한지를 확인하는 데 더 많은 시간이 들었다.
4월 29일 → 8월 말, 약 4개월 만에 종료
결국 결제 계정을 다시 열어 환불을 신청했다.
Google에서 환불 완료 메일을 받았지만 카드에는 바로 반영되지 않았다.
며칠 더 기다린 뒤 최종적으로 카드사를 통해 실제 환불을 확인했다.
사건이 본격적으로 발생한 시점은 4월 29일.
실제 카드 환불을 확인한 것은 8월 말.
약 4개월이 걸렸다.
결과적으로 문제 비용은 전액 돌려받았지만,
이상 과금 자체보다 환불 절차를 따라가는 과정이 훨씬 힘들었다.
이번 사건에서 Google에 아쉬웠던 점
사용자가 API 키를 제대로 제한해야 한다는 것은 맞다.
하지만 이번 사건을 단순히
“사용자가 API 키 관리를 잘못했다.”
로만 정리하기에는 아쉬운 부분이 많았다.
1. 기존 범용 Google API 키가 Gemini 과금으로 연결될 수 있었다
Google Maps나 Firebase처럼 과거부터 클라이언트에서 사용하던 Google API 키와, 짧은 시간에 막대한 비용을 발생시킬 수 있는 생성형 AI API가 같은 인증 체계 안에서 연결될 수 있었다.
Google이 이후 Gemini에서 제한 없는 키를 차단하고 인증 방식을 변경한 것도 이 문제를 줄이기 위한 방향으로 보인다.
2. Google이 이상 활동을 감지했지만 큰 비용은 이미 발생했다
보안 시스템이 이상 활동을 발견했다는 사실은 다행이었다.
하지만 경고를 받았을 때는 이미 상당한 비용이 발생하고 카드 결제까지 진행된 상태였다.
3. 결제 조정과 실제 환불이 지나치게 분리돼 있었다
100% 결제 조정 승인을 받고도 실제 카드 환불까지 몇 달이 더 걸렸다.
사용자 입장에서는 “전액 환불 승인”과 “실제로 돈이 돌아옴”이 전혀 다른 단계였다.
4. 지원 부서마다 안내가 달랐다
결제 계정을 닫으라고 했다가, 닫으니 환불 재시도가 불가능하다고 했다.
은행 송금 양식을 작성하라고 했다가 다시 콘솔에서 환불 신청을 하라고 했다.
내가 가장 힘들었던 부분이다.
5. 환불 과정의 화면도 이해하기 어려웠다
환불 중인 결제 계정에 결제하기 버튼이 보였고, 실제로 이를 눌러 수백만 원이 다시 결제되는 일까지 발생했다.
지금은 Google도 Gemini 키 구조를 바꾸고 있다
현재 Google은 Gemini API 보안을 이전보다 강화하고 있다.
제한 없는 기존 API 키는 Gemini API에서 사용할 수 없게 했고, AI Studio에서 새로 만드는 키도 Gemini용으로 분리되는 방향으로 변경하고 있다.
Google 역시 공식적으로
- AI API 키는 독립 프로젝트에서 만들고
- 필요한 API만 허용하고
- 애플리케이션 제한까지 적용
할 것을 권장하고 있다.
즉 지금 새로 Gemini를 시작한다면 내가 사고를 겪었을 당시와는 인증 구조가 달라지고 있다.
473만 원보다 값비쌌던 4개월
결국 돈은 모두 돌려받았다.
하지만 약 473만 원의 과금보다 이를 돌려받기 위해 4개월 동안 Google 지원팀과 주고받은 과정이 더 기억에 남는다.
이번 사건을 Google의 해킹이라고 주장할 근거는 없다.
정확히 어떤 키가 어떤 방법으로 악용됐는지도 확인하지 못했다.
하지만 적어도 한 가지는 분명하다.
기존 Google API 키와 고비용 생성형 AI API를 같은 방식으로 다루는 것은 위험했고, Google도 지금 그 구조를 바꾸고 있다.
오래된 Google Cloud 프로젝트를 가지고 있다면 한 번쯤 확인해보는 것을 권한다.
이 API 키는 어디에서 사용할 수 있는가?
그리고 더 중요하게,
이 API 키는 무엇을 호출할 수 있는가?
나는 그 차이를 473만 원이 청구되고, 다시 돌려받는 데 4개월을 쓰고 나서야 제대로 알게 됐다.
