cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu

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

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog