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.

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."