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
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 :
- 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. - Renforcement des cookies de session – appliquer les attributs
Secure,HttpOnlyetSameSite. - Journalisation d’audit – consigner qui a fait quoi et pendant combien de temps.
- Stratégie de sauvegarde – choisir entre les sauvegardes automatisées Strapi Cloud ou les exports chiffrés auto‑hébergés.
- 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.
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.
# .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=604800Tous 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 :
env:
- name: APP_KEYS
valueFrom:
secretKeyRef:
name: strapi-secrets
key: APP_KEYS2. 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.
// 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.
// 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 :
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).
# 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.gzOptions :
--no-encryptdé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 :
- Supprimer les données personnelles lorsque la base juridique expire.
- Fournir la portabilité sur demande.
- 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.
// 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.
- Vérification de hash – après chaque export, calculez un hash SHA‑256 et stockez‑le à côté de la sauvegarde.
- Test de restauration – planifiez chaque semaine une restauration dans un environnement de staging et exécutez un test de fumée contre l’API.
- Alerte en cas d’échec – intégrez le script de sauvegarde à votre monitoring (ex. : alertes Prometheus sur les codes de sortie non nuls).
# Générer le hash après l’export
sha256sum backup-$(date +%F).tar.gz.enc > backup-$(date +%F).sha2567. Checklist d’une configuration de sauvegarde et d’audit prête pour le RGPD
| ✅ Élément | Description |
|---|---|
| Secrets | Tous 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 session | Secure, HttpOnly, SameSite=Strict et maxAge raisonnable définis dans middlewares.js. |
| Journaux d’audit | Activés, IP anonymisées, rétention configurée (≤ 30 jours sauf justification). |
| Plan de sauvegarde | Cloud quotidien/hebdomadaire OU strapi export auto‑hébergé avec chiffrement, stocké hors‑site. |
| Politique de rétention | Sauvegardes conservées 1 mois (ou selon besoin), snapshots plus anciens archivés ou supprimés. |
| Export RGPD | Commande d’export testée, fournit le JSON complet pour les demandes de portabilité. |
| Flux d’effacement | Suppression 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. |
| Documentation | Runbooks stockés en contrôle de version, revus chaque trimestre. |
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.
Sources
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.