Amazon S3: Créer une sauvegarde ou miroir de votre bucket

Ce tuto décrit les étapes de base afin de réaliser une sauvegarde de votre bucket amazon S3 sur un serveur linux. Ce même principe pourra être utilisé pour un miroir.

Objectifs:

  • Autoriser uniquement la lecture sur le bucket
  • Ne pas supprimer les fichiers du bucket ou du serveur (important si le bucket S3 est compromis, les fichiers supprimés doivent rester accessibles depuis le miroir)
  • Le système doit être indépendant.

Note: Il est possible d'utiliser les évènements S3 pour générer des commandes via les notifications SNS. Cette procédure permettrait de gérer la synchronisation à la demande, plutôt que de faire des CRONS "inutiles". Cependant, je souhaitais une solution indépendantes de AWS, c'est donc un serveur externe qui gérera tout le process.

Création d'une IAM Amazon pour la lecture des fichiers et dossiers

Les permissions suivantes sont requises : ListBucket et GetObject

  • Créer un nouvel utilisateur Aws: backup
  • Choisissez le type d'accès: Accès par programmation (Aws Key + Aws secret)
  • Limite d'autorisation : AmazonS3ReadOnlyAccess
  • Ajouter la police à votre stratégie de compartiment.

Configuration du serveur

Installation de RClone

curl https://rclone.org/install.sh | sudo bash

Création de l'hôte distant (AWS S3)

rclone config
  • Sélectionner New remote (n)
  • Name: remote
  • Type Of storage: Amazon S3 Compliant (s3)
  • S3 provider: AWS (1)
  • Aws Credential: (1)
  • AWS Acces Key ID: YOURAWSKEY
  • AWS Secret: YOURAWSSECRET
  • Region to connect: La région de votre bucket
  • Endpoint: Laisser vide si non utilisé
  • Location constraint : doit correspondre au choix de la région
  • ACL : en fonction de vos besoins (Private dans mon cas) (1)
  • Server side Encryption: (1)
  • Storage class : default ou selon vos besoins

Tester la configuration (affiche la liste des hôtes distants)

rclone listremotes

Afficher la liste des buckets :

rclone lsd remote:

Pour voir le contenu de votre bucket S3:

rclone tree remote:votre-bucket

Création de votre copie

Lorsque vous êtes prêt, vous pouvez copier votre bucket s3 sur votre serveur

rclone sync remote:votre-bucket /home/backup/s3
ou, si vous voulez jsute copier, sans syncro
rclone copy remote:votre-bucket /home/backup/s3

Optimisation de la copy et mise en place de Cron

Si vous avez de nombreux fichiers à copier, il peut-être interessant de filtrer cette liste afin de limiter aux fichiers/dossiers modifiés depuis 24 heures par exemples. Pour cela, il suffit d'jouter un argument à la ligne de commande:

--max-age 24h
rclone copy --max-age 24h remote:votre-bucket /home/backup/s3

De même, il peut s'avérer utile de ne pas lister tous les fichiers du dossier de destination avec l'argument --no-traverse

Si tout fonctionne correctement, on peut ajouter la commande cron. Dans mon cas, j'ai décidé de la faire toutes les 6 heures. A vous de choisir votre période cron en fonction de vos besoins. Pour cela, il faut créer un script sh

#!/bin/bash
#/home/backup/rclone-cron.sh
if pidof -o %PPID -x “rclone-cron.sh”; then
exit 1
fi
rclone copy --no-traverse --max-age 24h remote:votre-bucket /home/backup/s3
exit

Donner les droits exécutables au script

chmod a+x /home/backup/rclone-cron.sh

Editer le crontab

crontab -e

11 */6 * * * sh /home/backup/rclone-cron.sh >/dev/null 2<&1

Ce cron sera exécuté toutes les 6 heures à la 11ème minute. Pourquoi la 11ème ? tout simplement parce que j'ai d'autres cron qui tournent avant, et que je veux éviter de tout lancer en même temps.

Enfin, vous pouvez utiliser un fichier de configuration différent avec l'argument --config="/home/backup/.rclone.conf"

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.