[TUTO] Sauvegarde Jeedom dans Google Cloud Platform (GCP)

Bonjour,

aujourd’hui, je vais vous présenter comment bien utiliser GCP (Google Cloud Platform) afin de gérer l’utilisations des services de la plateforme.
J’adresse ce tuto au personne n’ayant que peut ou pas de connaissance GCP. Donc je vais employer des termes et des explications très simplifiées. Merci aux pros et experts d’être indulgent sur la simplicité.

1°) Présentation de GCP

GCP est la plateforme Cloud de google permettant aux particuliers et aux entreprises de gérer leurs services (Web, Serveurs, Réseaux etc…). C’est l’équivalent de AWS pour Amazon et Azure pour Microsoft.

Dans GCP, au niveau de Jeedom, beaucoup d’entre vous utilise déjà certainement les API Maps (Direction, Elévation, etc…).
Mais cette plateforme ce sert pas qu’a cela. Vous pouvez avoir des machines virtuelles, un réseaux totalement privé et disponible en haute disponibilité (si un serveur plante, des réplications peuvent prendre le relais), Scalable (Si pour une raison ou une autre, il vous manque des ressources, vous pouvez en créer à la volée), et Elastique (Vous pouvez ajouter des serveurs ou en enlever en fonction de la charge des serveurs automatiquement).

Cette plateforme possède également une fonctionnalité nommée cloud IOT permettant la gestion des appareils IOT avec une gestion MQTT. Cela peux être utile pour des objets distant. GCP fourni alors le serveur, et Jeedom peux ainsi utiliser GCP pour récupérer les données avec les plugins Mqtt.

Pour beaucoup de services, il existe (en gros) plusieurs possibilités de facturation, nottament le « Always Free »

Always Free, vous permet d’utiliser des resources GCP, jusqu’à un certain niveau de façon totalement gratuite.

Concernant la partie qui nous intéresse aujourd’hui nous utiliserons les services Cloud Storage et Pub/Sub.

Cloud Storage vous permet de bénéficier d’un stockage gratuit de 5Go par mois si vos données sont stockées dans une région Américaine. Cela ne signifie pas que vous devez obligatoirement être au USA pour en bénéficier. Cela ne signifie pas non plus que vous pouvez mettre 5Go + 5Go + 5Go mais que chaque mois votre stockage ne doit pas excéder les 5Go au total.

Cela suffit très largement pour y stocker de façon régulières vos sauvegardes Jeedom.

Si vous utilisez déjà des plugins dans Jeedom utilisant les API Maps, logiquement, vous avez déjà un compte GCP, et la facturation est activée. Dans le cas contraire, je vous invite à lire CE POST où je détaille la création d’un compte GCP, et la configuration de la facturation. Attention, vous ne payez rien au début. Si vous dépasser les limites de l’utilisation gratuites vous serez facturé. Lisez bien l’article afin d’éviter les mauvaises surprises.

La configuration se fait en 5 étapes :

1°) Création d’un « Bucket »
Un bucket est l’équivalent d’un espace de stockage.
Il est composé de répertoire (folder) et d’objets (les fichiers).

Dans le panneau de gauche ou avec la barre de recherche, rechezchez « Stockage »
Puis cliquer sur « Créer un Bucket »

Donner un nom à votre Bucket


Choisissez les options suivantes :
Type d’emplcement : « Region » (Un région est une zone géographique ou se trouve un ou plusieurs « emplacement ».

Emplacement : us-east-1 (C’est ici que c’est gratuit). Un emplacement comprend 1 ou plusieurs « Data center » (Les serveurs) appelé aussi Availability Zone (AZ). us-east-1 contient 3 AZ. Cela signifie que vos donnée seront automatiquement répliquer dans ces 3 datas centers. Si un des datas center brûle, vous ne perdrez donc pas vos données.

Type de stockage : Nearline
Il existe 4 type de stockages
Standard : Pour les données écrites et lues régulièrement (plus chère)
Nearline : Pour des sauvegardes régulières et qui peuvent être amenée à être utilisées 1 fois par mois. chaque fichier doivent OBLIGATOIREMENT être conservé 30 jours minimum (sinon c’est payant). Pour les sauvegardes Jeedom, il convient parfaitement. On peux conserver un historique de 30jours gratuitement. En cas de dépassement des 5Go, c’est moins chère que Standard.

Les autres ne sont pas adaptés à de la sauvegarde pouvant être utilisées régulièrement. Le dépots est moins cher mais la récupération des données peuvent faire monter la facture

Choisir un contrôle Ultraprecis. Cela permettra d’avoir un meilleur contrôle de la sécurité

Les données sur GCP sont chiffrées, on va utiliser la clé générée par Google (les clé KMS sont payantes)
On défini également une règle de conservation de 30 jours. Tous les fichier qui ont un age > à 30 jours seront supprimer afin de conserver de la place pour les sauvegarde à venir. Ne définissez pas un nombre de jours inférieur à 30 pour conserver une facture à 0.
Attribuer une ettiquette (Bonne pratique). Cela permettra également de faire un suivi de la facturation.

Votre bucket est créé.

En cliquant sur aperçu vous aurez la possibilité d’avoir un lien au format gs://XXX
Il sera nécessaire pour la configuration de Jeedom.

2°) Création d’un compte de service

Afin que Jeedom puisse écrire dans votre Bucket GCP, des critère d’authentification seront nécessaire.
Nous n’utiliserons pas le compte propriétaire par mesure de sécurité (bonne pratique).
Nous créerons plutôt un compte de service. Ce compte aura uniquement la possibilité de lire et d’écrire dans le Bucket.

Dans le panneau de Gauche chercher IAM et Admin, puis cliquer sur compte de service.

Cliquez sur créer un compte de service

Renseigner les champs
Noter qu’une adresse mail XXXX@Projet.iam.gserviceaccount.com va être créer dans votre compte. Elle sera utiliser par jeedom comme login de connexion.

Ajouter les rôles du compte de service
1°) Rôles Abonné Pub/Sub, sera utile plus tard
2°) Créateur des objets de l’espace de stockage. Permet d’écrire dans le bucket

Créer une clé d’authentification. Utilisée par Jeedom. C’est un fichier au format .json qui sera utiliser lors de la sauvegarde par Jeedom. elle est TRES importante
Conservez bien le fichier Json sur votre ordinateur

La configuration GCP est terminée.

3°) Installation et configuration Google SDK

a) Google sdk
Avant de se lancer dans la configuration de jeedom, il est nécessaire d’installer les outils GCP nécessaire. Il s’agit du google-cloud-sdk

sur armbian/raspbian :

# sudo apt update -y && apt install -y lsb_release apt-transport-https ca-certificates gnupg
# export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" 
# echo $CLOUD_SDK_REPO
cloud-sdk-VOTRE_VERSION

# echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" >> /etc/apt/sources.list.d/google-cloud-sdk.list
# curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# sudo apt update -y && sudo apt upgrade -y
# apt install -y google-cloud-sdk

Normalement, google-cloud-sdk est installé.

b) Initialisation de google-sdk

il va falloir faire cette opération avec le compte www-data de jeedom

$ sudo vi /etc/passwd (Modifier  www-data en /bin/bash au lieu de nologin)
$ su www-data (pour se connecter avec l'utilisateur www-data)

# Activer l'utilisation du compte de service 
$ gcloud auth activate-service-account jeedom-backup-svc@monproject.iam.gserviceaccount.com --key-file=jeedom-backup-svc-key.json
Activated service account credentials for: [jeedom-backup-svc@monprojet-gaston.iam.gserviceaccount.com]
$ gcloud init
Welcome! This command will take you through the configuration of gcloud.

Settings from your current configuration [default] are:
core:
  account: jeedom-backup-svc@monproject.iam.gserviceaccount.com
  disable_usage_reporting: 'True'
  project: jeedom-gaston

Pick configuration to use:
 [1] Re-initialize this configuration [default] with new settings
 [2] Create a new configuration
Please enter your numeric choice:  1

Your current configuration has been set to: [default]

You can skip diagnostics next time by using the following flag:
  gcloud init --skip-diagnostics

Network diagnostic detects and fixes local network connection issues.
Checking network connection...done.
Reachability Check passed.
Network diagnostic passed (1/1 checks passed).

Choose the account you would like to use to perform operations for
this configuration:
 [1] jeedom-backup-svc@monproject.iam.gserviceaccount.com
 [2] Log in with a new account
Please enter your numeric choice:  1

You are logged in as: [jeedom-backup-svc@monproject.iam.gserviceaccount.com].

Pick cloud project to use:
 [1] monproject
 [2] Create a new project
Please enter numeric choice or text value (must exactly match list
item):  1

Your current project has been set to: [jeedom-gaston].
...

Vous avez configurer le compte à utiliser pour Jeedom

4°) Création du script pour la sauvegarde
Dans Jeedom, nous allons nous servir de l’événement Jeedom #end_backup# pour déclencher un scenario

Dans un premier temps, nous allons uniquement effectuer la sauvegarde. Dans un prochain post, je vous expliquerai comment utiliser Pub/Sub pour avoir un retour dans Jeedom.

Le scénario utilisera une commande pour appeler un script (avec le plugin Script).

Le script lancera simplement la commande :

gsutil mv /var/www/html/backup/backup* gs://uri-du-bucket

L’uri du bucket correspond à l’uri de la première étape (création)
Pour ma part je fais un mv, mais vous pouvez utiliser cp pour une copie sans effacer le fichier source

Pour tester, vous pouvez également lancer la commande à la main.

J’espère que cela vous sera utile.

Pour toutes difficultés ou éventuelles coquilles dans le post, n’hésitez pas à me contacter.

A la prochaine

1 « J'aime »

Bonjour,
Merci pour le partage mais bon il y a quelques éléments qui sont juste des lanternes rouges qui s’allument non ?

  • Gratuit seulement aux us donc ils ne respectent pas la protection des données européenne.
  • Minimum 30 jours ? Pour qu’ils aient le temps de faire quoi ?
  • Clé généré par Google sinon c’est payant…
    -…

Alors chacun peut décider, il n’y a peut être pas grand chose à cacher dans un backup jeedom (Sur ?) mais ça m’interpelle.

Les clés de cryptage dont je parle (payante) ce sont des des KMS. Que ce soit sur AWS, Azure ou GCP ce sont des clés payantes. Il ne faut pas oublié que ce sont des plateformes pour des services pro à l’origine. Même si le public peux bénéficier de services gratuits.
Et attention, quand on parle de clés gérée par Google, on veux dire que ces clés sont des clés standards, que google va généré pour un compte ou un compte de service. Et non pas au niveau de Google lui même. La différence avec une clé KMS est que la KMS peux être Cross-account, etc… c’est pour les grosses organisations nécessitant des clés partagées etc.
Donc la clés générée est générée pour un user, un compte de service ou un rôle.

Concernant la protection des données. Perso, qu’un gouvernement sache qu’a 14H12 j’ai allumé ma prise télé, je m’en tamponne … lol
Le https ? avec du ssh ? LOL. L’ensemble des services américains savent comment décrypter un codage rsa 4096. D’ailleurs, récemment un article, confirmé par le gouvernement américain (NAS ou CIA, je ne sais plus) a été publier sur le fait que la société ayant développé ces cryptage avait un lien direct avec le gouvernement américains. Super la sécurité :slight_smile:
Mais, je comprend parfaitement ton inquiétude. Mais comme tu le dis, dans un backup Jeedom, il y a pas beaucoup de données sensibles.
Après, rien n’empêche d’utiliser, en plus, une clé gpg pour crypter la sauvegarde avant de l’envoyer sur le bucket :slight_smile:. C’est tout a fait faisable.

Quand au 30 jours. En fait, là aussi, que ce soit AWS, GCP ou Azure, ces classes de stockages existe
elles s’appelle Standard, Neaeline, Coldline etc. dans GCP
Standard, Intelligent tiering, Glacier dans AWS S3, etc.

En fait, il s’agit surtout de la façon dont sont gérées les sauvegardes, et le niveau de priorité à leur attribuer, notamment en bande passante et en délai de restauration et de haute disponibilité.
Les classes standard sont par exemple utilisées par les Instances(EC2, Cloud Compute, etc. ) pour un accès lecture ecriture « normal ». Exemple de NEtflix
L’infra de Netflix est entièrement basée sur AWS
Des instance EC2 permette à chacun d’utiliser les services (application, site web, etc.)
Des Bdd RDS pour la gestion des comptes, le catalogue etc…
Des Buckets S3 pour le stockage des films => Vu le nombre de personnes regardant des films, on peux se douter qu’il y a une bande passante énormes sur ces Buckets.

Par contre, un S3 Glacier (équivalent du Coldine GCP) est beaucoup plus lent. Par ailleurs, il faut plusieurs minutes avant de pouvoir récupérer un fichier. La récupération de ce fichier est payante. et pareil, il faut un minimum de temps avant la suppression d’un fichier. C’est les modèles éco qui sont ainsi.

J’espère avoir pu éclairer certains points :slight_smile:

Je vois que tu as le status de Développeur. As-tu déjà essayé une des plateforme Cloud ? AWS, GCP, Azure ? Si non, je t’invite à aller voir un peu, voire revenir vers moi si tu souhaite en discuter (je suis certifié aws et gcp si nécessaire). Tu pourras nottament constater que la sécurité est l’un des point fort des ces plateformes. C’est tellement un point fort que c’est l’un des sujets principal à connaitre pour la certification tellement ils prennent ces aspects aux sérieux.
Concernant les développement, il y a plein d’outils CI/CD qui sont qui peuvent aider le développement au quotidien d’ailleurs :slight_smile: