🧹 Politique de Redaction des Logs - Arkalia-LUNA¶
Vue d'ensemble¶
La politique de redaction des logs d'Arkalia-LUNA garantit la sécurité et la conformité RGPD en supprimant automatiquement les données sensibles des fichiers de logs.
🎯 Objectifs de Sécurité¶
- Protection des données sensibles : Mots de passe, tokens, clés API
- Conformité RGPD : Suppression automatique des IPs privées
- Audit de sécurité : Traçabilité des actions de nettoyage
- Performance : Rotation et archivage intelligent
🔍 Données Sensibles Détectées¶
1. 🔐 Authentification¶
# Mots de passe
password["':\s]*["']\w+["']\s*
# Tokens
token["':\s]*["']\w+["']\s*
# Clés API
api_key["':\s]*["']\w+["']\s*
# Bearer tokens
Bearer [A-Za-z0-9\-._~+/]+=*
2. 🌐 Informations Réseau¶
# IPs privées classe A (10.x.x.x)
\b10\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
# IPs privées classe B (172.16-31.x.x)
\b172\.(1[6-9]|2[0-9]|3[0-1])\.\d{1,3}\.\d{1,3}\b
# IPs privées classe C (192.168.x.x)
\b192\.168\.\d{1,3}\.\d{1,3}\b
3. 🔑 Clés Cryptographiques¶
# Clés SSH
ssh-rsa [A-Za-z0-9+/=]+
# Clés ed25519
ssh-ed25519 [A-Za-z0-9+/=]+
# Signatures GPG
-----BEGIN PGP SIGNATURE-----.*-----END PGP SIGNATURE-----
🛠️ Configuration Log Scrubber¶
Fichier de Configuration¶
{
"log_directories": [
"logs/",
"modules/*/logs/",
"infrastructure/monitoring/loki/",
"infrastructure/monitoring/prometheus/"
],
"max_log_age_days": 30,
"max_log_size_mb": 100,
"sensitive_patterns": [
"password[\"':\\s]*[\"']\\w+[\"']\\s*",
"token[\"':\\s]*[\"']\\w+[\"']\\s*",
"api_key[\"':\\s]*[\"']\\w+[\"']\\s*",
"\\b192\\.168\\.\\d{1,3}\\.\\d{1,3}\\b",
"\\b10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b",
"\\b172\\.(1[6-9]|2[0-9]|3[0-1])\\.\\d{1,3}\\.\\d{1,3}\\b",
"Bearer [A-Za-z0-9\\-._~+/]+=*",
"ssh-rsa [A-Za-z0-9+/=]+"
],
"archive_directory": "logs/archives/",
"dry_run": false
}
Variables d'Environnement¶
# Configuration personnalisée
export ARKALIA_LOG_SCRUBBER_CONFIG="./config/log_scrubber.json"
# Mode dry-run global
export ARKALIA_SCRUBBER_DRY_RUN="true"
# Niveau de verbose
export ARKALIA_SCRUBBER_VERBOSE="true"
🕐 Automatisation et Scheduling¶
Configuration Cron¶
# Nettoyage quotidien à 02:00
0 2 * * * cd /path/to/arkalia && python scripts/log_scrubber.py
# Nettoyage hebdomadaire complet (dimanche 03:00)
0 3 * * 0 cd /path/to/arkalia && python scripts/log_scrubber.py --verbose
# Purge archives anciennes (1er du mois 04:00)
0 4 1 * * find logs/archives/ -name '*.gz' -mtime +90 -delete
Installation Automatique¶
# Configuration cron automatique
bash scripts/setup_log_scrubber_cron.sh
# Vérification status
crontab -l | grep "Arkalia-LUNA"
📊 Métriques de Nettoyage¶
Statistiques Collectées¶
stats = {
"files_processed": 156,
"sensitive_data_removed": 23,
"bytes_saved": 2457600, # ~2.4MB
"archives_created": 12,
"errors": []
}
Rapport de Nettoyage¶
🧹 [LOG SCRUBBER] Nettoyage terminé - 2025-06-27 18:45:00
📊 STATISTIQUES:
📁 Fichiers traités: 156
🔒 Données sensibles supprimées: 23
💾 Espace libéré: 2.4MB
📦 Archives créées: 12
⏱️ Durée: 3.2s
🎯 TYPES DE DONNÉES NETTOYÉES:
• Mots de passe: 5
• Tokens Bearer: 8
• IPs privées: 10
📁 ROTATION DES LOGS:
• Logs > 100MB: 3 fichiers archivés
• Logs > 30 jours: 9 fichiers supprimés
✅ Nettoyage réussi sans erreurs
🔒 Politique de Rétention¶
Règles de Conservation¶
Type de Log | Durée de Rétention | Action |
---|---|---|
Logs système | 30 jours | Suppression |
Logs audit | 90 jours | Archive compressée |
Logs erreur | 60 jours | Archive + alerte |
Métriques | 365 jours | Agrégation |
Archivage Intelligent¶
# Compression automatique
gzip logs/old_file.log > logs/archives/old_file_20250627.log.gz
# Vérification intégrité
gzip -t logs/archives/*.gz
# Purge automatique (>90 jours)
find logs/archives/ -name "*.gz" -mtime +90 -delete
🔍 Exemples de Redaction¶
Avant Redaction¶
2025-06-27 18:30:00 [INFO] User login: password="secret123" from 192.168.1.100
2025-06-27 18:31:00 [AUTH] API call with token="Bearer eyJ0eXAiOiJKV1QiLCJhbGc"
2025-06-27 18:32:00 [SSH] Key exchange: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAB...
Après Redaction¶
2025-06-27 18:30:00 [INFO] User login: password="[REDACTED]" from [IP_REDACTED]
2025-06-27 18:31:00 [AUTH] API call with token="[REDACTED]"
2025-06-27 18:32:00 [SSH] Key exchange: [SSH_KEY_REDACTED]
🛡️ Sécurité du Processus¶
Protection des Backups¶
# Permissions restrictives
chmod 600 logs/archives/*.gz
# Chiffrement optionnel
gpg --cipher-algo AES256 --compress-algo 1 --symmetric logs/sensitive.log
Audit Trail¶
2025-06-27 18:45:00 [SCRUBBER] Started log cleaning process
2025-06-27 18:45:01 [SCRUBBER] Pattern match: password in logs/app.log:42
2025-06-27 18:45:01 [SCRUBBER] Redacted: logs/app.log line 42
2025-06-27 18:45:02 [SCRUBBER] Archive created: logs/archives/app_20250627.log.gz
2025-06-27 18:45:03 [SCRUBBER] Process completed successfully
🚀 Utilisation¶
Mode Manuel¶
# Nettoyage standard
python scripts/log_scrubber.py
# Mode dry-run (test)
python scripts/log_scrubber.py --dry-run
# Mode verbose
python scripts/log_scrubber.py --verbose
# Configuration personnalisée
python scripts/log_scrubber.py --config config/custom_scrubber.json
Mode Automatique¶
# Installation cron
bash scripts/setup_log_scrubber_cron.sh
# Vérification logs cron
tail -f logs/cron_scrubber.log
# Status du service
systemctl status crond # Linux
launchctl list | grep cron # macOS
📋 Conformité RGPD¶
Droits des Utilisateurs¶
- Droit à l'effacement : Suppression automatique après 30 jours
- Droit à la portabilité : Exports disponibles avant suppression
- Droit d'accès : Logs d'audit disponibles sur demande
Documentation de Conformité¶
- Registre des traitements : Mis à jour automatiquement
- Analyse d'impact : Intégrée au processus de nettoyage
- Mesures techniques : Chiffrement + contrôle d'accès
⚠️ Bonnes Pratiques¶
- Test en dry-run avant première utilisation
- Backup critique avant nettoyage de masse
- Monitoring des erreurs de redaction
- Validation périodique des patterns de détection
- Formation équipe sur les procédures de conformité
🔧 Dépannage¶
Erreurs Communes¶
# Permissions insuffisantes
chmod +x scripts/log_scrubber.py
# Python introuvable
which python3
export PATH="/usr/bin:$PATH"
# Logs corrompus
python scripts/log_scrubber.py --skip-corrupted