DEV NOTE
Gérer ses secrets et clés API en local sans risque
Les règles pratiques pour conserver les secrets et clés API hors du dépôt, du navigateur et des journaux applicatifs.
Outils & productivitéTEMPS DE LECTURE : 2 MIN
Introduction : Ne JAMAIS commit de secrets
Mettre ses clés API dans un repo public est une
erreur fatale.
Risques :
- Compromission de compte (factures AWS astronomiques)
- Accès non autorisé aux données clients
- Scanners automatiques cherchent les secrets sur GitHub
Fichiers .env
Créer .env
# .env
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxxx
JWT_SECRET=super-secret-key-change-me
API_KEY=abcd1234efgh5678
Ajouter au .gitignore
# .gitignore
.env
.env.local
.env.*.local
Créer .env.example
Template public pour l'équipe :
# .env.example
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
STRIPE_SECRET_KEY=sk_test_your_key_here
JWT_SECRET=change-me
API_KEY=your-api-key
Utiliser les variables d'env
Node.js
// Installer dotenv
npm install dotenv
// app.js
require('dotenv').config();
const apiKey = process.env.API_KEY;
const dbUrl = process.env.DATABASE_URL;
Python
# Installer python-dotenv
pip install python-dotenv
# app.py
from dotenv import load_dotenv
import os
load_dotenv()
api_key = os.getenv('API_KEY')
db_url = os.getenv('DATABASE_URL')
React/Vite
Préfixe
VITE_ obligatoire :
# .env
VITE_API_URL=https://api.example.com
VITE_GOOGLE_ANALYTICS_ID=G-XXXXXXXXXX
// src/config.ts
export const API_URL = import.meta.env.VITE_API_URL;
GitHub Secrets (CI/CD)
Pour les workflows GitHub Actions :
Étapes :
- Repo → Settings → Secrets and variables → Actions
- New repository secret
- Nom : AWS_ACCESS_KEY_ID
- Valeur : ta clé secrète
Utilisation dans workflow :
name: Deploy
on: [push]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to AWS
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
run: aws s3 sync ./build s3://my-bucket
HashiCorp Vault (équipes)
Pour gestion centralisée des secrets en production.
Installation
# macOS
brew tap hashicorp/tap
brew install hashicorp/tap/vault
# Démarrer serveur dev
vault server -dev
Stocker un secret
vault kv put secret/myapp/config api_key=abc123 db_password=secret
Lire un secret
vault kv get secret/myapp/config
Bonnes pratiques
- Rotation régulière : Change API keys tous les 90 jours
- Scopes minimaux : Donne permissions strictement nécessaires
- Secrets différents par env : Dev ≠ Staging ≠ Production
- Audit logs : Trace qui accède aux secrets
Conclusion
La gestion de secrets =
sécurité 101.
Checklist :
- .env dans .gitignore
- .env.example committé
- GitHub Secrets pour CI/CD
- Rotation régulière des clés
> "Un secret committé est un secret compromis."