Ne donnez jamais vos clés API ni vos vaults à Claude Code : ce qui peut vraiment mal tourner
Partager une clé API ou un fichier vault avec Claude Code peut entraîner exfiltration, leak dans les logs ou commit public. Guide pratique pour cloisonner proprement.
Pourquoi c'est un problème, concrètement
Demander à Claude Code d'éditer un fichier vault, de lire un .env en clair, ou de coller une clé API dans un prompt expose ces secrets à plusieurs vecteurs qui sont souvent invisibles au moment où on les crée.
1. Le secret entre dans votre historique de session
Chaque prompt et chaque fichier lu par Claude Code passe par l'API Anthropic. Anthropic conserve les échanges selon sa politique de rétention (voir Anthropic Trust Center (ouvre un nouvel onglet)). Même si le fournisseur est sérieux, vous avez élargi la surface : un secret qui ne devait exister que sur votre machine vit maintenant sur des serveurs tiers.
2. Les logs locaux le capturent
Claude Code écrit des logs dans ~/.claude/ pour le debugging. Si vous avez activé le mode verbose, collé une clé dans un prompt, ou si un fichier .env a été lu pendant la session, il peut apparaître dans ces logs. Un backup automatique de votre home, un script d'upload de logs pour un bug report, et la clé fuite sans que vous le remarquiez.
3. L'auto-complétion et l'historique shell
Si vous collez une clé dans un prompt via claude --prompt "voici ma clé sk-ant-...", elle atterrit dans ~/.bash_history ou ~/.zsh_history. Ce fichier est souvent sauvegardé, synchronisé (dotfiles sur GitHub par exemple), ou accessible à toute personne qui prend la main sur votre session.
4. Claude peut décider de committer le secret
C'est le cas le plus violent. Vous ouvrez un vault.yml pour demander une refactorisation. Claude lit le fichier, traite la demande, et pour être serviable, propose un git commit -am "refactor vault". Si vous acceptez sans relire, la clé part sur le remote. Le programme GitHub Secret Scanning (ouvre un nouvel onglet) peut vous sauver la mise pour les patterns connus (clés Stripe, AWS, Anthropic), mais pas pour un secret maison ou un token JWT custom.
5. Les MCP élargissent la surface d'attaque
Si vous utilisez un MCP qui interroge un service externe (GitHub, Notion, base de données), et que le contexte de la conversation contient un secret, ce secret peut se retrouver dans une requête sortante. Un MCP mal conçu ou compromis peut exfiltrer ce qu'il voit passer. Voir Sécurité des MCP pour les principes de cloisonnement.
6. Les copies temporaires dans les snapshots
Claude Code crée des snapshots de votre working directory lors de certaines opérations (agents parallèles, worktrees). Ces copies héritent des fichiers sensibles s'ils sont dans le répertoire. Un .env committé par erreur dans un worktree temporaire peut se propager.
Les erreurs concrètes à éviter
❌ Donner la clé directement dans un prompt
# Ne jamais faire ça
claude "ma clé OpenAI est sk-proj-abc123def, utilise-la pour tester l'API"
La clé part dans les logs, l'historique shell et la session API. Elle est "publiée" dans cinq endroits en une seconde.
❌ Demander à Claude de lire un fichier vault
# À éviter
claude "lis production.vault.yml et corrige la syntaxe YAML"
Même si le vault est chiffré au repos, le déchiffrement pour la lecture expose le contenu à la session. Si le fichier contient 40 secrets, les 40 sont maintenant dans le contexte.
❌ Coller le contenu d'un .env pour débugger
# À éviter
claude "voici mon .env, pourquoi Docker ne démarre pas ?
DATABASE_URL=postgres://user:password123@prod-db..."
❌ Laisser Claude accéder aux secrets via un MCP générique
Un MCP filesystem avec accès à /home/user/ lit aussi bien ~/.aws/credentials et ~/.ssh/id_rsa que votre projet. Toujours restreindre le scope.
❌ Committer sans relire quand Claude a touché à de la config
C'est l'erreur la plus fréquente. Claude propose un commit qui inclut des fichiers .env ou config/secrets.yml modifiés. Vous faites confiance au diff récapitulatif et vous poussez. La clé est maintenant dans l'historique Git public.
Ce qu'il faut faire à la place
✅ Utiliser des variables d'environnement qui pointent, jamais des valeurs en clair
Dans le code, ne jamais hardcoder. Claude lit le code, pas les valeurs d'exécution :
// Ce que Claude doit voirconst apiKey = process.env.ANTHROPIC_API_KEY;if (!apiKey) throw new Error("ANTHROPIC_API_KEY is required");// Pas çaconst apiKey = "sk-ant-api03-abc...";
✅ Cloisonner les secrets dans un fichier .env.local gitignoré, jamais ouvert dans Claude
# .gitignore doit contenir au minimum.env.env.local.env.*.local*.vault.yml*.vaultsecrets/credentials/
Si Claude demande à lire votre .env, refusez. Explique-lui que le fichier existe mais que le contenu ne doit pas entrer dans le contexte :
Mon .env contient des secrets que je ne veux pas partager.
Les variables disponibles sont : DATABASE_URL, REDIS_URL, ANTHROPIC_API_KEY.
Peux-tu corriger la config sans que je te montre les valeurs ?
✅ Utiliser un secrets manager avec accès runtime
Plutôt que des fichiers .env, pointez vers un gestionnaire de secrets au runtime :
| Outil | Avantage pour un usage avec Claude Code |
|---|---|
| Doppler (ouvre un nouvel onglet) | doppler run -- npm start injecte les secrets sans les écrire dans un fichier |
| HashiCorp Vault (ouvre un nouvel onglet) | Accès via agent, secrets montés en tmpfs |
| AWS Secrets Manager (ouvre un nouvel onglet) | Récupération via SDK avec IAM role, aucun secret en code |
| 1Password CLI (ouvre un nouvel onglet) | op run -- node script.js avec références op://vault/item/field |
Avec ces outils, le code contient des références (op://prod/database/url) que Claude peut lire sans problème, pas des valeurs.
✅ Restreindre le scope d'accès de Claude Code
Dans votre ~/.claude/settings.json, limitez ce que Claude peut lire :
{"permissions": {"allow": ["Read(~/projects/my-app/**)","Write(~/projects/my-app/**)"],"deny": ["Read(~/.ssh/**)","Read(~/.aws/**)","Read(~/.kube/**)","Read(**/.env*)","Read(**/*.vault.yml)","Read(**/credentials/**)","Bash(cat ~/.env*)","Bash(env)"]}}
Voir Permissions et sandbox pour les patterns complets.
✅ Relire chaque commit avant de pousser, surtout quand Claude a touché à la config
Quand vous acceptez un git commit proposé par Claude, ne sautez pas la revue du diff. Utilisez git diff --cached avant le commit, et git log -p HEAD après, pour valider que rien de sensible n'est parti dans l'arbre.
✅ Activer git-secrets ou trufflehog en pre-commit
Avant même que Claude entre dans le flow, mettez un garde-fou au niveau de Git :
# Installer git-secretsbrew install git-secretsgit secrets --installgit secrets --register-awsgit secrets --add 'sk-ant-[A-Za-z0-9]{32,}'git secrets --add 'sk-proj-[A-Za-z0-9]{32,}'
Toute tentative de commit contenant un pattern sensible sera bloquée, y compris si c'est Claude qui tente le commit.
✅ Si vous avez besoin que Claude teste un appel API, utilisez une clé dédiée throwaway
Créez une clé API à la durée de vie limitée avec un quota bas, utilisez-la uniquement pour les tests avec Claude, révoquez-la en fin de session. Jamais la clé de prod, jamais la clé personnelle premium.
Plan d'action pas à pas
Auditer ce que Claude Code peut déjà voir
Vérifiez votre ~/.claude/settings.json et les fichiers sensibles qui sont dans le scope actuel.
# Lister les fichiers sensibles dans le répertoire où vous lancez Claudefind . -type f \( -name ".env*" -o -name "*.vault.yml" -o -name "*.pem" -o -name "credentials*" \) 2>/dev/null
Si la liste n'est pas vide, continuez aux étapes suivantes avant de relancer Claude dans ce répertoire.
Mettre à jour le .gitignore
Assurez-vous que tous les patterns sensibles sont gitignorés. Copier ce bloc si vous partez de zéro :
# Secrets et credentials.env.env.local.env.*.local.env.production.env.staging*.vault*.vault.yml*.vault.yamlsecrets/credentials/*.pem*.keyid_rsa*.aws/.kube/config
Ajouter les règles deny dans Claude Code
Éditer ~/.claude/settings.json pour bloquer explicitement l'accès aux secrets, même si Claude le demande :
{"permissions": {"deny": ["Read(**/.env*)","Read(**/*.vault.yml)","Read(**/credentials/**)","Read(~/.ssh/**)","Read(~/.aws/**)","Bash(cat ~/.env*)","Bash(env)","Bash(printenv)"]}}
Voir Permissions et sandbox pour les patterns complets.
Installer un garde-fou git-secrets
Bloquez les commits de secrets au niveau de Git, y compris ceux proposés par Claude :
brew install git-secretscd votre-projetgit secrets --installgit secrets --register-awsgit secrets --add 'sk-ant-[A-Za-z0-9]{32,}'git secrets --add 'sk-proj-[A-Za-z0-9]{32,}'git secrets --add 'ghp_[A-Za-z0-9]{36}'git secrets --add 'AKIA[0-9A-Z]{16}'
Migrer vers un secrets manager si vous êtes encore en .env partout
Pour un projet en prod, le .env est un anti-pattern à terme. Choisissez un gestionnaire (Doppler le plus simple pour démarrer, 1Password CLI si vous en avez déjà une licence équipe, Vault si infrastructure complexe) et migrez progressivement.
La règle cible : aucun secret ne doit jamais être écrit sur le disque de la machine de dev, ni lisible par un agent IA.
Si vous avez déjà donné une clé à Claude, révoquez immédiatement
Si vous avez partagé une clé API dans un prompt ou laissé Claude lire un .env, considérez-la comme compromise. Procédure complète : Clé API Anthropic fuitée ? Plan d'action en 5 étapes.
Le même principe vaut pour toute autre clé (OpenAI, GitHub, AWS). Rotation immédiate, audit des logs d'utilisation, nettoyage de l'historique Git si nécessaire.
Cas limite : "mais j'ai besoin que Claude comprenne mon infra de prod"
Oui, mais il peut comprendre sans voir les secrets. Donnez-lui :
- La structure du fichier de config (clés sans valeurs)
- La liste des variables d'environnement attendues
- Des valeurs de test (les vraies valeurs restent locales)
Exemple concret :
# À partager avec Claude : schema.yml (safe)database:url: "<postgres URL, format: postgres://user:pass@host:port/db>"pool_size: 20redis:url: "<redis URL, format: redis://host:port>"api:anthropic_key: "<sk-ant-... key>"openai_key: "<sk-... key>"
Claude a toutes les infos pour proposer une refactor, générer un docker-compose.yml, écrire un parser, sans jamais voir les vraies valeurs.
Pour aller plus loin
- Clé API Anthropic fuitée ? Plan d'action en 5 étapes — que faire si une fuite a déjà eu lieu
- Variables d'environnement Claude Code — référence complète
- Sécurité des MCP — cloisonnement des MCP et leurs risques
- Permissions et sandbox — configuration fine des règles
allow/deny - Sécurité Claude Code : bonnes pratiques — la checklist sécurité générale