Préambule

Putain, j’avais jamais fait de préambule.
J’ai commencé à m’intéresser au backup il y a plusieurs années. J’ai un synology qui fait des backups locaux avec Time Machine et avec l’outil intégré de Windows.
Toutes mes photos sont sur un disque dur externe en raid et sont aussi backupé sur le synology. Par contre, si un jour il y a le feu chez moi, je perds tout.

Je me suis donc intéressé à faire des backups hors site. Plusieurs méthodes :

  1. un disque dur externe qu’on entrepose ailleurs, et une fois par mois (plus ou moins), on fait une copie.
  2. un serveur de backup

J’ai choisi l’option 2, ça me permet de faire ça depuis chez moi, en une seule ligne de commande.

Qu’est-ce que le stockage à froid ?

C’est un espace de stockage, en cloud, qui sert à entreposer des fichiers. Pour accéder aux fichiers, il faut entre 1 minutes et 12 heures pour les dégeler. Autant dire que c’est nickel pour du backup sans contrainte de remise en service rapide.
Pour mon cas, c’est parfait, ce stockage ne me sert que « au cas ou ».

A l’inverse, il existe du stockage à chaud, c’est pour des accès immédiats aux fichiers et pour travailler dessus. Ce n’est absolument pas le même tarif.

L’offre OVH

Je n’ai pas d’actions chez eux, ils ont une offre assez intéressante : Cloud Archive.
On paie à la consommation (upload/download et espace de stockage) :

  • Trafic entrant : 0,01 € HT/Go
  • Trafic sortant : 0,01 € HT/Go
  • 0,002 € HT/mois/Go

Je trouve ça pas cher du tout…

Duplicity

Duplicity permet de backuper un dossier en créant des fichiers tar chiffrés, découpés en volumes et de les envoyer sur un serveur distant.
Il utilise plusieurs protocoles pour communiquer avec les serveurs :

  • Amazon S3
  • DropBox
  • ftp
  • Google Drive
  • IMAP
  • local filesystem
  • Microsoft Azur
  • Rackspace Cloudfiles
  • rsync
  • ssh/scp
  • SwiftStack
  • WebDAV
  • … (je n’ai pas tout mis)

Vous pouvez retrouver toute la documentation de duplicity sur leur site.

Pourquoi utiliser Duplicity ?

Vu que l’on va envoyer des données sur un cloud, mieux vaut que ces données soient chiffrées au cas où l’espace de stockage soit compromis.
Je ne tiens pas à ce que mes photos se retrouvent à nues sur Internet.

L’autre intérêt est aussi que Duplicity va faire un « diff » et n’envoyer que les données modifiées ou ajoutées depuis la dernière sauvegarde.
On économise donc de la bande passante.

L’offre d’OVH proposant une API OpenStack Swift, c’est ce que j’ai utilisé pour gérer mes backups avec Duplicity.

Installation de Duplicity

Si vous êtes sous Debian / Ubuntu :

apt-get install duplicity

Si vous êtes sous MacOS :

brew install duplicity

Et ensuite on install les packages pour OpenStack avec pip :

pip install python-swiftclient python-keystoneclient

Génération des clés

Pour sécuriser les transactions, nous allons générer deux clés. Une pour signer et une pour chiffrer.

Génération de la clé pour chiffrer

gpg --gen-key

Je vous laisse le soin de renseigner les valeurs. Je crois que j’ai mis le plus de bits possible et que je n’ai pas mis de date d’expiration.
Sauvegardez bien votre passphrase

Génération de la clé pour signer

gpg --gen-key

Idem que précédemment, donnez lui un autre nom et une passphrase différente.

On a donc maintenant deux clés pour notre backup, une pour signer et une pour chiffrer. On peut vérifier avec la commande gpg --list-keys :

hawking:Downloads jihaisse$ gpg --list-keys
/Users/jihaisse/.gnupg/pubring.gpg
----------------------------------
pub 8192R/32DB8A93 2017-03-26
uid Backup Encryption <user@example.com>
sub 8192R/A8DDF912 2017-03-26

pub 8192R/0DE8C83D 2017-03-26
uid Backup Signing <user@example.com>
sub 8192R/0EE44080 2017-03-26

Faites une sauvegarde de ces clés. Comme le fait remarquer Raphaël dans les commentaires :

Si OVH perd ton serveur, ce qui peut arriver, et qu’il n’y a pas de backup des clés, alors tu ne pourras jamais récupérer les données perdues. La sauvegarde des clés n’est donc pas une option.

gpg --export-secret-keys -a 0DE8C83D > signing.asc
gpg --export-secret-keys -a A8DDF912 > encryption.asc

Pour les réimporter ensuite, c’est avec la commande gpg --import

Création de l’espace de stockage

Dans votre compte OVH, commandez une offre cloud, puis créez un conteneur dans l’onglet « Stockage »

Donnez lui un nom et choisissez une région.

On en profite pour ajouter un utilisateur OpenStack qui nous sera utile plus tard.

Une fois l’utilisateur créé, cliquez sur l’icone « clé à molette » pour télécharger le fichier de configuration OpenStack « openrc.sh »
Dans ce fichier se trouvent des informations qui nous servirons plus tard.

Création du script de backup

Maintenant que l’on a nos clés et que Duplicity est installé ainsi que le client Swift, on va créer le script.

Il nous faut 6 variables pour nous connecter via OpenStack :

  • SWIFT_USERNAME : Identifiant de l’utilisateur OpenStack que l’on a créé précédement
  • SWIFT_PASSWORD : Mot de passe de l’utilisateur OpenStack
  • SWIFT_AUTHURL : URL de l’API
  • SWIFT_AUTHVERSION : Numéro de version de l’API
  • SWIFT_TENANTNAME : Identifiant que vous allez trouver dans le fichier openrc.sh
  • SWIFT_REGIONNAME : Région que vous avez configuré pour votre conteneur

Une fois que vous avez tout ça, c’est très simple (j’ai passé deux jours dessus pour réussir à trouver tous les identifiants qu’il fallait)

Le script :

#!/bin/bash
enc_key=A8DDF912
sign_key=0EE44080
src="/Volumes/Photos/Mes Photos/"
dest="swift://backup_photos"

# OpenStack
export SWIFT_USERNAME="FXXkttJQahTD"
export SWIFT_PASSWORD="xxxxxx"
export SWIFT_AUTHURL="https://auth.cloud.ovh.net/v2.0/"
export SWIFT_AUTHVERSION="2"
export SWIFT_TENANTNAME="xxxxxx"
export SWIFT_REGIONNAME="SBG3"

# GnuPG
export PASSPHRASE="UnSuperMotDePasse"
export SIGN_PASSPHRASE="UnAutreSuperMotDePasse"

duplicity --verbosity notice \
        --encrypt-key "$enc_key" \
        --sign-key "$sign_key" \
        --num-retries 3 \
        --asynchronous-upload \
        --cf-backend swift \
        --volsize 100 \
         "${src}" "${dest}"
         
unset SWIFT_USERNAME SWIFT_PASSWORD SWIFT_AUTHURL SWIFT_AUTHVERSION SWIFT_TENANTNAME SWIFT_REGIONNAME PASSPHRASE SIGN_PASSPHRASE

Explications

  • enc_key : clé de chiffrement que l’on a généré précédemment
  • sign_key : clé de signature
  • src : dossier à backuper
  • dest : où on backup. Remplacez backup_photos par le nom du container que vous avez créé
  • SWIFT_USERNAME : Identifiant de l’utilisateur OpenStack que l’on a créé précédement
  • SWIFT_PASSWORD : Mot de passe de l’utilisateur OpenStack
  • SWIFT_AUTHURL : URL de l’API
  • SWIFT_AUTHVERSION : Numéro de version de l’API
  • SWIFT_TENANTNAME : Identifiant que vous allez trouver dans le fichier openrc.sh
  • SWIFT_REGIONNAME : Région que vous avez configuré pour votre conteneur
  • PASSPHRASE : Le mot de passe de la clé de chiffrement
  • SIGN_PASSPHRASE : Le mot de passe de la clé de signature

Enregistrez le fichier et changez les permissions pour le rendre executable :

chmod +x backup.sh

Il ne reste qu’à lancer le script.
Je vous conseille de tester avec un dossier contenant peu de fichiers pour vérifier que la connexion se fait bien et que duplicity envoi bien les fichiers.

Ressources

Les liens utiles qui m’ont servi pour créer ce script :

21 commentaires sur “Backup dans un stockage à froid OVH avec Duplicity et l’API OpenStack / Swift

  1. Rha.., ça fait 24 heures que je suis dessus (aha, deux fois plus rapide…), mais je bloque aussi à la deuxième sauvegarde :

    https://community.ovh.com/t/sauvegardes-public-cloud-archive-et-duplicity-deja-dup/3949

    donc en gros pour que le patch arrive dans ma distribution, ça peut être dans 6 mois, un an ?

    Parce que dégeler les fichiers manuellement avant chaque sauvegarde, c’est même pas envisageable pour des sauvegardes automatiques, et ça ne prend pas quelques minutes pour dégeler mais des heures.

    • Oh, il n’existait pas cet article il y a 8 mois. Puisque tu as réussi semble t’il, peut tu me dire si il faut souscrire EN PLUS à un compte PCS, car en lisant l’article je vois qu’ils font appel à un compte PCS en plus.

  2. Bonjour à tous,

    Je m’arrache les cheveux avec ça depuis quelques temps, impossible de me connecter au PCA avec le config.json proposé par le tuto OVH, je reçois systématiquement un erreur. la manip ci-dessus par contre me permet de me connecter, mais j’aimerais pouvoir utiliser l’astuce du PCS pour ne pas avoir à dégeler les diffs..

    J’ai regardé les sources de ton container docker, et je ne vois pas de différence avec le tuto d’OVH ou avec ce que j’a fait, tu peux me confirmer que ça marche pour toi?

    Merci et bonnes fêtes à tous

  3. Bonjour,

    Merci pour cet article !

    Je vais le mettre en oeuvre dès qu’OVH m’activera mon compte OpenStack.
    A ce propos, quel est l’intérête de passer par OpenStack ? Duplicity gère aussi le protocol rsync.
    C’est plus optimum niveau espace disque / réseau ?

    merci

  4. Hello !

    Merci pour ton article ! Juste une remarque par rapport à « Faites une sauvegarde de ces clés. On ne sait jamais. ». En réalité, si OVH perd ton serveur, ce qui peut arriver, et qu’il n’y a pas de backup des clés, alors tu ne pourras jamais récupérer les données perdues. La sauvegarde des clés n’est donc pas une option.

    Mieux vaut prévenir que guérir :)

      • Super réactivité ! Du coup je me permets d’ajouter un autre commentaire.

        J’ai utilisé ton article pour sauvegarder un de mes serveurs OVH alors que tu parles de sauvegarder ta machine windows ce qui peut créer un peu de confusion avec le cold storage OVH que tu mentionnes pour héberger les backup.

        Par ailleurs une bonne pratique est de générer les clés gpg sur une machine différente de celle que tu veux sauvegarder. En effet étant donnée que tu n’as besoin que de la clé publique pour chiffrer l’archive, tu peux : 1) générer les clés gpg sur une machine A de confiance 2) importer la clé publique sur la machine B que tu veux sauvegarder. De cette façon, même si tu perds ta machine B tu es capable de récupérer tes données et, de plus, tes backup sont chiffré de manière sécurisé tant que ta machine A n’est pas compromise.

        Cette fois ci j’en ai terminé. Bonne journée !

  5. Merci pour cet article.
    Si je comprends bien, tu passes par un Synology pour alimenter ton stockage à froid. Est-il possible de faire sans ? Pour envoyer les données directement de la machine Windows vers le stockage à froid ? Si tuvas la manip, je suis preneur.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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