21 janvier 2026
Security Hub vous permet de sauvegarder l'intégralité de la configuration du système, en capturant tous les paramètres, règles et politiques dans une archive horodatée. Ces sauvegardes constituent un point de récupération fiable, vous permettant de restaurer le système dans un état stable et connu en cas de mauvaise configuration, de défaillance ou d'incident de sécurité. Grâce aux instantanés versionnés, vous pouvez rapidement revenir à une configuration précédente, minimisant ainsi les interruptions de service et maintenant la continuité opérationnelle.
Création d'une sauvegarde locale
Dans le menu des paramètres, l'onglet « Sauvegardes et redémarrage » crée simplement un fichier de sauvegarde local, qui constitue un point de récupération dans le temps, par exemple pour annuler une modification de configuration.

Écran de confirmation de sauvegarde
Création d'une sauvegarde distante
À des fins de reprise après sinistre, il peut être utile de stocker les sauvegardes en dehors de l'appareil. Access Gate propose une option HTTP simple à configurer et sécurisée pour ce faire :
- Dans « Sauvegardes et redémarrage », choisissez l'option « Configurer un dépôt distant »
- Saisissez l'adresse que le système utilisera pour enregistrer les sauvegardes, ainsi qu'un mot de passe de chiffrement
Le protocole serveur est très simple : il doit accepter une requête POST pour stocker une sauvegarde, et une requête GET pour en télécharger une.
À titre d'exemple, le code Python suivant illustre un serveur minimal :
from http.server import BaseHTTPRequestHandler, HTTPServer
import os
import urllib.parse
import shutil
import subprocess
import sys
class Handler(BaseHTTPRequestHandler):
def read_body(self):
length = self.headers.get("Content-Length")
transfer_encoding = self.headers.get("Transfer-Encoding", "").lower()
if length is not None:
return self.rfile.read(int(length))
elif "chunked" in transfer_encoding:
body = b""
while True:
line = self.rfile.readline().strip()
if not line:
break
chunk_size = int(line, 16)
if chunk_size == 0:
break
chunk = self.rfile.read(chunk_size)
body += chunk
self.rfile.readline()
return body
else:
return self.rfile.read()
def do_POST(self):
path = urllib.parse.unquote(self.path)
parts = path.split("/", 1)
if len(parts) != 2 or not parts[1]:
self.send_response(400)
self.end_headers()
print("Missing filename in URL. Use /<filename>")
return
filename = parts[1]
safe_filename = os.path.basename(filename)
data = self.read_body()
with open(safe_filename, "wb") as f:
f.write(data)
self.send_response(200)
self.end_headers()
print("Uploaded file ", len(data), "bytes")
def do_GET(self):
path = urllib.parse.unquote(self.path)
parts = path.split("/", 1)
if len(parts) != 2 or not parts[1]:
self.send_response(400)
self.end_headers()
print("Missing filename in URL. Use /<filename>")
return
filename = parts[1]
safe_filename = os.path.basename(filename)
if safe_filename == "list":
result = subprocess.run(
["sha1sum backup_*"],
capture_output=True,
text=True,
shell=True
)
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
copy = result.stdout
self.wfile.write(result.stdout.encode("utf-8"))
print(copy)
else:
f = open(safe_filename, 'rb')
self.send_response(200)
self.send_header("Content-type", "application/x-binary")
fs = os.fstat(f.fileno())
self.send_header("Content-Length", str(fs[6]))
self.send_header("Last-Modified", self.date_time_string(fs.st_mtime))
self.end_headers()
shutil.copyfileobj(f, self.wfile)
f.close()
print("Downloaded file ", str(fs[6]), "bytes")
return
if __name__ == "__main__":
serverAddr = sys.argv[1]
serverPort = sys.argv[2]
print("Listening on http://",serverAddr,":",serverPort)
HTTPServer((serverAddr, int(serverPort)), Handler).serve_forever()