Aller au contenu

Sauvegardes sécurisées et journaux d’audit dans Strapi 5 pour le RGPD

Apprenez pas à pas à configurer des sauvegardes chiffrées, activer la journalisation d’audit, gérer les secrets et répondre aux exigences du RGPD dans un projet Strapi 5.

Par l’équipe Revisionary · · 5 min de lecture

a close up of a network with wires connected to it
Photo de Albert Stoynov sur Unsplash

In Strapi 5 vous pouvez protéger l’intégrité des données et répondre aux obligations du RGPD en combinant exports chiffrés, sauvegardes cloud automatisées et journalisation d’audit intégrée. Voici un guide pratique montrant comment stocker les secrets en toute sécurité, configurer les cookies de session, activer les journaux d’audit, créer des sauvegardes régulières et conserver les données pendant les périodes légalement requises.

Vue d’ensemble

Strapi 5 sépare la configuration, les secrets d’exécution et le stockage des données, ce qui facilite la mise en place de contrôles en profondeur. Les éléments clés à couvrir sont :

  1. Gestion des secrets – garder les APP_KEYS, les secrets JWT et les mots de passe de base de données hors du contrôle de version.
  2. Renforcement des cookies de session – appliquer les attributs Secure, HttpOnly et SameSite.
  3. Journalisation d’audit – consigner qui a fait quoi et pendant combien de temps.
  4. Stratégie de sauvegarde – choisir entre les sauvegardes automatisées Strapi Cloud ou les exports chiffrés auto‑hébergés.
  5. Conformité RGPD – définir les durées de rétention, activer les points de terminaison d’exportation/suppression et anonymiser les adresses IP dans les logs.

Les sections suivantes détaillent chaque étape avec des fichiers de configuration concrets et des commandes CLI.

turned on gray laptop computer
Photo de Luca Bravo sur Unsplash

1. Gestion sécurisée des secrets

Jamais committer de secrets en texte clair. Strapi lit la plupart des secrets depuis des variables d’environnement, que vous pouvez fournir via un fichier .env en développement et un gestionnaire de secrets (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault, etc.) en production.

dotenv
# .env (développement uniquement – ne jamais committer ce fichier)
HOST=0.0.0.0
PORT=1337
APP_KEYS="changeMe1,changeMe2"
API_TOKEN_SALT=changeMe3
ADMIN_JWT_SECRET=changeMe4
JWT_SECRET=changeMe5
# Exemple de TTL de session – une semaine
UP_SESSIONS_ACCESS_TTL=604800

Tous les noms de secrets sont répertoriés dans le guide d’environnement de Strapi【1†L22-L57】. Lors du déploiement sur une plateforme de conteneurs, injectez les variables au moment de l’exécution et supprimez le fichier .env de l’image.

Astuce production

Stockez les valeurs dans un magasin de secrets dédié et référencez‑les dans la définition de votre conteneur, par exemple :

yaml
env:
  - name: APP_KEYS
    valueFrom:
      secretKeyRef:
        name: strapi-secrets
        key: APP_KEYS

2. Renforcer les cookies de session

Strapi utilise le middleware koa-session. Surcharger ses valeurs par défaut dans config/env/production/middlewares.js vous permet d’imposer les attributs de cookie les plus stricts.

js
// config/env/production/middlewares.js
module.exports = [{
  name: 'strapi::session',
  config: {
    rolling: true,          // renouveler l’expiration à chaque requête
    renew: true,            // émettre un nouveau cookie lorsqu’il approche de l’expiration
    httpOnly: true,         // non accessible depuis JavaScript
    secure: true,           // uniquement via HTTPS
    sameSite: 'strict',     // prévenir les attaques CSRF
    maxAge: 86400000,       // 24 h en ms
  },
}];

Les options correspondent aux recommandations du guide de sécurité de Strapi【11†L575-L590】.

3. Activer et configurer les journaux d’audit

La journalisation d’audit est une fonctionnalité Enterprise‑only, mais elle peut également être ajoutée via des plugins communautaires. Le journal d’audit EE intégré enregistre les connexions admin, la création de tokens, les CRUD de contenu et les modifications de médias.

js
// config/admin.js (édition Enterprise)
module.exports = ({ env }) => ({
  auditLogs: {
    enabled: true,
    retentionDays: 30,        // conserver les logs pendant 30 jours (ajuster selon le RGPD)
    exportMaxRows: 1000000,   // nombre maximal de lignes par export CSV
  },
});

Si vous utilisez le niveau gratuit, le plugin communautaire strapi-plugin-audit-logs offre des capacités similaires【23†L0-L10】.

Paramètres spécifiques au RGPD

Strapi permet l’anonymisation des IP dans le journal d’audit. Ajoutez la configuration de confidentialité dans config/plugins.js :

js
module.exports = ({ env }) => ({
  // autres plugins …
  auditLogs: {
    enabled: true,
    anonymizeIP: true, // supprimer le dernier octet des adresses IPv4
  },
});

L’anonymisation des IP vous aide à respecter le principe de minimisation des données du RGPD.

4. Stratégie de sauvegarde

Les sauvegardes doivent être régulières, chiffrées et testées. Strapi propose deux voies :

4.1. Sauvegardes automatisées Strapi Cloud

Pour les projets hébergés sur Strapi Cloud, la plateforme crée des sauvegardes quotidiennes pour les plans Business et des sauvegardes hebdomadaires pour les plans Pro【15†L8-L19】. La rétention est d’un mois avec les quatre sauvegardes les plus récentes conservées. Vous pouvez déclencher une sauvegarde manuelle depuis le tableau de bord ; une seule capture manuelle existe à la fois, planifiez‑la donc pendant les périodes de faible trafic.

4.2. Export chiffré auto‑hébergé

Lorsque vous exécutez Strapi sur votre propre infrastructure, utilisez la commande CLI d’export. La commande crée une archive compressée et chiffrée (.tar.gz.enc).

bash
# Créer une sauvegarde chiffrée (remplacer <key> par une chaîne base64 de 32 octets)
export ENCRYPTION_KEY="<key>"
yarn strapi export --key $ENCRYPTION_KEY --format tar.gz

Options :

  • --no-encrypt désactive le chiffrement (déconseillé).
  • --only <model> limite l’export à des collections spécifiques.
  • --exclude <model> exclut les gros actifs.

L’import fonctionne avec strapi import --key $ENCRYPTION_KEY【17†L8-L17】【17†L61-L70】.

5. Conservation et export pour le RGPD

Le RGPD vous impose de :

  1. Supprimer les données personnelles lorsque la base juridique expire.
  2. Fournir la portabilité sur demande.
  3. Conserver les logs uniquement pendant la durée nécessaire.

5.1. Suppression des données

L’interface d’administration de Strapi vous permet de supprimer définitivement des entrées. Pour une suppression massive, écrivez un script qui appelle l’API Content avec la méthode delete pour chaque enregistrement lié à l’utilisateur, puis lancez strapi export pour vérifier que les données ont disparu.

js
// Exemple de script Node utilisant le SDK
const strapi = require('@strapi/sdk');
(async () => {
  const users = await strapi.getEntries('users');
  for (const u of users) {
    await strapi.deleteEntry('users', u.id);
  }
})();

5.2. Portabilité des données

La CLI d’export produit un paquet compatible RGPD contenant du JSON brut pour chaque collection, pouvant être remis au sujet des données.

5.3. Conservation des logs

Définissez retentionDays dans la configuration du journal d’audit à la période minimale requise par votre organisation (par exemple, 30 jours). Pour une conservation plus longue, archivez les logs anciens dans un stockage sécurisé distinct et supprimez‑les de la base principale.

6. Vérifier l’intégrité des sauvegardes

Des contrôles automatisés évitent la corruption silencieuse.

  1. Vérification de hash – après chaque export, calculez un hash SHA‑256 et stockez‑le à côté de la sauvegarde.
  2. Test de restauration – planifiez chaque semaine une restauration dans un environnement de staging et exécutez un test de fumée contre l’API.
  3. Alerte en cas d’échec – intégrez le script de sauvegarde à votre monitoring (ex. : alertes Prometheus sur les codes de sortie non nuls).
bash
# Générer le hash après l’export
sha256sum backup-$(date +%F).tar.gz.enc > backup-$(date +%F).sha256

7. Checklist d’une configuration de sauvegarde et d’audit prête pour le RGPD

✅ ÉlémentDescription
SecretsTous les APP_KEYS, secrets JWT et mots de passe DB sont chargés depuis des variables d’environnement ou un gestionnaire de secrets.
Cookies de sessionSecure, HttpOnly, SameSite=Strict et maxAge raisonnable définis dans middlewares.js.
Journaux d’auditActivés, IP anonymisées, rétention configurée (≤ 30 jours sauf justification).
Plan de sauvegardeCloud quotidien/hebdomadaire OU strapi export auto‑hébergé avec chiffrement, stocké hors‑site.
Politique de rétentionSauvegardes conservées 1 mois (ou selon besoin), snapshots plus anciens archivés ou supprimés.
Export RGPDCommande d’export testée, fournit le JSON complet pour les demandes de portabilité.
Flux d’effacementSuppression scriptée des enregistrements personnels, suivie d’une vérification via export.
Contrôles d’intégritéGénération de hash et test de restauration périodique en environnement non‑production.
DocumentationRunbooks stockés en contrôle de version, revus chaque trimestre.
a laptop computer sitting on top of a wooden desk
Photo de Brian Abuga sur Unsplash

8. Conclusion

En centralisant la gestion des secrets, en durcissant les cookies de session, en activant les journaux d’audit et en adoptant une routine de sauvegarde chiffrée, une application Strapi 5 peut satisfaire à la fois les meilleures pratiques de sécurité et les exigences de responsabilité du RGPD. Automatisez les étapes, surveillez les résultats et alignez les politiques de rétention sur vos obligations légales. Le résultat est un CMS headless résilient qui protège les données des utilisateurs sans sacrifier l’agilité des développeurs.

Mots-clésStrapi 5sauvegardejournaux d’auditRGPDsécurité

Sources

  1. Strapi environment variables
  2. Strapi middleware configuration
  3. Backups in Strapi Cloud
  4. Strapi data export CLI
  5. Strapi GDPR compliance checklist

L’équipe Revisionary

Les développeurs de Revisionary, un plugin d’historique des versions pour Strapi 5. Nous écrivons sur Strapi, le développement web, l’IA et la sécurité des applications.

Cet article a été rédigé avec l'aide d'une IA.

Tous les articles