Aller au contenu principal

Gestion des Secrets

Ce fichier documente comment les secrets sont gérés dans le projet StageConnect.

Principe Fondamental

Aucun secret dans le code, jamais, même en commentaire. Le code doit pouvoir être ouvert publiquement sans risque.

Secrets du Projet

Les variables d'environnement suivantes sont utilisées dans le backend :

Authentification

VariableDescriptionÉtat actuel
SECRET_KEYClé de signature JWTPartagé manuellement → migrer vers Passbolt
ALGORITHMAlgorithme JWT (HS256)Code (non sensible)
ACCESS_TOKEN_EXPIRE_MINUTESDurée access token (720 en local, 30 en prod)Code (non sensible)

Base de Données

VariableDescriptionÉtat actuel
DATABASE_URLURL de connexion PostgreSQLPartagé manuellement → migrer vers Passbolt
DIRECT_URLURL directe pour AlembicPartagé manuellement → migrer vers Passbolt

Supabase

VariableDescriptionÉtat actuel
SUPABASE_URLURL du projet SupabaseTableau de bord Supabase
SUPABASE_ANON_KEYClé publique anonTableau de bord Supabase
SUPABASE_SERVICE_ROLE_KEYClé privée adminPartagé manuellement → migrer vers Passbolt

Redis

VariableDescriptionÉtat actuel
REDIS_HOSTURL de connexion RedisPartagé manuellement → migrer vers Passbolt
REDIS_ENABLEDActivation Redis (true/false)Code (non sensible)

Cloudinary (Fichiers)

VariableDescriptionÉtat actuel
CLOUDINARY_CLOUD_NAMENom du cloudPartagé manuellement → migrer vers Passbolt
CLOUDINARY_API_KEYClé APIPartagé manuellement → migrer vers Passbolt
CLOUDINARY_API_SECRETSecret APIPartagé manuellement → migrer vers Passbolt

Intégrations

VariableDescriptionÉtat actuel
CHUTES_API_KEYClé API pour recherche sémantiquePartagé manuellement → migrer vers Passbolt

Configuration

VariableDescriptionÉtat actuel
BACKEND_CORS_ORIGINSOrigines autorisées (séparées par virgules)Code (non sensible)
DEBUGMode debug (true/false)Code (non sensible)
ENVIRONMENTEnvironnement (development/production)Code (non sensible)

Monitoring

VariableDescriptionÉtat actuel
SIGNOZ_ENDPOINTURL du serveur SigNoz pour les tracesPartagé manuellement → migrer vers Passbolt

Stockage des Secrets

Locale (Développement)

Les secrets sont stockés dans un fichier .env à la racine du projet backend :

# Copier depuis .env.example et remplir avec les vraies valeurs
cp .env.example .env

Le fichier .env est dans .gitignore — il ne doit jamais être commité.

Production (Actuel)

Les secrets sont stockés dans :

  • Vercel : Variables d'environnement pour les 3 frontends
  • Dokploy : Variables d'environnement pour le backend

Passbolt (Cible)

Passbolt sera configuré pour stocker et partager les secrets de manière sécurisée.

Passbolt (Cible - Pas Encore Configuré)

Passbolt est le gestionnaire de mots de passe prévu pour l'équipe. Il sera auto-hébergé sur votre VPS.

Accès

  • URL : https://passbolt.votre-domaine.com
  • Connexion : Email + passphrase + clé PGP

Comment récupérer un secret

  1. Se connecter à Passbolt
  2. Rechercher le secret par nom (ex: "SUPABASE_SERVICE_ROLE_KEY")
  3. Copier la valeur
  4. Coller dans la variable d'environnement correspondante

Comment ajouter un nouveau secret

  1. Ajouter la variable dans .env.example avec une valeur fictive
  2. Ajouter le vrai secret dans Passbolt
  3. Configurer la variable dans Vercel/Dokploy
  4. Documenter dans ce fichier

Lacunes Actuelles

Gestion des secrets à améliorer

Nous n'avons pas encore de processus structuré pour la gestion des secrets.

Ce qui manque :

  • ❌ Passbolt n'est pas encore configuré — les secrets sont partagés manuellement
  • ❌ Pas de rotation automatique des secrets
  • ❌ Pas de historique des accès aux secrets
  • ❌ Pas de solution de staging — les tests se font en production

Plan pour Améliorer

  1. Court terme :

    • Configurer Passbolt sur le VPS
    • Importer tous les secrets actuels
    • Supprimer les partages manuels (Slack, etc.)
  2. Moyen terme :

    • Configurer la rotation des mots de passe
    • Mettre en place l'audit des accès
    • Former l'équipe à l'utilisation de Passbolt

Que Faire si un Secret est Exposé

  1. Immédiatement : Révoquer et régénérer le secret compromis
  2. Dans l'heure : Mettre à jour tous les endroits où le secret est utilisé
  3. Dans la journée : Investiguer comment le secret a été exposé
  4. Documenter : Créer un rapport d'incident dans security/incidents/

Règles Absolues

  • ❌ Jamais de secret dans le code source
  • ❌ Jamais de secret dans les logs
  • ❌ Jamais de secret dans les messages d'erreur
  • ❌ Jamais de secret dans les screenshots ou partage d'écran
  • ✅ Toujours utiliser les variables d'environnement
  • ✅ Toujours passer par Passbolt pour les secrets partagés