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"