API-sleutels en geheimen beheren
Waar API-sleutels lekken, waar ze wél horen, hoe je push protection, aparte sleutels en uitgavenlimieten instelt, en wat je doet in de eerste 15 minuten na een lek.
In het kort
Een API-sleutel is geld en toegang: wie hem heeft, gebruikt hem op jouw rekening. In 2025 kwamen er volgens GitGuardian zo'n 29 miljoen nieuwe geheimen op publieke GitHub terecht, en één gestolen Gemini-sleutel maakte van een rekening van $180 per maand $82.314 in twee dagen. Bewaar sleutels in een password manager of secret manager, geef elk project een eigen sleutel met een uitgavenlimiet, zet push protection aan en trek een gelekte sleutel binnen minuten in.
- Gemiddeld
- 7 min
- gratis
- Feiten gecheckt op 2 november 2026
- Voltooid
Een API-sleutel is een creditcard zonder pincode. Met agents die je bestanden lezen en code schrijven, liggen er meer sleutels rond dan ooit.
Na deze les heb je: je sleutels op een veilige plek, per project een eigen sleutel met limiet, push protection aan, en een plan voor de eerste 15 minuten na een lek.
Hoe sleutels lekken
Section titled “Hoe sleutels lekken”GitGuardian telde in 2025 zo’n 29 miljoen nieuwe geheimen in publieke GitHub-commits (+34%). Sleutels van AI-diensten stegen met 81%, en in configbestanden van MCP-servers vonden ze er 24.008. Van de geldige geheimen uit 2022 werkte 64% vier jaar later nog.
| Waar | Hoe het misgaat |
|---|---|
| Git | Sleutel in de code of een gecommit .env-bestand. Verwijderen in een volgende commit helpt niet: hij staat in de geschiedenis. |
| Frontend | Sleutel in JavaScript of een app-bundle. Iedereen kan hem uitlezen. |
| Agent-bestanden en -logs | MCP-configs, sessielogs en .env die je coding-agent leest. Infostealers zoeken daar gericht naar. |
| Bij derden opgeslagen | Bij de OpenCode Console-hack (okt 2026) werden opgeslagen AI-sleutels van gebruikers misbruikt; enkele gebruikers meldden schades van ruim $1.000. |
| Screenshots en chats | Een sleutel in beeld bij een demo, of geplakt in een chat met een AI-assistent of collega. Vapi noemt logs, screenshots en agent-chats letterlijk als plekken waar een sleutel nooit mag staan. |
Wat het kost: een Mexicaanse startup met normaal $180 aan Gemini-kosten per maand kreeg in februari 2026 een rekening van $82.314 in ongeveer 48 uur, na een gestolen sleutel. Google wees naar het shared responsibility-model.
Waar sleutels wél horen
Section titled “Waar sleutels wél horen”| Situatie | Plek | Zo werkt het |
|---|---|---|
| Je eigen laptop | Password manager met CLI | 1Password CLI of Bitwarden Secrets Manager zet de sleutel pas bij het starten in een omgevingsvariabele. In je project staat alleen een verwijzing. |
| Server of VPS | Omgevingsvariabelen uit een bestand buiten je repo, of sops + age | sops versleutelt je configbestand, zodat het veilig in git kan. |
| Hosting, CI, serverless | Secret manager van het platform | GitHub Actions secrets, Vercel/Netlify environment variables, cloud secret managers. |
Met 1Password ziet je .env er zo uit (geen geheim, alleen een verwijzing):
OPENAI_API_KEY="op://Werk/OpenAI/credential"En start je je app zo:
op run --env-file=.env -- npm startBij Bitwarden Secrets Manager is dat bws run -- npm start (met je access token in BWS_ACCESS_TOKEN).
Zo zet je het goed neer
Section titled “Zo zet je het goed neer”-
Eén sleutel per project, klant of agent. Geef elke sleutel een naam (“klant-bakkerij-chatbot”) en alleen de rechten die nodig zijn: alleen-lezen waar het kan, één repo bij een GitHub-token, een vervaldatum. Lekt er één, dan trek je alleen die in. Werk je voor klanten? Laat de sleutel op het account van de klant staan.
-
Uitgavenlimiet per project of sleutel. Elke grote aanbieder heeft er nu een, maar ze werken anders: OpenAI per organisatie en per project (alleen een harde stop als je Enforce a hard limit aanzet), Anthropic per organisatie en per workspace, Google per project in AI Studio (met tot ongeveer 10 minuten vertraging) en OpenRouter per sleutel. Zet hem laag en zet automatisch bijladen uit. Stand november 2026; check de officiële pagina’s: OpenAI, Anthropic, Google Gemini, OpenRouter.
-
.envin.gitignore, vóór je eerste commit.Terminal window echo ".env" >> .gitignore -
Push protection aan. Voor je persoonlijke account staat push protection for yourself bij GitHub standaard aan voor publieke repo’s; check het onder Settings → Code security, kopje “User”. Per repo: Settings → Advanced Security → Secret Protection → Push protection → Enable. Gratis voor publieke repo’s; voor privé-repo’s heb je het betaalde GitHub Secret Protection nodig.
-
Scan wat er al ligt. Met gitleaks doorzoek je je hele git-geschiedenis:
Terminal window gitleaks git -vKrijg je
unknown command "git"? Dan heb je een versie van vóór 8.19 (bijvoorbeeld via apt op Ubuntu 24.04); gebruik dangitleaks detect -v.Gevonden sleutels zijn verbrand, ook als ze “maar even” in een oude commit stonden. Trek ze in.
De eerste 15 minuten na een lek
Section titled “De eerste 15 minuten na een lek”-
Intrekken en vervangen (minuut 0-5). In het dashboard van de aanbieder: oude sleutel intrekken, nieuwe maken, nieuwe in je password manager en je apps zetten. Eerst dit, pas daarna opruimen. Bots vinden publieke sleutels binnen minuten.
-
Rem op de kosten (minuut 5). Limiet omlaag, automatisch bijladen uit. Bij spraakdiensten: uitgaand bellen tijdelijk uit.
-
Logs en kosten checken (minuut 5-10). Usage per sleutel of project: onbekende modellen, regio’s of tijdstippen? Bij cloud-sleutels ook nieuwe gebruikers of sleutels in IAM, want aanvallers maken er vaak een reserve bij. Kwam het lek van malware op je computer? Dan zijn alle sleutels en sessies op die machine verdacht.
-
Git-geschiedenis opschonen (minuut 10). Haal de sleutel uit de code. Stond hij in een gepushte commit, volg dan GitHub’s handleiding Removing sensitive data (met
git filter-repo). Clones en forks houden hem toch, dus dit is opruimen, geen oplossing. -
Melden (minuut 10-15). Vraag support van de aanbieder om de onterechte kosten kwijt te schelden; OpenAI betaalde getroffen OpenCode-gebruikers terug, Google hield in de $82k-zaak vast aan shared responsibility. Werk je voor een klant: meld het direct. Kon iemand bij persoonsgegevens? Meld dat dan binnen 72 uur bij de Autoriteit Persoonsgegevens, tenzij het waarschijnlijk geen risico voor mensen oplevert (zo werkt de meldplicht).
Checklist
0/7
Je voortgang wordt alleen in deze browser bewaard.
Test jezelf
1Je merkt dat je een API-sleutel naar een publieke repo hebt gepusht. Wat doe je eerst?
Bots scannen publieke commits binnen minuten, en clones houden de sleutel. Alleen intrekken maakt hem waardeloos.
2Waarom één sleutel per project of klant?
3Wat is de veiligste plek voor een API-sleutel op je laptop?
Dan staat er in je project alleen een verwijzing, die een agent of aanvaller niets oplevert.
Volgende les: je server hardenen. Host je niets zelf? Ga door naar de security-check voor je app.