﻿﻿{"id":1467,"date":"2025-10-29T07:41:00","date_gmt":"2025-10-29T06:41:00","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/fnox-le-fort-knox-de-vos-secrets-de-dev\/"},"modified":"2025-10-29T07:41:00","modified_gmt":"2025-10-29T06:41:00","slug":"fnox-le-fort-knox-de-vos-secrets-de-dev","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/fnox-le-fort-knox-de-vos-secrets-de-dev\/","title":{"rendered":"Fnox &#8211; Le Fort Knox de vos secrets de dev"},"content":{"rendered":"<p>Vous connaissez Jeff Dickey ?<\/p>\n<p>C\u2019est le d\u00e9veloppeur derri\u00e8re<br \/>\n<a href=\"https:\/\/mise.jdx.dev\/\">mise<\/a><br \/>\n, un outil qui permet aux d\u00e9veloppeurs de g\u00e8rer leurs versions d\u2019outils de dev et leurs variables d\u2019environnement.<\/p>\n<p>Et bien cette ann\u00e9e, il a sorti<br \/>\n<a href=\"https:\/\/fnox.jdx.dev\/\">fnox<\/a><br \/>\n, un <strong>gestionnaire de secrets<\/strong>.<\/p>\n<p>Si vous \u00eates d\u00e9veloppeur, vous savez que les secrets, c\u2019est-\u00e0-dire les identifiants, les mots de passe, etc. sont soit stock\u00e9s en chiffr\u00e9 directement sur le d\u00e9p\u00f4t Git, soit \u00e0 distance via un cloud provider comme AWS Secrets Manager.<\/p>\n<p>Mais c\u2019est pas tr\u00e8s marrant \u00e0 configurer et \u00e0 utiliser et c\u2019est pour \u00e7a donc que Fnox a \u00e9t\u00e9 invent\u00e9. Fnox utilise un simple fichier de configuration TOML que vous placez dans votre d\u00e9p\u00f4t Git et \u00e0 l\u2019int\u00e9rieur duquel les secrets sont soit directement chiffr\u00e9s soit pointent vers des r\u00e9f\u00e9rences distantes sur des services comme : AWS, Azure, GCP, HashiCorp Vault et j\u2019en passe\u2026 ou encore des gestionnaires de mots de passe comme 1Password et Bitwarden.<\/p>\n<p>Il y a m\u00eame possibilit\u00e9 de mettre tout \u00e7a en ocal dans le gestionnaire de cl\u00e9s de votre OS ou dans un fichier texte.<\/p>\n<p>L\u2019avantage de cette solution, en plus de sa flexibilit\u00e9, c\u2019est qu\u2019elle peut \u00eatre utilis\u00e9e dans des environnements multiples, que ce soit pour du dev, du staging, de la prod. Et comme tout est stock\u00e9 sur le Git, les \u00e9quipes de dev peuvent r\u00e9cup\u00e9rer le fichier et le d\u00e9chiffrer de leur c\u00f4t\u00e9.<\/p>\n<p>Voici comment \u00e7a se met en place :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\"># Installer via mise (recommand\u00e9)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">mise use -g fnox\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># Initialiser dans votre projet\n<\/span><\/span><span class=\"line\"><span class=\"cl\">fnox init\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># D\u00e9finir un secret (chiffr\u00e9 par d\u00e9faut)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">fnox set DATABASE_URL \"postgresql:\/\/localhost\/mydb\"\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># R\u00e9cup\u00e9rer un secret\n<\/span><\/span><span class=\"line\"><span class=\"cl\">fnox get DATABASE_URL\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># Ex\u00e9cuter des commandes avec les secrets charg\u00e9s\n<\/span><\/span><span class=\"line\"><span class=\"cl\">fnox exec -- npm start\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"># Activer l'int\u00e9gration shell (chargement automatique lors du cd)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">eval \"$(fnox activate bash)\" # ou zsh, fish\n<\/span><\/span><\/code><\/pre>\n<p>Comme vous pouvez le voir dans l\u2019exemple ci-dessous, il y a une int\u00e9gration Shell qui permet de charger automatiquement les secrets d\u00e8s qu\u2019on change de r\u00e9pertoire.<\/p>\n<p>Le projet est open source, licence MIT, et vous trouverez le code sur GitHub. Si vous utilisez d\u00e9j\u00e0 mise, l\u2019int\u00e9gration est transparente et si vous ne l\u2019utilisez pas, fnox fonctionne tr\u00e8s bien tout seul (\u00e7a s\u2019installe aussi avec Cargo : <code>cargo install fnox<\/code> ).<\/p>\n<p>Avant la mise en place, je vous recommande quand m\u00eame d\u2019aller lire<br \/>\n<a href=\"https:\/\/fnox.jdx.dev\/guide\/quick-start.html\">le guide de d\u00e9marrage rapide<\/a><br \/>\nsur leur site, puisque \u00e7a explique aussi comment mettre en place un chiffrement un peu plus costaud avec<br \/>\n<a href=\"https:\/\/korben.info\/age-chiffrement-ligne-de-commande.html\">Age<\/a><br \/>\n, ce qui est indispensable dans un environnement de prod ! Et y\u2019a<br \/>\n<a href=\"https:\/\/fnox.jdx.dev\/guide\/real-world-example\">un super exemple de mise en place IRL<\/a><br \/>\nsi vous voulez voir quelque chose de plus concret.<\/p>\n<p>Amusez-vous bien !<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Vous connaissez Jeff Dickey ? C\u2019est le d\u00e9veloppeur derri\u00e8re mise , un outil qui permet aux d\u00e9veloppeurs de g\u00e8rer leurs versions d\u2019outils de dev et leurs variables d\u2019environnement. Et bien cette ann\u00e9e, il a sorti fnox , un gestionnaire de secrets. Si vous \u00eates d\u00e9veloppeur, vous savez que les secrets, c\u2019est-\u00e0-dire les identifiants, les mots de passe, etc. sont soit stock\u00e9s en chiffr\u00e9 directement sur le d\u00e9p\u00f4t Git, soit \u00e0 distance via un cloud provider comme AWS Secrets Manager. Mais c\u2019est pas tr\u00e8s marrant \u00e0 configurer et \u00e0 utiliser et c\u2019est pour \u00e7a donc que Fnox a \u00e9t\u00e9 invent\u00e9. Fnox utilise un simple fichier de configuration TOML que vous placez dans votre d\u00e9p\u00f4t Git et \u00e0 l\u2019int\u00e9rieur duquel les secrets sont soit directement chiffr\u00e9s soit pointent vers des r\u00e9f\u00e9rences distantes sur des services comme : AWS, Azure, GCP, HashiCorp Vault et j\u2019en passe\u2026 ou encore des gestionnaires de mots de passe comme 1Password et Bitwarden. Il y a m\u00eame possibilit\u00e9 de mettre tout \u00e7a en ocal dans le gestionnaire de cl\u00e9s de votre OS ou dans un fichier texte. L\u2019avantage de cette solution, en plus de sa flexibilit\u00e9, c\u2019est qu\u2019elle peut \u00eatre utilis\u00e9e dans des environnements multiples, que ce soit pour du dev, du staging, de la prod. Et comme tout est stock\u00e9 sur le Git, les \u00e9quipes de dev peuvent r\u00e9cup\u00e9rer le fichier et le d\u00e9chiffrer de leur c\u00f4t\u00e9. Voici comment \u00e7a se met en place : # Installer via mise (recommand\u00e9) mise use -g fnox # Initialiser dans votre projet fnox init # D\u00e9finir un secret (chiffr\u00e9 par d\u00e9faut) fnox set DATABASE_URL &#8220;postgresql:\/\/localhost\/mydb&#8221; # R\u00e9cup\u00e9rer un secret fnox get DATABASE_URL # Ex\u00e9cuter des commandes avec les secrets charg\u00e9s fnox exec &#8212; npm start # Activer l&#8217;int\u00e9gration shell (chargement automatique lors du cd) eval &#8220;$(fnox activate bash)&#8221; # ou zsh, fish Comme vous pouvez le voir dans l\u2019exemple ci-dessous, il y a une int\u00e9gration Shell qui permet de charger automatiquement les secrets d\u00e8s qu\u2019on change de r\u00e9pertoire. Le projet est open source, licence MIT, et vous trouverez le code sur GitHub. Si vous utilisez d\u00e9j\u00e0 mise, l\u2019int\u00e9gration est transparente et si vous ne l\u2019utilisez pas, fnox fonctionne tr\u00e8s bien tout seul (\u00e7a s\u2019installe aussi avec Cargo : cargo install fnox ). Avant la mise en place, je vous recommande quand m\u00eame d\u2019aller lire le guide de d\u00e9marrage rapide sur leur site, puisque \u00e7a explique aussi comment mettre en place un chiffrement un peu plus costaud avec Age , ce qui est indispensable dans un environnement de prod ! Et y\u2019a un super exemple de mise en place IRL si vous voulez voir quelque chose de plus concret. Amusez-vous bien !<\/p>\n","protected":false},"author":1,"featured_media":1468,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-1467","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/1467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=1467"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/1467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/1468"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=1467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}