Stocker des secrets dans un dépôt Git
Éviter d’envoyer ses secrets sur Git, nous devons toujours être vigileant avant un quelconque Push. Et c’est justement le but de Sops (Secrets OPerationS) qui va nous aider à stocker nos informations sur le dépôt.. mais en les chiffrant.
Celui-ci est compatible avec de nombreux gestionnaires de secret comme :
- Hashicorp Vault
- GCP KMS
- PGP
- Age (Celui que nous allons utiliser)
Astuce
Age est un outil en Go simple et moderne. Celui-ci propose un format qui semble être validé par de nombreux experts. .
Créer notre clé Age
Information
Vous pouvez installer Age en suivant les instructions sur le dépôt officiel ici
Nous allons donc créer notre propre clé avec age.
En inspectant le contenu du fichier ~/.keys/ma-cle
, nous remarquons un schéma que l’on connait bien : une clé publique, et une clé privée.
Et pour que Sops utilise cette clé, nous allons créer la variable d’environnement SOPS_AGE_KEY_FILE
dans notre ~/.bashrc
ou ~/.zshrs
.
Maintenant, nous pouvons passer au niveau supérieur : créer notre premier fichier de secret.
Sops, en pratique
Vous pouvez installer Sops sur un système Amd64 en suivant ces instructions:
Notre système d’authentification est déjà créé : c’est notre couple de clé AGE. Ce que nous allons faire maintenant, c’est créer un secret qui sera déchiffrable uniquement par notre clé privée.
Première chose que nous allons faire, c’est créer notre fichier .sops.yaml
.
Ce fichier permet de définir quels fichiers devront être manoeuvrés par SOPS et surtout : quels clés ont accès à ces fichiers.
Créons maintenant un fichier secret.dev.yml
:
et affichons ce même fichier en le chiffrant avec sops via l’argument -e
(encrypt).
Ni l’URL, ni mon QI n’ont été chiffrés. Gardez également en tête que la commande ne fait qu’afficher un output du même fichier chiffré, le fichier n’a pas été modifié.
Si on souhaite ré-écrire le fichier, il faut rajouter l’argument -i
: sops -e -i secret.dev.yml
Pour déchiffrer le fichier, il suffit de faire la même commande en changeant -e
par -d
(decrypt).
Si jamais je chiffre mon fichier secret.dev.yml
et que je change de clé, nous serons dans l’incapacité de le chiffrer :
Pour ajouter une clé pouvant déchiffrer les fichiers, rajoutez-là dans votre .sops.yaml
.
En déchiffrant puis rechiffrant les fichiers, la nouvelle clé y aura accès.
Chiffrer avant de commiter
Mais comme Skynet (ou ChatGPT) n’a pas encore remplacé les informaticiens : nous restons humains. Il est donc obligatoire de trouver un moyen pour ne jamais oublier de chiffrer nos secrets avant de commit. Et la solution est simple : pre-commit
Remarque
Pre-Commit est un utilitaire en Python permettant d’automatiser certaines taches avant de commit votre code. Il est ainsi possible de faire votre propre CI en testant vos fichiers ou … en chiffrant vos secrets.
L’installation de pre-commit se fait avec pip
(Si vous n’êtes pas à l’aise avec Python, je vous invite à suivre cette documentation pour l’installer.).
Astuce
Si vous avez installé pip mais que vous n’arrivez pas à le lancer car commande introuvable, c’est surement car celui-ci ne s’est pas mis dans votre $PATH. Il faudra ajouter le dossier ~/.local/bin dans votre fichier .bashrc ou .zshrc.
Une fois pre-commit installé, il faudra l’activer dans un dossier gérer par Git:
Nous allons maintenant créer le fichier .pre-commit-config.yaml
. avec le contenu suivant:
Cette configuration permet à pre-commit d’exécuter le script .pre-commit-sops.sh
avant chaque commit. Et voici le contenu de ce fichier :
Donc si le fichier correspond au pattern identifiant les fichiers contenants les secrets, nous le chiffrons, et nous actualisons son contenu avant de commit.
Pensez également à rendre votre fichier exécutable.
On teste ça, le fichier secret.dev.yml
devrait être chiffré après mon commit.
Et maintenant.. aucun risque d’oublier de chiffrer !
Related Issues not found
Please contact @QJoly to initialize the comment