J'ai abandonné dotenv pour Varlock (Voici pourquoi)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00Voici Valor, un outil open source de gestion de variables d'environnement qui fait en sorte que vous
00:00:04n'ayez plus jamais à stocker de secrets en texte brut sur votre disque. Il résout les variables
00:00:10localement ou via un gestionnaire de mots de passe comme 1Password, Bitwarden, AWS et bien d'autres,
00:00:16en utilisant un schéma de type sécurisé, puis injecte vos secrets dans votre application au moment de l'exécution.
00:00:21Votre fichier .env devient ainsi sûr pour l'IA et peut même être publié sur GitHub. Mais comment ça marche
00:00:27et c'est quoi cette syntaxe bizarre ? Abonnez-vous et découvrons cela ensemble.
00:00:31Combien de fois avez-vous commencé un nouveau job de dév, accédé au code, tenté de le lancer en local
00:00:39et constaté que ça ne marche pas, pour finalement réaliser qu'il vous manque un fichier .env à récupérer
00:00:45auprès d'un collègue ou d'un stockage chiffré ? Et vous devez répéter ce processus
00:00:50à chaque mise à jour du fichier .env. C'est ce problème que Valor veut résoudre, tout en empêchant
00:00:56les agents IA victimes d'injections de prompts de voler des secrets. Voyons comment ça fonctionne.
00:01:02Voici un petit projet sur lequel je travaille : il génère des articles à partir de vidéos Twitter
00:01:06en utilisant Whisper d'OpenAI pour la transcription et Claude pour la rédaction de l'article.
00:01:12Mais commençons par quelque chose de simple : utiliser Valor pour changer le numéro de port.
00:01:17Valor étant déjà installé, nous devrions avoir un fichier .env.schema actuellement vide. Ce sera la source
00:01:23de vérité pour toutes nos variables et il pourra être commité sur un dépôt public GitHub.
00:01:28Ajoutons d'abord une variable d'environnement simple "appenv" et donnons-lui la valeur
00:01:33"testing". Maintenant, j'ouvre un onglet pour lancer "varlock load" afin de valider notre schéma.
00:01:39On voit ici qu'il a lu notre variable d'environnement et l'a marquée comme "sensitive" (sensible).
00:01:43C'est parce que par défaut, toutes les variables dans Varlock sont considérées comme sensibles.
00:01:48Dans ce fichier, je vais ajouter notre premier décorateur. Ce sera un décorateur "root"
00:01:52(racine) car il affectera toutes les variables du fichier, et nous mettrons "default sensitive" à false.
00:01:56Notez que la syntaxe utilise un hashtag devant, et les variables racines sont souvent séparées par un trait.
00:02:02Tout ce fichier utilise un langage spécifique appelé mspec, une spécification ouverte de l'équipe Varlock.
00:02:08Si je valide à nouveau mon schéma, on peut maintenant voir la valeur de la variable
00:02:14car elle n'est plus marquée comme sensible. On peut faire d'autres choses sympas dans le fichier
00:02:19comme définir le type de notre variable. Je vais lui donner le type "string" (chaîne),
00:02:24tout devrait fonctionner, mais si je le change en "number", on voit qu'une erreur apparaît
00:02:29car il attendait une chaîne. Je peux aussi ajouter le décorateur "required" (requis)
00:02:33puis supprimer la valeur. Si on vérifie le fichier, on obtient une erreur car une valeur est attendue.
00:02:39Ce sont des décorateurs d'éléments. Vous en trouverez la liste complète dans la doc de Varlock,
00:02:44ainsi que tous les types disponibles. Ajoutons maintenant une autre variable,
00:02:50nommée "port" avec la valeur 3002. Je lui donne le type "port". Je vais aussi
00:02:55remettre celle du haut en sensible et en type string. Désormais, il a détecté
00:03:01nos deux variables et a masqué celle-ci car elle est sensible. Mais comment
00:03:05injecter ces valeurs dans notre application ? Il suffit de lancer
00:03:10"varlock run" suivi de la commande pour démarrer l'appli. Si je regarde le fichier package.json,
00:03:15on voit qu'il faut lancer la commande "vite". Donc si je lance "varlock run vite",
00:03:21il devrait charger la config, la résoudre, puis l'injecter dans nos variables d'environnement.
00:03:27C'est exactement ce qu'il a fait : le port est maintenant 3002, ce qui fonctionne dans le code
00:03:33car il vérifie d'abord la variable d'environnement injectée par Varlock.
00:03:38Cela ne se limite pas au JavaScript car Varlock fonctionne pour n'importe quel projet :
00:03:43Python, Go, Rust... Tout fonctionnera comme prévu. Et si vous ne voulez pas
00:03:48l'installer via npm, il existe aussi une CLI Varlock qui marche de la même manière.
00:03:54C'est parfait pour les variables locales, mais voyons comment les récupérer depuis 1Password
00:03:59au lieu d'utiliser les variables de mon shell pour les clés API d'OpenAI et d'Anthropic.
00:04:05Je n'utilise pas 1Password personnellement, j'ai créé un compte d'essai pour cette vidéo,
00:04:11mais comme vous le voyez, j'ai créé un nouveau coffre (c'est très important, j'expliquerai pourquoi plus tard).
00:04:16Dans ce coffre, il y a deux éléments : une clé OpenAI et une clé Anthropic.
00:04:24Je peux les montrer car elles sont fictives. Si je les révèle, vous verrez que ce sont de fausses clés.
00:04:30Pour intégrer ces valeurs dans notre schéma Varlock, il faut d'abord installer le plugin 1Password.
00:04:36Notez que les plugins Varlock peuvent ajouter leurs propres décorateurs. Vous en verrez
00:04:42peut-être de nouveaux ici, comme ce décorateur "init-1password". Après
00:04:49avoir installé varlock-1password, on charge le décorateur racine du plugin
00:04:55et on lance l'initialisation. Tout ce dont j'ai besoin maintenant, c'est du jeton (token)
00:05:01que je récupère ici. Pour obtenir ce jeton, vous devez le connecter à un nouveau coffre,
00:05:06pas le vôtre, et aller dans les paramètres de compte de service pour développeur.
00:05:11Comme je vais supprimer mon jeton et mon compte 1Password après cette vidéo,
00:05:15ça ne me dérange pas de le montrer. Je lui donne le type "1password-service-token",
00:05:21qui est un type sensible provenant de ce plugin. Vous remarquerez peut-être que ce fichier
00:05:26n'a pas de coloration syntaxique. L'équipe Varlock a créé une extension VS Code
00:05:32qui le supporte, mais il n'y en a pas encore pour Neovim. J'en créerai peut-être une
00:05:37plus tard, ou je demanderai à Claude de le faire. Créons une variable "openai_api_key_id"
00:05:43et pour la récupérer de 1Password, j'utilise la fonction "1password"
00:05:49suivie du protocole, du nom de mon coffre ("test"), du nom de
00:05:55l'élément ("openai") et enfin du nom du champ qui est "credential" (identifiant).
00:06:02Je la mets aussi en sensible. Maintenant, si on lance "varlock load", cela prend quelques secondes
00:06:08pour récupérer ma clé OpenAI depuis 1Password. On peut vérifier que ça marche en changeant
00:06:14la valeur, par exemple "1234", et en relançant "varlock load" : il récupère bien les bonnes valeurs.
00:06:20Et voilà, notre fichier de schéma est prêt à être commité. Mais je vous vois venir :
00:06:25est-ce que ce jeton 1Password est sûr ? Pour être honnête, si vous développez
00:06:31localement et que vous avez 1Password, vous avez sûrement l'appli de bureau ou la CLI.
00:06:38Dans ce cas, vous pouvez configurer le déverrouillage par empreinte digitale plutôt que par jeton.
00:06:43Varlock supporte aussi d'autres plugins pour AWS, GCP et même Bitwarden,
00:06:52ainsi que de nombreuses intégrations comme Vite, Next.js ou Cloudflare Workers. Il y a
00:06:57plein d'autres fonctionnalités que je n'ai pas eu le temps d'aborder, comme la génération de types TypeScript,
00:07:03l'importation de variables depuis d'autres fichiers ou même le masquage des données sensibles
00:07:08dans les logs et les réponses HTTP, ce qui est très pratique. Il y a même un serveur MCP
00:07:15pour aider votre agent de codage à configurer automatiquement votre schéma, et une GitHub Action
00:07:21pour charger et valider vos variables dans votre processus CI/CD. Mais malgré tout,
00:07:27il y a quelques bémols. Par exemple, on ne peut pas l'utiliser hors ligne. Si vous codez à l'aéroport,
00:07:32vous devrez utiliser des variables codées en dur. Mais bon, qui code vraiment sans internet ?
00:07:37En parlant d'internet, il y a un léger délai lors de la récupération des mots de passe
00:07:41auprès d'un fournisseur tiers, donc vos scripts mettront un peu plus de temps à démarrer.
00:07:46Il manque aussi certains fournisseurs comme Dashlane. J'ai aussi rencontré un bug bizarre
00:07:53où si j'utilisais le même nom dans mon schéma que dans mon shell local, il utilisait la variable
00:07:59locale au lieu de celle de 1Password. Mais Varlock est en plein développement
00:08:05et je suis sûr que beaucoup de ces points seront corrigés. Quoi qu'il en soit,
00:08:10le produit actuel est déjà incroyablement utile pour moi et je pense que je vais l'utiliser
00:08:16pour tous mes projets personnels à l'avenir, et peut-être même remplacer mes fichiers shell locaux
00:08:21par des schémas Varlock si c'est possible. J'espère que ça l'est, car je ne veux pas que
00:08:26des agents puissent aspirer mes informations.

Key Takeaway

Varlock révolutionne la gestion des secrets en remplaçant les fichiers .env traditionnels par un schéma sécurisé et typé qui récupère les données en temps réel depuis des coffres-forts numériques.

Highlights

Varlock permet de sécuriser les variables d'environnement en évitant le stockage de secrets en texte brut sur le disque local.

L'utilisation d'un fichier .env.schema basé sur la spécification mspec rend le dépôt sûr pour le partage public et l'IA.

Le système propose un typage fort (port, string, number) et des décorateurs pour valider les données au moment de l'exécution.

Une intégration native avec des gestionnaires de mots de passe comme 1Password, Bitwarden et AWS est disponible via des plugins.

La commande 'varlock run' injecte dynamiquement les secrets dans n'importe quelle application (Node.js, Python, Go, Rust).

L'outil prévient l'extraction de secrets par des agents IA grâce au masquage automatique des données sensibles dans les logs.

Malgré ses avantages, Varlock nécessite une connexion internet pour résoudre les secrets distants, ce qui peut ralentir le démarrage.

Timeline

Introduction à Varlock et aux problèmes du .env traditionnel

L'auteur présente Varlock comme une alternative moderne à la gestion classique des variables d'environnement. Il souligne les risques de sécurité liés au stockage de secrets en texte brut sur le disque, souvent exposés par erreur. Le narrateur explique comment ce nouvel outil résout les variables localement ou via des gestionnaires tiers au moment de l'exécution. Cette approche rend les fichiers de configuration sûrs pour l'intelligence artificielle et permet de les publier sur GitHub sans crainte. Enfin, il évoque la frustration courante des développeurs devant récupérer manuellement des fichiers .env manquants lors de l'installation d'un projet.

Configuration du schéma et syntaxe mspec

Cette section détaille la mise en place technique d'un projet utilisant un fichier .env.schema vide comme source de vérité. L'utilisateur découvre la syntaxe mspec, un langage spécifique utilisé par Varlock pour définir les règles des variables. L'auteur démontre l'usage de décorateurs comme 'root' pour définir des comportements globaux, tels que la sensibilité par défaut des données. Il illustre également le système de typage strict en changeant une variable de type 'string' vers 'number', ce qui déclenche une erreur de validation immédiate. L'ajout du décorateur 'required' permet de s'assurer qu'aucune variable essentielle n'est oubliée avant le lancement.

Injection de variables et compatibilité multi-langage

L'auteur explique comment injecter concrètement les valeurs définies dans le schéma au sein d'une application active. En utilisant la commande 'varlock run', l'outil charge la configuration, résout les dépendances et transmet les variables au processus, comme ici avec Vite. Un point crucial abordé est la polyvalence de Varlock, qui ne se limite pas à l'écosystème JavaScript ou Node.js. L'outil fonctionne de manière transparente avec d'autres langages de programmation tels que Python, Go ou Rust grâce à sa CLI universelle. Cette flexibilité permet d'uniformiser la gestion des secrets à travers toute la pile technologique d'une entreprise.

Intégration avec 1Password et gestion des plugins

Le tutoriel passe à une étape supérieure en montrant comment connecter Varlock à un fournisseur externe tel que 1Password. Le processus nécessite l'installation d'un plugin spécifique qui ajoute de nouveaux décorateurs et fonctions au schéma mspec. L'auteur utilise un jeton de service pour authentifier l'accès à un coffre contenant des clés API pour OpenAI et Anthropic. Il démontre la syntaxe précise pour cibler un élément spécifique dans le coffre-fort numérique afin de le récupérer dynamiquement. Cette méthode garantit que les clés API les plus sensibles ne transitent jamais par le système de fichiers local du développeur.

Écosystème, avantages avancés et limites de l'outil

Pour conclure, l'auteur explore l'écosystème étendu de Varlock, incluant les intégrations pour Next.js, AWS, et les GitHub Actions pour le CI/CD. Il mentionne des fonctionnalités avancées comme la génération automatique de types TypeScript et le masquage des données sensibles dans les réponses HTTP. Cependant, il nuance son propos en listant certains inconvénients, notamment l'impossibilité d'utiliser l'outil sans connexion internet lors de l'usage de coffres distants. Un léger délai de démarrage est également à prévoir à cause de la latence réseau lors de la récupération des secrets. Malgré quelques bugs de jeunesse liés aux conflits de variables locales, l'auteur recommande vivement Varlock pour sécuriser ses projets personnels.

Community Posts

View all posts