Explosion de facturation à 54 000 € en 13 heures : des appels à l’API Gemini via une clé de navigateur Firebase sans restriction d’API
(discuss.ai.google.dev)- Une clé de navigateur Firebase exposée sans restriction d’API a permis le déclenchement automatique de requêtes vers l’API Gemini depuis l’extérieur, entraînant une facturation massive en très peu de temps
- Plus de 54 000 € de coûts ont été facturés en 13 heures, sans rapport avec le trafic réel des utilisateurs, et le déclenchement tardif des alertes de coût a retardé la réponse
- L’équipe de support Google Cloud a classé ces requêtes comme un usage valide (valid usage) et a refusé la demande d’ajustement de facture
- Google introduit des protections comme les plafonds de dépense, les clés d’authentification, le blocage automatique des clés et la facturation prépayée, et prévoit de supprimer progressivement l’usage des clés sans restriction
- Les développeurs doivent éviter d’inclure des clés dans le code client et appliquer impérativement des restrictions sur les clés API ainsi que des plafonds de budget
Cas de forte hausse de facturation Gemini API causée par l’exposition d’une clé de navigateur Firebase
-
Vue d’ensemble de l’incident
- Dans un projet qui utilisait jusque-là uniquement Firebase Authentication, la consommation de Firebase AI Logic a fortement augmenté juste après son activation
- Des requêtes automatisées, sans lien avec le trafic réel des utilisateurs, ont été générées en peu de temps, provoquant plus de 54 000 € de facturation sur environ 13 heures
- Le trafic anormal s’est arrêté après la désactivation de l’API et la rotation des identifiants (credentials)
- Les alertes budgétaires (80 €) et les alertes de détection d’anomalies de coût se sont déclenchées avec plusieurs heures de retard ; au moment de la réaction, les coûts avaient déjà atteint environ 28 000 €
- Le montant final facturé a été confirmé à plus de 54 000 € en raison du retard dans le reporting des coûts
-
Résultat du support Google Cloud
- Malgré la soumission de journaux et de données d’analyse, les requêtes ont été classées comme un usage valide (valid usage) provenant du projet, et la demande d’ajustement des frais a été refusée
- Bien que cet usage ait été anormal et non initié par des utilisateurs, il a été traité par le système comme une facturation normale
-
Questions posées par l’utilisateur
- Il demande s’il existe des cas similaires après l’activation de Firebase AI Logic ou de Gemini
- Il demande s’il existe d’autres moyens de protection, au-delà de App Check, des quotas et du passage à des appels côté serveur
- Il demande s’il existe une voie de recours supplémentaire (escalation path) pour ce type de situation
Réponse de Google (Logan Kilpatrick)
-
Fonctions de facturation et de limitation d’usage
- Des plafonds de facturation pour les utilisateurs de l’API Gemini (billing account caps) ont été introduits ; les utilisateurs Tier 1 sont automatiquement bloqués après une limite mensuelle de 250 $
- Il est possible de configurer des plafonds de dépense par projet (project spend caps) ; par exemple, un compte personnel peut être limité à 50 $
- Tous les rapports de facturation comportent un délai d’environ 10 minutes
-
Sécurité des clés API et changements prévus
-
L’usage de clés API sans restriction (unrestricted key) sera bientôt désactivé pour l’API Gemini
- Pour les nouveaux utilisateurs, une clé d’authentification (Auth key) est désormais créée par défaut, avec un niveau de sécurité renforcé par rapport au passé
- Il ne faut pas inclure de clé dans le code client ; en cas d’exposition, cela peut entraîner des coûts
- Une fonctionnalité permet de détecter automatiquement les clés exposées sur le web public puis de les désactiver ; dans certains cas réels, le blocage a eu lieu en quelques minutes
-
-
Restriction des clés et périmètre des services
-
Les clés créées dans Google AI Studio sont par défaut limitées à l’API Gemini
- En revanche, les clés créées via Google Cloud Console ou d’autres parcours peuvent accéder à plusieurs services ; si nécessaire, il faut appliquer des restrictions par service
-
-
Mesures supplémentaires et plan à venir
- Il demande à être contacté directement par e-mail (Lkilpatrick@google.com) afin d’examiner ce cas
- Un système de facturation prépayée (prepaid billing) a été introduit afin d’évoluer vers un paiement avant utilisation
- Il est déjà déployé pour les nouveaux comptes aux États-Unis et en cours d’extension progressive au reste du monde
- Ces mesures visent à renforcer le contrôle des coûts pour les développeurs et à éviter des facturations inattendues
1 commentaires
Avis sur Hacker News
Nous avions configuré une alerte budgetaire (€80) et une alerte de dépassement de coût, mais toutes deux se sont déclenchées avec plusieurs heures de retard
Au moment où nous avons pu réagir, les coûts avaient déjà atteint €28,000, et au final plus de €54,000 ont été facturés à cause du retard dans le reporting des coûts
Dans une telle situation, l’excuse des trois entreprises selon laquelle « un plafond de dépense strict est techniquement impossible » n’est pas convaincante
Dire qu’un hard cap est impossible n’a aucun sens, et au minimum il faudrait laisser le choix aux utilisateurs
Avant, ce genre d’erreur n’était qu’un bug ; aujourd’hui, cela peut mener à la faillite
Si vous faites remplacer le carrelage de votre salle de bain et qu’on vous facture ensuite la rénovation du jardin, vous devriez évidemment avoir le droit de refuser
Cela dit, pour avoir travaillé sur des systèmes de facturation chez des opérateurs télécoms, je comprends qu’agréger des logs à l’échelle du téraoctet prenne du temps
Mais les opérateurs prévoient généralement 2 à 3 % de créances douteuses et font preuve de davantage d’égards envers les clients
Google devrait aussi avoir une réponse plus élégante dans ce genre de cas
Surtout si cela s’est produit juste après l’exposition d’une clé IA, Google aurait dû détecter le scan de la clé et la bloquer
Mais en pratique, cette fonctionnalité ne semble pas fonctionner correctement
J’ai vécu quelque chose de similaire
J’avais défini un budget de $100 sur GCP, mais je n’ai reçu l’e-mail d’alerte que 5 heures plus tard, après le dépassement
Il est surprenant que ce type de fonctionnalité ne soit pas prioritaire
À court terme, cela augmente peut-être les revenus de Google, mais un développeur qui a vécu ça ne recommandera plus jamais la plateforme
Notre équipe de deux personnes a failli couler à cause d’un runaway job
Nous avions relié les alertes à un kill switch comme recommandé par GCP, mais l’alerte est arrivée 6 heures trop tard
Nous n’avons obtenu un remboursement qu’après avoir dû fournir des preuves
Google a expliqué que « le pipeline était engorgé à cause du trop grand nombre de lignes d’éléments », alors que c’est justement le type de situation que ce système est censé gérer
Je me demande comment le litige avec Google sur les coûts s’est finalement réglé
Aucun cloud ne commence par construire un mécanisme pour couper le robinet d’argent
C’est une illustration typique du capitalisme tardif
Les résultats de recherche GitHub montrent de nombreux cas où des tokens d’API Gemini sont exposés tels quels dans des dépôts publics
Pendant longtemps, Google ne traitait pas les clés API comme des secrets, puis avec les clés de LLM elles sont soudainement devenues sensibles
Il est probable que l’auteur ait exposé la clé dans le frontend ou lors d’un partage de code
C’est indiqué dans ce fil HN associé ainsi que dans la documentation officielle
On peut donc se demander pourquoi ce genre de cas se reproduit encore
« Your API key was reported as leaked. Please use another API key. »
Autrement dit, la plupart semblent être bloquées automatiquement
Il n’existe pas de moyen simple de configurer un hard cap sur Google Cloud
J’ai moi-même cherché les réglages pendant plus d’une heure avant de découvrir sur Reddit la méthode Pub/Sub → Cloud Function → désactivation de la facturation
C’est une architecture complètement démentielle
On obtient un magnifique 100 % d’échec
Si la protection bricolée par l’utilisateur échoue, il est plus facile de dire « ce n’est pas notre responsabilité »
Ce serait bien d’avoir une fonction où un kill-switch s’active automatiquement quand l’usage dépasse un seuil
Cinq heures d’indisponibilité, c’est acceptable ; une facture gigantesque, non
Après avoir lu ce post, j’ai immédiatement rétrogradé mon offre Firebase
J’ai été choqué de voir un cas où $6,909 avaient été facturés en un mois pour des API que la personne n’avait même pas appelées
Moi aussi, j’avais créé une clé API lors d’une session de formation, et je me suis dit qu’elle avait peut-être été photographiée
En 2020–21, j’enseignais les services cloud à des étudiants en utilisant l’AWS Free Tier
J’avais déployé un serveur MediaWiki, mais des comptes spam apparaissaient sans arrêt et la sécurité semblait fragile
J’avais l’impression que les ports réseau étaient en permanence attaqués
J’ai fini par comprendre qu’il n’existait aucun moyen de limiter le budget à $20–30, et j’ai abandonné AWS
Le cloud semble facile à administrer, mais le risque de bombe de coûts illimités le rend dangereux, aussi bien pour les particuliers que pour les entreprises
Pour les développeurs solo ou les petites équipes, le cloud public est un environnement angoissant et peu rassurant
Il n’y a pas de garde-fous, et les coûts peuvent grimper sans limite
Une grande partie du temps d’un projet est donc consacrée à la surveillance des coûts et à la logique de coupure
Avant, j’utilisais de simples VPS, mais aujourd’hui il faut souvent passer par des services Google ou AWS
Malgré tout, je trouve GCP un peu meilleur sur ce point, car on peut détacher programmatiquement le compte de facturation
Aux États-Unis, cela poserait sans doute des problèmes juridiques, mais dans d’autres pays, je ne sais pas
Ce type de système de facturation est catastrophique du point de vue de l’expérience client (CX)
La facturation est pilotée par événements, donc l’usage s’accumule dans des files d’attente et l’agrégation prend du retard
Les alertes n’arrivent qu’après agrégation ; s’il y a un délai, le dépassement est déjà massif
Une telle architecture protège l’entreprise, pas le client
Si l’on était vraiment centré client, dès qu’une limite stricte est atteinte, plus aucun montant supplémentaire ne devrait être facturé
Cela créerait aussi une vraie incitation pour l’entreprise à améliorer son propre système d’agrégation
Avec un système de prépayé ou de quota de données, où l’on débite à l’avance, c’est parfaitement faisable
Au fond, c’est surtout un problème de pratiques commerciales chez Google
Selon la documentation officielle de Google Cloud, en cas d’urgence on peut désactiver le compte de facturation pour arrêter la facturation
Le guide officiel avertit d’un « risque de perte irréversible de ressources »
Mais pour des applis de test ou internes, c’est un bon frein d’urgence
On peut aussi consulter un autre document d’alternative et la documentation sur les alertes budgétaires
Il m’est déjà arrivé de dépenser $400 en 5 minutes
Nous avons rencontré exactement le même problème
Une clé qui n’était pas censée être secrète est devenue sensible après l’activation de l’API Gemini, sans le moindre avertissement
Heureusement, nous l’avons détecté tôt grâce aux alertes, ce qui a limité les dégâts à $26,000
Nous avons demandé un remboursement au support Google, mais il a d’abord été refusé ; le dossier est maintenant en réexamen
Dans ce genre de cas, il faut faire remonter l’incident aussi haut que possible