Pour la configuration des projets informatiques il est parfois nĂ©cessaire dâutiliser des clĂ©s dâAPI (ex : ressource webâŠ) ou des informations dâidentification (ex : compte mail, base de donnĂ©eâŠ).
Mettre ces informations dans un dĂ©pĂŽt git pose problĂšme, car toute personne ayant accĂšs au dĂ©pĂŽt sera Ă mĂȘme de lire ces informations secrĂštes.
git-crypt est une solution permettant de résoudre ce problÚme à moindres frais.
Comment gérer vos codes secrets avec git ?
J'essaie toujours de configurer mes projets de maniÚre à pouvoir exécuter une seule commande pour les déployer à partir de zéro en supprimant toute étape manuelle.
Je versionne le code de mes projets dans git, incluant la configuration, et ces dépÎts ne sont pas sur github (ou sur un dépÎt gérer en dehors de ma plateforme) puisque cela impliquerait de donner mes codes secrets aux administrateurs de ces services.
Lâoutil git-crypt
git-crypt vise à résoudre ce problÚme en chiffrant vos codes secrets chaque fois que vous les transférez vers votre référentiel git et en les déchiffrant chaque fois que vous les extrayez. Cela se produit de maniÚre transparente.
Installer git-crypt.
Il y a des instructions pour Linux, Mac et Windows sur la page dâinstallation de git-crypt.
sudo apt install git-crypt
Sous Linux Mint, câest la version 0.6.0 qui est actuellement dans les dĂ©pĂŽts, alors que le code source est version 0.7.0.
Créer un nouveau référentiel git
mkdir monproject
cd monproject
git init
echo 'La documentation de monproject' > README.md
git add README.md
git commit -m 'Initial commit'
Nous avons maintenant un référentiel git contenant un seul fichier texte avec lequel on va pouvoir jouer.
Configurez le référentiel pour utiliser git-crypt
git-crypt init
Vous devriez voir le résultat :
Generating key...
Avant de faire quoi que ce soit dâautre, veuillez exĂ©cuter la commande suivante :
git-crypt export-key ../git-crypt-key
Cette commande crĂ©e une copie de la clĂ© symĂ©trique git-crypt qui a Ă©tĂ© gĂ©nĂ©rĂ©e pour ce rĂ©fĂ©rentiel. Nous la plaçons dans le rĂ©pertoire au-dessus de ce rĂ©fĂ©rentiel afin de pouvoir rĂ©utiliser la mĂȘme clĂ© dans plusieurs rĂ©fĂ©rentiels git.
Par défaut, git-crypt stocke la clé générée dans le fichier .git/git-crypt/keys/default
afin que vous puissiez obtenir le mĂȘme rĂ©sultat en exĂ©cutant :
cp .git/git-crypt/keys/default ../git-crypt-key
Ce fichier git-crypt-key est important. Câest la clĂ© qui peut dĂ©verrouiller tous les fichiers cryptĂ©s de notre rĂ©fĂ©rentiel.
Indiquez Ă git-crypt quels fichiers chiffrer.
Imaginez que notre application ait besoin dâune clĂ© API et que nous souhaitions la stocker dans un fichier appelĂ© ma-cle-d-api.key.
Avant dâajouter ce fichier Ă notre rĂ©fĂ©rentiel, nous dirons Ă git-crypt que nous souhaitons que le fichier ma-cle-d-api.key soit chiffrĂ©.
Nous faisons cela en utilisant le fichier .gitattributes
. Il sâagit dâun fichier que nous pouvons utiliser pour ajouter des mĂ©tadonnĂ©es supplĂ©mentaires Ă notre rĂ©fĂ©rentiel git. Ce nâest pas spĂ©cifique Ă git-crypt, vous avez donc peut-ĂȘtre dĂ©jĂ un fichier .gitattributes
dans votre rĂ©fĂ©rentiel. Si tel est le cas, ajoutez simplement les lignes pertinentes et ne remplacez pas lâintĂ©gralitĂ© du fichier.
Dans notre cas, nous nâavons pas de fichier .gitattributes
, nous devons donc en créer un. Le fichier .gitattributes
contient des lignes de la forme :
[file pattern] attr1=value1 attr2=value2
Pour git-crypt, le modĂšle de fichier doit correspondre Ă tous les fichiers que nous voulons que git-crypt chiffre, et les attributs sont toujours les mĂȘmes : filter
et diff
, que nous définissons tous deux sur git-crypt.
Ainsi, notre fichier .gitattributes
devrait contenir ceci :
ma-cle-d-api.key filter=git-crypt diff=git-crypt
Créez le fichier .gitattributes
, puis ajoutez-le dans votre référentiel git :
echo 'ma-cle-d-api.key filter=git-crypt diff=git-crypt' .gitattributes
git add .gitattributes
git commit -m 'Tell git-crypt to encrypt ma-cle-d-api.key'
Ici on a utilisé le nom de fichier littéral ma-cle-d-api.key dans mon fichier .gitattributes
, mais il peut sâagir de nâimporte quel modĂšle de fichier incluant le(s) fichier(s) que vous souhaitez chiffrer. On aurait Ă©galement pu utiliser, par exemple, *.key
.
Il peut ĂȘtre facile de commettre une erreur dans votre fichier .gitattributes
si vous essayez de protéger plusieurs fichiers avec une seule entrée de modÚle. Je recommande donc fortement de lire cette section du README git-crypt, qui met en évidence certains des piÚges courants.
Ajoutez un fichier contenant des informations secrĂštes.
Maintenant que nous avons dit à git-crypt que nous souhaitions chiffrer le fichier ma-cle-d-api.key, ajoutons-le à notre référentiel.
Câest toujours une bonne idĂ©e de tester votre configuration en ajoutant dâabord une valeur factice et en confirmant quâelle est correctement chiffrĂ©e, avant de transmettre des informations rĂ©ellement sensibles.
echo 'une secĂšte valeur fictive' > ma-cle-d-api.key
Nous nâavons pas encore ajoutĂ© ma-cle-d-api.key Ă git, mais nous pouvons vĂ©rifier ce que git-crypt va faire en exĂ©cutant :
git-crypt status
Vous devriez voir le résultat suivant :
encrypted: ma-cle-d-api.key
not encrypted: .gitattributes
not encrypted: file.txt
Ainsi, mĂȘme si le fichier ma-cle-d-api.key
nâa pas encore Ă©tĂ© ajoutĂ© dans notre rĂ©fĂ©rentiel git, cela vous indique que git-crypt va le chiffrer pour vous.
Ajoutons et validons le fichier :
git add ma-cle-d-api.key
git commit -m 'Added the API key file'
Vérifier que nos informations sensibles sont chiffrées
Nous avons demandĂ© Ă git-crypt de chiffrer et nous lâavons ajoutĂ© ma-cle-d-api.key Ă notre rĂ©fĂ©rentiel. Cependant, si lâon y regarde, rien ne semble diffĂ©rent :
cat ma-cle-d-api.key
une secĂšte valeur fictive
La raison en est que git-crypt chiffre et déchiffre les fichiers de maniÚre transparente lorsque vous les poussez et les extrayez vers votre référentiel. Ainsi, le fichier ma-cle-d-api.key
ressemble Ă un fichier normal en texte clair.
file ma-cle-d-api.key
ma-cle-d-api.key: ASCII text
Une façon de confirmer que vos fichiers sont rĂ©ellement chiffrĂ©s consiste Ă transfĂ©rer votre rĂ©fĂ©rentiel vers un serveur git. Lorsque vous affichez le fichier ma-cle-d-api.key Ă l'aide de lâinterface Web du serveur git, vous verrez quâil sâagit dâun fichier binaire cryptĂ© plutĂŽt que de texte.
Un moyen plus simple de voir Ă quoi ressemblerait le rĂ©fĂ©rentiel pour quelquâun sans la clĂ© de dĂ©chiffrement est dâexĂ©cuter :
git-crypt lock
Maintenant, si nous regardons notre fichier ma-cle-d-api.key
, les choses sont différentes :
file ma-cle-d-api.key && cat ma-cle-d-api.key
ma-cle-d-api.key: data
GITCRYPTïżœïżœïżœïżœ^ieïżœÒ§ïżœIïżœ]ïżœ88ïżœGïżœïżœZBïżœïżœuïżœ2yßłgïżœ
Vous verrez des rĂ©sultats indĂ©sirables diffĂ©rents de ceux que j'obtiens, mais il est clair que le fichier est cryptĂ©. Câest ce qui serait stockĂ© sur le serveur git.
Pour retrouver le fichier ma-cle-d-api.key en texte clair, exécutez :
git-crypt unlock ../git-crypt-key
Le fichier ../git-crypt-key
étant celui que nous avons enregistré précédemment en utilisant :
git-crypt export-key [FILEOUT]
RĂ©sumons
Reprenons ce que nous avons vu :
- On initialise sur un rĂ©fĂ©rentiel git pour lâutiliser avec git-crypt Ă lâaide de :
git-crypt init
-
On utilise le fichier
.gitattributes
pour indiquer Ă git-crypt quels fichiers chiffrer -
Pour chiffrer, en local, tous les fichiers spécifiés par
.gitattributes
on utilise :
git-crypt lock
- Pour déchiffrer tous les fichiers on a :
git-crypt unlock [path to keyfile]
Le fichier git-crypt-key est trÚs important. Sans cela, vous ne pourrez décrypter aucun des fichiers cryptés de votre référentiel. Toute personne possédant une copie de ce fichier a accÚs à tous les secrets cryptés de votre référentiel. Vous devez donc garder ce fichier en sécurité.
Réutiliser votre fichier de clé git-crypt
Nous avons utilisé git-crypt init
et git-crypt export-key
pour crĂ©er notre fichier git-crypt-key. Mais si nous devons avoir un fichier de clĂ©s distinct pour chacun de nos rĂ©fĂ©rentiels, alors nous nâavons pas beaucoup amĂ©liorĂ© notre gestion des donnĂ©es sensibles.
Heureusement, il est trĂšs simple dâutiliser le mĂȘme fichier de clĂ© git-crypt pour plusieurs rĂ©fĂ©rentiels git.
Pour utiliser un fichier de clé existant, utilisez-le simplement git-crypt unlock
Ă la place de git-crypt init
lorsque vous configurez votre référentiel git pour utiliser git-crypt, comme ceci :
mkdir mon-autre-project # Au mĂȘme niveau de rĂ©pertoire que `monproject`
cd mon-autre-project
git init
echo 'mon-autre-project' > README.md
git add README.md
git commit -m 'initial commit'
git-crypt unlock ../git-crypt-key
Réutiliser votre fichier de clé git-crypt est pratique, mais cela signifie que si quelqu'un d'autre obtient une copie de votre fichier de clé, toutes vos données sensibles sont exposées.
Il sâagit du mĂȘme genre de compromis en matiĂšre de sĂ©curitĂ© que lâutilisation dâun gestionnaire de mots de passe. PlutĂŽt que de gĂ©rer plusieurs mots de passe, chacun comportant son propre risque dâexposition, vous les conservez tous dans un magasin sĂ©curisĂ© et utilisez un seul mot de passe principal pour les dĂ©verrouiller.
LâidĂ©e ici est quâil est plus facile de gĂ©rer un mot de passe important que de nombreux mots de passe de moindre importance.
Quand NE PAS utiliser git-crypt
git-crypt est un excellent moyen de conserver les secrets dont vos applications ont besoin directement dans le référentiel git, aux cÎtés du code source de l'application. Cependant, comme toute autre mesure de sécurité, cela ne sera pas toujours approprié ou conseillé.
Voici quelques Ă©lĂ©ments Ă prendre en compte pour dĂ©cider si câest la bonne solution pour votre projet particulier :
git-crypt est conçu pour les situations dans lesquelles la majoritĂ© des fichiers de votre rĂ©fĂ©rentiel git peuvent rester en texte clair et il vous suffit de chiffrer quelques fichiers contenant des informations sensibles. Si vous devez chiffrer la plupart ou la totalitĂ© des fichiers de votre rĂ©fĂ©rentiel, dâautres solutions peuvent ĂȘtre mieux adaptĂ©es.
Il nâexiste pas de moyen simple de rĂ©voquer lâaccĂšs aux secrets d'un rĂ©fĂ©rentiel une fois que quelquâun possĂšde le fichier de clĂ©, ni de moyen simple de faire pivoter (câest-Ă -dire de remplacer) un fichier de clĂ©. On rappelle que le but de git est de garder toutes les versions de votre projet et changer la clĂ© aura un impact sur lâhistorique.
git-crypt chiffre uniquement le contenu des fichiers. Par conséquent, cela ne convient pas si les métadonnées de votre référentiel sont également sensibles (c'est-à -dire les noms de fichiers, les dates de modification, les messages de validation, etc.).
Certaines applications graphiques pour git ne fonctionne pas de maniĂšre fiable avec git-crypt, en particulier lorsquâelles sont anciennes.
Il y a plus d'informations dans la section Limitations du README de git-crypt.
Une meilleure façon d'utiliser git-crypt
PlutÎt que de gérer directement votre fichier de clé git-crypt, il existe une meilleure façon de gérer les référentiels chiffrés en intégrant git-crypt avec gpg, afin que vous puissiez utiliser votre clé privée gpg pour décrypter le référentiel git. Cela vous permet également d'ajouter plusieurs collaborateurs à un référentiel git sans transmettre de secrets entre les parties. Cependant, cela nécessite une configuration plus compliquée.
Je ne rentre pas dans le dĂ©tail, mais au cas oĂč je met un lien vers un post qui en parle: Using Git-crypt to Protect Sensitive Data
Liens
- page dâinstallation de git-crypt
- How to Manage Your Secrets with git-crypt
- Using Git-crypt to Protect Sensitive Data
኿