﻿﻿{"id":2439,"date":"2026-03-04T12:04:49","date_gmt":"2026-03-04T11:04:49","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/cles-api-volees-comment-eviter-une-facture-a-82-000-dollars\/"},"modified":"2026-03-04T12:04:49","modified_gmt":"2026-03-04T11:04:49","slug":"cles-api-volees-comment-eviter-une-facture-a-82-000-dollars","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/cles-api-volees-comment-eviter-une-facture-a-82-000-dollars\/","title":{"rendered":"Cl\u00e9s API vol\u00e9es &#8211; Comment \u00e9viter une facture \u00e0 82 000 dollars"},"content":{"rendered":"<p>82 314 dollars, c&#8217;est l&#8217;incroyable facture que s&#8217;est mang\u00e9 un dev mexicain apr\u00e8s 48 heures d&#8217;utilisation frauduleuse de sa cl\u00e9 API Gemini. Sa d\u00e9pense habituelle \u00e9tait de 180 dollars par mois environ, j&#8217;imagine que \u00e7a lui a fait un peu mal aux fesses. Et c&#8217;est une bonne raison pour moi de vous inciter une nouvelle fois \u00e0 bien s\u00e9curiser vos cl\u00e9s API !<\/p>\n<p>Le gars bosse dans une petite startup et de ce que j&#8217;ai compris, quelqu&#8217;un a chop\u00e9 ses credentials et s&#8217;est l\u00e2ch\u00e9 sur Gemini 3 Pro pendant deux jours. La r\u00e9ponse de Google ? &#8220;<em>Responsabilit\u00e9 partag\u00e9e<\/em>&#8220;. En gros, eux s\u00e9curisent l&#8217;infra, et vous s\u00e9curisez vos cl\u00e9s. Si vous vous faites plumer, c&#8217;est votre probl\u00e8me !<\/p>\n<p>Et c&#8217;est pas un cas isol\u00e9 car les chercheurs de Truffle Security ont scann\u00e9 le web et trouv\u00e9 2 863 cl\u00e9s Google API expos\u00e9es en clair sur des sites publics. Toutes identifiables par le pr\u00e9fixe <code>AIza<\/code>.<\/p>\n<p>Sauf que comme je vous l&#8217;expliquais dans un article pr\u00e9c\u00e9dent,<br \/>\n<a href=\"https:\/\/korben.info\/google-api-keys-gemini-secrets.html\">ces cl\u00e9s, \u00e0 la base, \u00e9taient con\u00e7ues comme de simples identifiants de projet pour Maps et Firebase<\/a><br \/>\net la doc Google disait carr\u00e9ment qu&#8217;elles n&#8217;\u00e9taient pas secr\u00e8tes ! Et quand l&#8217;API Gemini a \u00e9t\u00e9 activ\u00e9e sur ces projets, h\u00e9 bien ces cl\u00e9s sont devenues des cl\u00e9s d&#8217;authentification, sans que personne ne r\u00e9alise ce changement de paradigme.<\/p>\n<p>Mais bon, plut\u00f4t que de chialer comme des fragiles, voyons comment \u00e9viter de se retrouver dans cette situation ^^.<\/p>\n<h2>Scanner vos secrets existants<\/h2>\n<p>Avant tout, faut savoir si vous avez d\u00e9j\u00e0 des fuites. Deux outils open source font \u00e7a tr\u00e8s bien.<\/p>\n<p>\n<a href=\"https:\/\/korben.info\/hacker-scanne-tous-commits-oops-github.html\">TruffleHog<\/a><br \/>\nscanne vos d\u00e9p\u00f4ts Git, vos fichiers, et m\u00eame vos buckets S3 pour trouver des secrets qui tra\u00eenent. L&#8217;install est simple :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">brew install trufflehog\n<\/span><\/span><span class=\"line\"><span class=\"cl\">trufflehog git https:\/\/github.com\/user\/project --only-verified\n<\/span><\/span><\/code><\/pre>\n<p>Le flag <code>--only-verified<\/code> c&#8217;est le truc important, \u00e7a teste si les secrets trouv\u00e9s sont encore ACTIFS. Parce que trouver une vieille cl\u00e9 r\u00e9voqu\u00e9e, on s&#8217;en fiche. Attention, \u00e7a ne marche pas sur les repos priv\u00e9s sans token d&#8217;acc\u00e8s.<\/p>\n<p>Y&#8217;a aussi<br \/>\n<a href=\"https:\/\/korben.info\/detecter-secrets-depots-git-nosey-parker-outil.html\">Nosey Parker<\/a><br \/>\nqui fait le m\u00eame genre de boulot mais perso, je trouve TruffleHog plus complet pour les cl\u00e9s cloud, m\u00eame si Nosey Parker est plus rapide pour les gros repos.<\/p>\n<p>Apr\u00e8s si vous bossez avec des cl\u00e9s Google sp\u00e9cifiquement, cherchez le pattern <code>AIza<\/code> dans votre code. Un simple grep suffit :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">grep -r \"AIza\" . --include=\"*.js\" --include=\"*.py\" --include=\"*.env\"\n<\/span><\/span><\/code><\/pre>\n<h2>Emp\u00eacher les fuites \u00e0 la source<\/h2>\n<p>Scanner c&#8217;est bien, mais emp\u00eacher les secrets d&#8217;atterrir dans Git, c&#8217;est mieux. Et pour cela, rien de plus simple&#8230; Suffit d&#8217;installer un pre-commit hook.<\/p>\n<p><code>git-secrets<\/code> d&#8217;AWS fait exactement \u00e7a :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">brew install git-secrets\n<\/span><\/span><span class=\"line\"><span class=\"cl\">cd mon-projet\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git secrets --install\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git secrets --register-aws\n<\/span><\/span><\/code><\/pre>\n<p>Du coup, chaque <code>git commit<\/code> v\u00e9rifie automatiquement qu&#8217;il n&#8217;y a pas de cl\u00e9 AWS qui tra\u00eene. Vous pouvez ajouter vos propres patterns (genre <code>AIza<\/code> pour Google) :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">git secrets --add 'AIza[0-9A-Za-z_-]{35}'\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git secrets --add 'sk-proj-[0-9a-zA-Z]{48}'\n<\/span><\/span><\/code><\/pre>\n<p>Le deuxi\u00e8me pattern, c&#8217;est pour les cl\u00e9s OpenAI (format <code>sk-proj-<\/code>). D&#8217;ailleurs, stockez TOUT dans des fichiers <code>.env<\/code> et v\u00e9rifiez que <code>.env<\/code> est dans votre <code>.gitignore<\/code>. \u00c7a devrait \u00eatre un r\u00e9flexe ! Le pi\u00e8ge classique c&#8217;est surtout le fichier <code>.env.example<\/code> qui contient en fait de vraies cl\u00e9s&#8230; c&#8217;est du vu et revu sur GitHub.<\/p>\n<p>Pour aller plus loin,<br \/>\n<a href=\"https:\/\/korben.info\/vault-un-outil-pour-les-developpeurs-qui-permet-de-securiser-les-secrets-des-applications-web.html\">Vault de HashiCorp<\/a><br \/>\ng\u00e8re \u00e9galement vos secrets de mani\u00e8re centralis\u00e9e avec du chiffrement, de la rotation automatique et des audit logs. C&#8217;est carr\u00e9ment le niveau sup\u00e9rieur notamment pour les \u00e9quipes. C&#8217;est bien plus safe que le .env .<\/p>\n<h2>D\u00e9tecter un vol avant la catastrophe<\/h2>\n<p>Notre dev mexicain a d\u00e9couvert sa facture APR\u00c8S 48 heures. Deux jours, c&#8217;est une \u00e9ternit\u00e9 alors voil\u00e0 comment r\u00e9agir en minutes, et pas en jours.<\/p>\n<p>Sur Google Cloud, allez dans Billing &gt; Budgets &amp; Alerts. Cr\u00e9ez un budget avec des seuils \u00e0 50%, 90% et 100% de votre budget mensuel. Activez les notifications par email ET par Pub\/Sub pour d\u00e9clencher une Cloud Function qui coupe automatiquement les cl\u00e9s si le seuil est d\u00e9pass\u00e9.<\/p>\n<p>Chez OpenAI, c&#8217;est dans Settings &gt; Billing &gt; Usage limits. Vous pouvez d\u00e9finir un hard cap mensuel. Au-del\u00e0&#8230; plus rien ne passe. M\u00eame chose \u00e0 peu pr\u00e8s pour Claude d&#8217;Anthropic aussi&#8230;<\/p>\n<p>Et surtout, activez la rotation automatique de vos cl\u00e9s. Sur Google Cloud :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">gcloud services api-keys list\n<\/span><\/span><span class=\"line\"><span class=\"cl\">gcloud services api-keys create --display-name=\"gemini-prod-$(date +%Y%m)\"\n<\/span><\/span><span class=\"line\"><span class=\"cl\">gcloud services api-keys delete ANCIENNE_CLE_ID\n<\/span><\/span><\/code><\/pre>\n<p>Les restrictions d&#8217;API c&#8217;est pas un luxe donc sur chaque cl\u00e9, limitez les services autoris\u00e9s (Gemini uniquement si c&#8217;est son usage), les IPs sources et le nombre de requ\u00eates par minute. Sauf si vous aimez les surprises \u00e0 5 chiffres sur votre relev\u00e9 bancaire, une cl\u00e9 sans restriction, c&#8217;est une carte bleue sans plafond.<\/p>\n<p>Perso, je me suis mis des alertes sur tous mes comptes cloud, que ce soit AWS, GCP ou Azure. Genre, si \u00e7a d\u00e9passe 50 balles en une journ\u00e9e&#8230; hop, notification sur le t\u00e9l\u00e9phone. Finalement, c&#8217;est 5 minutes de config qui peuvent vous \u00e9viter des mois de gal\u00e8re.<\/p>\n<p>\n<a href=\"https:\/\/www.theregister.com\/2026\/03\/03\/gemini_api_key_82314_dollar_charge\/\">Source<\/a>\n<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>82 314 dollars, c&#8217;est l&#8217;incroyable facture que s&#8217;est mang\u00e9 un dev mexicain apr\u00e8s 48 heures d&#8217;utilisation frauduleuse de sa cl\u00e9 API Gemini. Sa d\u00e9pense habituelle \u00e9tait de 180 dollars par mois environ, j&#8217;imagine que \u00e7a lui a fait un peu mal aux fesses. Et c&#8217;est une bonne raison pour moi de vous inciter une nouvelle fois \u00e0 bien s\u00e9curiser vos cl\u00e9s API ! Le gars bosse dans une petite startup et de ce que j&#8217;ai compris, quelqu&#8217;un a chop\u00e9 ses credentials et s&#8217;est l\u00e2ch\u00e9 sur Gemini 3 Pro pendant deux jours. La r\u00e9ponse de Google ? &#8220;Responsabilit\u00e9 partag\u00e9e&#8220;. En gros, eux s\u00e9curisent l&#8217;infra, et vous s\u00e9curisez vos cl\u00e9s. Si vous vous faites plumer, c&#8217;est votre probl\u00e8me ! Et c&#8217;est pas un cas isol\u00e9 car les chercheurs de Truffle Security ont scann\u00e9 le web et trouv\u00e9 2 863 cl\u00e9s Google API expos\u00e9es en clair sur des sites publics. Toutes identifiables par le pr\u00e9fixe AIza. Sauf que comme je vous l&#8217;expliquais dans un article pr\u00e9c\u00e9dent, ces cl\u00e9s, \u00e0 la base, \u00e9taient con\u00e7ues comme de simples identifiants de projet pour Maps et Firebase et la doc Google disait carr\u00e9ment qu&#8217;elles n&#8217;\u00e9taient pas secr\u00e8tes ! Et quand l&#8217;API Gemini a \u00e9t\u00e9 activ\u00e9e sur ces projets, h\u00e9 bien ces cl\u00e9s sont devenues des cl\u00e9s d&#8217;authentification, sans que personne ne r\u00e9alise ce changement de paradigme. Mais bon, plut\u00f4t que de chialer comme des fragiles, voyons comment \u00e9viter de se retrouver dans cette situation ^^. Scanner vos secrets existants Avant tout, faut savoir si vous avez d\u00e9j\u00e0 des fuites. Deux outils open source font \u00e7a tr\u00e8s bien. TruffleHog scanne vos d\u00e9p\u00f4ts Git, vos fichiers, et m\u00eame vos buckets S3 pour trouver des secrets qui tra\u00eenent. L&#8217;install est simple : brew install trufflehog trufflehog git https:\/\/github.com\/user\/project &#8211;only-verified Le flag &#8211;only-verified c&#8217;est le truc important, \u00e7a teste si les secrets trouv\u00e9s sont encore ACTIFS. Parce que trouver une vieille cl\u00e9 r\u00e9voqu\u00e9e, on s&#8217;en fiche. Attention, \u00e7a ne marche pas sur les repos priv\u00e9s sans token d&#8217;acc\u00e8s. Y&#8217;a aussi Nosey Parker qui fait le m\u00eame genre de boulot mais perso, je trouve TruffleHog plus complet pour les cl\u00e9s cloud, m\u00eame si Nosey Parker est plus rapide pour les gros repos. Apr\u00e8s si vous bossez avec des cl\u00e9s Google sp\u00e9cifiquement, cherchez le pattern AIza dans votre code. Un simple grep suffit : grep -r &#8220;AIza&#8221; . &#8211;include=&#8221;*.js&#8221; &#8211;include=&#8221;*.py&#8221; &#8211;include=&#8221;*.env&#8221; Emp\u00eacher les fuites \u00e0 la source Scanner c&#8217;est bien, mais emp\u00eacher les secrets d&#8217;atterrir dans Git, c&#8217;est mieux. Et pour cela, rien de plus simple&#8230; Suffit d&#8217;installer un pre-commit hook. git-secrets d&#8217;AWS fait exactement \u00e7a : brew install git-secrets cd mon-projet git secrets &#8211;install git secrets &#8211;register-aws Du coup, chaque git commit v\u00e9rifie automatiquement qu&#8217;il n&#8217;y a pas de cl\u00e9 AWS qui tra\u00eene. Vous pouvez ajouter vos propres patterns (genre AIza pour Google) : git secrets &#8211;add &#8216;AIza[0-9A-Za-z_-]{35}&#8217; git secrets &#8211;add &#8216;sk-proj-[0-9a-zA-Z]{48}&#8217; Le deuxi\u00e8me pattern, c&#8217;est pour les cl\u00e9s OpenAI (format sk-proj-). D&#8217;ailleurs, stockez TOUT dans des fichiers .env et v\u00e9rifiez que .env est dans votre .gitignore. \u00c7a devrait \u00eatre un r\u00e9flexe ! Le pi\u00e8ge classique c&#8217;est surtout le fichier .env.example qui contient en fait de vraies cl\u00e9s&#8230; c&#8217;est du vu et revu sur GitHub. Pour aller plus loin, Vault de HashiCorp g\u00e8re \u00e9galement vos secrets de mani\u00e8re centralis\u00e9e avec du chiffrement, de la rotation automatique et des audit logs. C&#8217;est carr\u00e9ment le niveau sup\u00e9rieur notamment pour les \u00e9quipes. C&#8217;est bien plus safe que le .env . D\u00e9tecter un vol avant la catastrophe Notre dev mexicain a d\u00e9couvert sa facture APR\u00c8S 48 heures. Deux jours, c&#8217;est une \u00e9ternit\u00e9 alors voil\u00e0 comment r\u00e9agir en minutes, et pas en jours. Sur Google Cloud, allez dans Billing &gt; Budgets &amp; Alerts. Cr\u00e9ez un budget avec des seuils \u00e0 50%, 90% et 100% de votre budget mensuel. Activez les notifications par email ET par Pub\/Sub pour d\u00e9clencher une Cloud Function qui coupe automatiquement les cl\u00e9s si le seuil est d\u00e9pass\u00e9. Chez OpenAI, c&#8217;est dans Settings &gt; Billing &gt; Usage limits. Vous pouvez d\u00e9finir un hard cap mensuel. Au-del\u00e0&#8230; plus rien ne passe. M\u00eame chose \u00e0 peu pr\u00e8s pour Claude d&#8217;Anthropic aussi&#8230; Et surtout, activez la rotation automatique de vos cl\u00e9s. Sur Google Cloud : gcloud services api-keys list gcloud services api-keys create &#8211;display-name=&#8221;gemini-prod-$(date +%Y%m)&#8221; gcloud services api-keys delete ANCIENNE_CLE_ID Les restrictions d&#8217;API c&#8217;est pas un luxe donc sur chaque cl\u00e9, limitez les services autoris\u00e9s (Gemini uniquement si c&#8217;est son usage), les IPs sources et le nombre de requ\u00eates par minute. Sauf si vous aimez les surprises \u00e0 5 chiffres sur votre relev\u00e9 bancaire, une cl\u00e9 sans restriction, c&#8217;est une carte bleue sans plafond. Perso, je me suis mis des alertes sur tous mes comptes cloud, que ce soit AWS, GCP ou Azure. Genre, si \u00e7a d\u00e9passe 50 balles en une journ\u00e9e&#8230; hop, notification sur le t\u00e9l\u00e9phone. Finalement, c&#8217;est 5 minutes de config qui peuvent vous \u00e9viter des mois de gal\u00e8re. Source<\/p>\n","protected":false},"author":1,"featured_media":2440,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-2439","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2439","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=2439"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2439\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/2440"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=2439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}