Explosión de cargos de €54,000 en 13 horas: solicitudes a Gemini API causadas por una clave de navegador de Firebase sin restricciones de API
(discuss.ai.google.dev)- Una clave de navegador de Firebase expuesta sin restricciones de API permitió que desde fuera se generaran solicitudes automáticas a Gemini API, provocando cargos enormes en poco tiempo
- Se facturaron más de €54,000 en 13 horas sin relación con el tráfico real de usuarios, y la alerta de costos se activó con retraso, demorando la respuesta
- El equipo de soporte de Google Cloud clasificó esas solicitudes como uso válido (valid usage) y rechazó la solicitud de ajuste de cobro
- Google incorporará funciones de protección como límites de gasto, claves de autenticación, bloqueo automático de claves y prepago, y retirará gradualmente el uso de claves sin restricciones
- Los desarrolladores no deben incluir claves en el código del cliente y deben aplicar obligatoriamente restricciones de API keys y límites de presupuesto
Caso de fuerte aumento en los cargos de Gemini API por exposición de una clave de navegador de Firebase
-
Resumen del incidente
- En un proyecto que antes solo usaba Firebase Authentication, el uso de Gemini API se disparó justo después de habilitar Firebase AI Logic
- En poco tiempo se produjeron solicitudes automatizadas sin relación con el tráfico real de usuarios, lo que generó más de €54,000 en cargos durante unas 13 horas
- El tráfico anómalo se detuvo después de desactivar la API y rotar las credenciales (credentials)
- La alerta de presupuesto (€80) y la alerta de detección de anomalías de costos se activaron con varias horas de retraso; para entonces, el costo ya había llegado a unos €28,000
- El monto final facturado quedó en más de €54,000 debido al retraso en el reporte de costos
-
Resultado del soporte de Google Cloud
- Aunque se enviaron logs y materiales de análisis, las solicitudes se clasificaron como uso válido (valid usage) originado en el proyecto, por lo que se rechazó la solicitud de ajuste de cobro
- Aun cuando ese uso era anómalo y no correspondía a tráfico impulsado por usuarios, el sistema lo procesó como un cargo normal
-
Consultas del usuario
- Se preguntó si existen casos similares tras activar Firebase AI Logic o Gemini
- Se consultó si hay medidas de protección adicionales aparte de App Check, cuotas y mover las llamadas al servidor
- También se preguntó si existe una ruta de escalamiento (escalation path) adicional para este tipo de casos
Respuesta de Google (Logan Kilpatrick)
-
Funciones de facturación y límites de uso
- Ya se introdujeron límites de facturación para usuarios de Gemini API (billing account caps), y los usuarios Tier 1 quedan bloqueados automáticamente después de un límite mensual de $250
- Es posible configurar límites de gasto por proyecto (project spend caps); por ejemplo, una cuenta personal puede limitarse a $50
- Todos los reportes de facturación tienen un retraso aproximado de 10 minutos
-
Seguridad de API keys y cambios previstos
-
El uso de API keys sin restricciones (unrestricted key) será deshabilitado pronto en Gemini API
- A los nuevos usuarios se les genera por defecto una Auth key, una forma más segura que antes
- No se deben incluir claves en el código del cliente, porque si se exponen pueden generar costos
- Existe una función que detecta automáticamente claves expuestas en la web pública y las desactiva, y hubo casos en los que se bloquearon en cuestión de minutos
-
-
Restricciones de claves y alcance del servicio
-
Las claves creadas en Google AI Studio quedan restringidas por defecto solo a Gemini API
- En cambio, las claves creadas por otras vías, como Google Cloud Console, pueden acceder a varios servicios, por lo que es necesario configurar restricciones por servicio si hace falta
-
-
Medidas adicionales y planes a futuro
- Para revisar el caso, se pidió contacto directo por correo electrónico a Lkilpatrick@google.com
- Se introdujo un sistema de facturación prepaga (prepaid billing) y se está migrando a un modelo de pago antes del uso
- Actualmente ya se aplica a cuentas nuevas en Estados Unidos y se está ampliando de forma gradual al resto del mundo
- Estas medidas buscan reforzar el control de costos para los desarrolladores y evitar cargos inesperados
1 comentarios
Opiniones en Hacker News
Configuramos alertas de presupuesto (€80) y alertas de anomalías de costo, pero ambas se activaron con varias horas de retraso
Cuando reaccionamos, el costo ya había llegado a €28,000, y al final se nos cobraron más de €54,000 debido al retraso en el reporte de costos
En una situación así, la excusa de esas tres empresas de que “un hard spending cap es técnicamente imposible” no resulta convincente
No tiene sentido decir que un límite duro es imposible; como mínimo deberían darle la opción al usuario
Antes este tipo de errores eran simplemente bugs; ahora pueden llevarte a la quiebra
Si contratas que te cambien los azulejos del baño y luego te cobran una remodelación del jardín, obviamente deberías tener derecho a rechazarlo
Dicho eso, por mi experiencia trabajando con sistemas de cobro de telecomunicaciones, entiendo que agregar logs de tamaño TB toma tiempo
Aun así, las telecos normalmente asumen entre 2% y 3% de deuda incobrable y tratan mejor al cliente
Google también debería tener una respuesta más elegante en situaciones como esta
Sobre todo si esto pasó justo después de que la clave de IA quedara expuesta, Google debería haber detectado el escaneo de claves y haberlo bloqueado
Pero en la práctica parece que esa función no está funcionando bien
Yo también tuve una experiencia parecida
Configuré un presupuesto de $100 en GCP, pero no recibí el correo de alerta hasta 5 horas después de haberlo superado
Sorprende que esta función no sea una prioridad
A corto plazo quizá reduzca los ingresos de Google, pero cualquier desarrollador que viva algo así no lo va a volver a recomendar
Nuestro equipo de 2 personas estuvo a punto de hundirse por un runaway job
Siguiendo la recomendación de GCP, conectamos las alertas con un kill switch, pero la alerta llegó 6 horas tarde
Al final solo nos reembolsaron cuando presentamos pruebas
Google dijo que “había demasiados line items y el pipeline se atrasó”, pero se supone que el sistema está justamente para esos casos, ¿no?
Me pregunto cómo terminó el ajuste de costos con Google
Ningún cloud construye primero una función para cortarse la fuente de dinero
Es la imagen típica del capitalismo tardío
Si ves los resultados de búsqueda en GitHub, hay muchos casos donde tokens de Gemini API quedaron expuestos tal cual en repos públicos
Google durante mucho tiempo no trató las API keys como secretos, y de repente con las claves de LLM pasó a considerarlas secretas
Lo más probable es que el autor haya expuesto la clave en el frontend o durante algún proceso de compartir código
También está indicado en este hilo relacionado de HN y en la documentación oficial
Por eso sorprende que vuelva a aparecer un caso así
“Your API key was reported as leaked. Please use another API key.”
O sea, parece que la mayoría se bloquea automáticamente
En Google Cloud no hay una forma sencilla de configurar un hard cap
Yo también pasé más de una hora buscando la configuración, y al final terminé encontrando en Reddit la solución de Pub/Sub → Cloud Function → desactivar billing
Es una estructura completamente demencial
Tiene un 100% de tasa de fracaso
Si falla una protección hecha por el propio usuario, es más fácil decir “no es nuestra responsabilidad”
Sería bueno que existiera una función donde, si el uso supera un umbral, se active automáticamente un kill switch
Cinco horas de downtime se pueden tolerar, pero una factura gigante no
Leí esta publicación y de inmediato bajé de plan mi Firebase
Me impactó ver un caso donde cobraron $6,909 por una API que ni siquiera habían llamado durante un mes
Yo antes generé una API key durante una sesión educativa, y me vino a la cabeza que quizá alguien la fotografió
En 2020~21 enseñé servicios cloud a estudiantes usando AWS Free Tier
Levantamos un servidor MediaWiki, pero no paraban de aparecer cuentas spam y la seguridad se sentía frágil
Daba la impresión de que los puertos de red estaban bajo ataque todo el tiempo
Al final me di cuenta de que no había forma de limitar el presupuesto a $20~30 y abandoné AWS
Aunque el cloud parezca cómodo de administrar, el riesgo de una bomba de costos ilimitada lo vuelve peligroso tanto para personas como para empresas
Para desarrolladores solistas o equipos pequeños, el cloud público es un entorno aterrador e incierto
No hay suficientes protecciones y los costos pueden dispararse sin límite
Por eso una parte importante del proyecto se va en vigilar costos y crear lógica de corte
Antes usaba un VPS simple, pero hoy muchas veces no queda otra que usar servicios de Google o AWS
Aun así, siento que GCP es un poco mejor porque al menos permite desvincular programáticamente la cuenta de facturación
En EE. UU. podría traer problemas legales, pero no sé cómo será en otros países
Este tipo de sistemas de cobro está muy mal diseñado desde la perspectiva de experiencia del cliente (CX)
El billing se basa en eventos, así que el uso se acumula en colas y la agregación se retrasa
Como las alertas solo llegan después de la agregación, si hay demora, para entonces ya se excedió por mucho
Esta estructura protege a la empresa, no al cliente
Si de verdad estuviera centrada en el cliente, en el momento en que se alcanza el límite duro ya no debería poder cobrarse ni un centavo más
Eso también le daría a la empresa el incentivo de mejorar su propio sistema de agregación
Con un esquema de prepago o servicios con tope de datos, donde se descuenta por adelantado, eso sí es totalmente posible
Al final es un problema de prácticas de negocio de Google
Según la documentación oficial de Google Cloud, en una emergencia se puede desactivar la cuenta de facturación para detener los cargos
La guía oficial advierte del “riesgo de pérdida irreversible de recursos”
Pero para apps de prueba o de uso interno sirve como un buen freno de emergencia
También vale la pena revisar otro documento de alternativas y la documentación para configurar alertas de presupuesto
Yo llegué a gastar $400 en solo 5 minutos
Nosotros también sufrimos el mismo problema
Una clave que originalmente no era secreta pasó a tratarse como secreta tras activar Gemini API, pero no hubo ninguna advertencia
Por suerte lo detectamos temprano gracias a una alerta y el daño se limitó a $26,000
Le pedimos un reembolso al equipo de soporte de Google, pero al principio lo rechazaron y ahora está en revisión
En estos casos hay que escalar el problema lo más alto posible