INITIALISATION SÉCURISÉE...

Guide Expert : Stratégie de Sauvegarde Immuable avec Restic et Artesca (S3)

Introduction : La Sauvegarde comme Ultime Ligne de Défense

Ce guide technique détaille la mise en place d'une solution de sauvegarde résiliente aux ransomwares. Nous déploierons une architecture basée sur l'outil de sauvegarde chiffré Restic et une cible de stockage objet S3-native Artesca, en nous focalisant sur les permissions IAM granulaires, l'automatisation de production via `systemd`, et les procédures de restauration.

Section 1 : Configuration Fine de la Cible sur Artesca

La sécurité de la cible de stockage est la pierre angulaire de la stratégie. Nous appliquons le principe du moindre privilège via une politique IAM stricte.

  1. Création d'un Bucket avec Object Lock : Dans Artesca, créez un bucket dédié (ex: `prod-server-backups`). Activez Object Lock en mode Compliance pour la protection la plus forte. Définissez une période de rétention par défaut (ex: 15 jours).
  2. Politique IAM Restrictive : Créez un utilisateur S3 dédié (ex: `svc_restic`) et attachez-lui la politique IAM ci-dessous. Cette politique n'autorise que les actions strictement nécessaires à Restic pour fonctionner, et uniquement sur le bucket désigné.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::prod-server-backups"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:DeleteObject"
                ],
                "Resource": [
                    "arn:aws:s3:::prod-server-backups/*"
                ]
            }
        ]
    }
  3. Générez et stockez de manière sécurisée les clés d'accès (`Access Key` et `Secret Key`) pour cet utilisateur.

Section 2 : Déploiement d'un Script de Sauvegarde de Production

Sur le serveur à sauvegarder, nous créons un script robuste qui gère les dépendances, le logging et le verrouillage pour éviter les exécutions multiples.

Créez le script /usr/local/bin/backup_script.sh :

#!/bin/bash
set -euo pipefail # Scripting en mode strict

# Fichier de configuration contenant les variables d'environnement
CONFIG_FILE="/etc/restic/env.conf"
LOG_FILE="/var/log/restic_backup.log"
LOCK_FILE="/var/run/restic_backup.lock"

# --- Fonction de logging ---
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# --- Verrouillage (pidfile/flock) pour éviter les exécutions concurrentes ---
exec 200>$LOCK_FILE
flock -n 200 || { log "ERREUR: Un backup est déjà en cours."; exit 1; }

# --- Exécution ---
log "Début du script de sauvegarde."

# Charger les variables d'environnement (identifiants, etc.)
if [ -f "$CONFIG_FILE" ]; then
    source "$CONFIG_FILE"
else
    log "ERREUR: Fichier de configuration $CONFIG_FILE introuvable."
    exit 1
fi

# Vérification de l'accessibilité du dépôt
log "Vérification de l'accessibilité du dépôt..."
restic snapshots &> /dev/null || { log "ERREUR: Le dépôt Restic est inaccessible."; exit 1; }

log "Lancement de la sauvegarde..."
restic backup /var/www /etc /home/bruno --exclude-file=/etc/restic/exclude.conf --verbose >> "$LOG_FILE" 2>&1

log "Application de la politique de rétention..."
# Garder les 7 derniers jours, 4 dernières semaines, 6 derniers mois, 2 dernières années
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --keep-yearly 2 --prune >> "$LOG_FILE" 2>&1

log "Vérification de l'intégrité du dépôt..."
restic check >> "$LOG_FILE" 2>&1

log "Fin du script de sauvegarde."
exit 0

N'oubliez pas de rendre ce script exécutable : sudo chmod +x /usr/local/bin/backup_script.sh

Section 3 : Automatisation Fiable avec `systemd`

Nous utilisons un service et un timer `systemd` pour une exécution planifiée et contrôlée, supérieure à `cron` pour les services système.

  1. Création de l'unité de service (/etc/systemd/system/restic-backup.service) :
    [Unit]
    Description=Service de sauvegarde Restic
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/backup_script.sh
    User=root
    
    [Install]
    WantedBy=multi-user.target
    
  2. Création de l'unité timer (/etc/systemd/system/restic-backup.timer) :
    [Unit]
    Description=Lance le backup Restic tous les jours à 02h30
    
    [Timer]
    # Exécution quotidienne à 02h30 du matin
    OnCalendar=*-*-* 02:30:00
    # Ajoute une variation aléatoire de 10 minutes pour éviter de surcharger les systèmes
    RandomizedDelaySec=10m
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    
  3. Activation du timer :
    sudo systemctl daemon-reload
    sudo systemctl enable --now restic-backup.timer
    sudo systemctl list-timers # Pour vérifier
    

Section 4 : Procédures de Restauration et de Validation

Une sauvegarde n'a de valeur que si elle est testée et restaurable. Restic offre des outils puissants pour cela.

> [SYSTEM] Accès niveau root détecté.
> [MESSAGE] Excellence en infrastructure & sécurité confirmée.
> [STATUS] Portfolio opérationnel, non régressif, visuellement optimisé.
> [COMMAND] Respect +++