Dejé de usar dotenv por Varlock (y aquí te explico por qué)

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

Transcript

00:00:00Este es Valor, una herramienta de código abierto para gestionar variables de entorno que logra que
00:00:04nunca más tengas que guardar secretos en texto plano en el disco, y funciona resolviendo variables
00:00:10localmente o mediante un gestor de contraseñas como 1Password, Bitwarden, AWS y muchos más,
00:00:16usando un esquema de tipos seguros para inyectar tus secretos en la aplicación en tiempo de ejecución,
00:00:21haciendo que tu archivo .env sea seguro para la IA e incluso para subirlo públicamente a GitHub.
00:00:27Pero, ¿cómo funciona esto realmente y a qué se debe esta sintaxis extraña? Suscríbete y veámoslo.
00:00:31¿Cuántas veces has empezado un nuevo rol de dev, accedes al código, intentas ejecutarlo localmente
00:00:39y no funciona, solo para descubrir que te falta un archivo .env que debes pedirle a otro desarrollador
00:00:45o sacar de algún almacenamiento cifrado? Y tienes que repetir este proceso una y otra vez
00:00:50cada vez que se actualiza ese archivo .env. Este es el problema que Valor viene a resolver, además
00:00:56de evitar que agentes de IA mediante inyección de prompts accedan a secretos que no deberían. Veamos
00:01:02cómo funciona. Aquí tengo un pequeño proyecto en el que he estado trabajando que genera artículos
00:01:06desde videos de Twitter usando Whisper de OpenAI para transcribir y Claude para escribir el artículo.
00:01:12Pero empezaremos con algo simple usando Valor para cambiar el número de puerto. Con Valor
00:01:17ya instalado, deberíamos tener un archivo de esquema .env que actualmente está vacío. Este será
00:01:23la fuente de verdad para todas nuestras variables de entorno y podrá subirse a un repo público de GitHub.
00:01:28Empezaremos añadiendo una variable simple "appenv" y le asignaremos el valor "testing".
00:01:33Ahora puedo crear una nueva pestaña para ejecutar "varlock load", que validará nuestro esquema.
00:01:39Como vemos aquí, ha leído nuestra variable de entorno y la ha marcado como "sensitive" (sensible).
00:01:43Esto es porque todas las variables en Valor son sensibles por defecto, pero podemos cambiarlo.
00:01:48En este archivo añadiré nuestro primer decorador, que será un decorador de raíz (root)
00:01:52porque afectará a todas las variables del archivo, y pondremos "default sensitive" en falso.
00:01:56Noten que la sintaxis lleva un hashtag delante y las variables raíz suelen separarse con un divisor.
00:02:02Todo este archivo usa un lenguaje específico de dominio llamado mspec, que es una especificación
00:02:08abierta del equipo de varlock. Si vuelvo a validar el esquema, ahora sí podemos ver el valor
00:02:14de la variable de entorno porque ya no está configurada como sensible.
00:02:19Pero podemos hacer otras cosas geniales en el esquema, como asignar un tipo a la variable.
00:02:24Le daré el tipo "string", así que todo debería seguir funcionando, pero si lo cambio a
00:02:29"number", vemos que obtenemos un error porque está esperando una cadena de texto.
00:02:33También puedo usar el decorador "required" y quitar este texto; si revisamos el archivo,
00:02:39da error porque espera un valor. Estos se llaman decoradores de elementos y hay una lista
00:02:44completa en la documentación de varlock, junto con todos los tipos disponibles.
00:02:50Añadamos otra variable, esta vez llamada "port" con el valor 3002. Le asignaré el
00:02:55tipo "port" y arriba volveré a ponerlo como sensible y cambiaré esto de nuevo a string.
00:03:01Ahora ha detectado ambas variables y ha ocultado esta por ser sensible.
00:03:05Pero, ¿cómo llevamos estos valores a la aplicación? Solo tenemos que ejecutar
00:03:10"varlock run" seguido de los comandos necesarios. Si reviso el archivo package.json,
00:03:15vemos que necesitamos ejecutar el comando "vite" para el frontend. Así que, si ejecuto
00:03:21"varlock run" seguido de "vite", debería cargar la config, resolverla e inyectarla
00:03:27en nuestras variables de entorno, y eso es justo lo que ha hecho: el puerto ahora es 3002,
00:03:33lo cual funciona porque el código primero busca la variable de puerto inyectada por varlock.
00:03:38Esto no tiene por qué ser solo un archivo de JavaScript; varlock funciona con cualquier proyecto,
00:03:43ya sea Python, Go o Rust; todo funcionará igual. Y si no quieres instalarlo
00:03:48con npm, también hay una CLI de varlock que funciona exactamente igual.
00:03:54Esto está muy bien para variables locales, pero ahora veamos cómo traerlas desde 1Password
00:03:59en lugar de usar mis variables locales de la terminal para las claves de OpenAI o Anthropic.
00:04:05Yo no uso 1Password normalmente, me he registrado para una prueba para este video, pero como
00:04:11ven, he creado una nueva bóveda (vault), lo cual es muy importante y luego explicaré por qué.
00:04:16Dentro hay dos elementos: la clave de OpenAI y la de Anthropic, que no me importa
00:04:24mostrar porque son inventadas; si revelo esta, verán que no es una clave real.
00:04:30Para meter esos valores en nuestro esquema de varlock, primero instalamos el plugin de 1Password.
00:04:36Tengan en cuenta que los plugins en varlock pueden añadir sus propios decoradores raíz y de elemento,
00:04:42así que verán algunos nuevos que no están en la documentación, como este de "init 1password".
00:04:49Tras instalar varlock-1password, cargamos el decorador raíz del plugin que acabamos de
00:04:55instalar y ejecutamos el decorador de inicialización. Solo necesito el token
00:05:01que puedo cargar desde aquí. Para obtener este token, debes conectarlo a una nueva bóveda,
00:05:06no a la personal, y lo encontrarás en la cuenta de servicio para desarrolladores.
00:05:11Como voy a borrar mi token y mi cuenta después de este video, no me importa mostrarlo.
00:05:15Le daré el tipo "onepassword service token", que es sensible y proviene del plugin.
00:05:21Quizás noten que este archivo no tiene resaltado de sintaxis, y es porque el equipo de varlock
00:05:26ha creado un plugin para VS Code que sí lo soporta, pero de momento no hay uno para Neovim,
00:05:32así que puede que cree uno en el futuro o que le pida a Claude que lo haga.
00:05:37Ahora crearé una nueva variable de entorno llamada "openai api key id" y, para traerla
00:05:43de 1Password, tengo que ejecutar la función "onepassword" seguida de este protocolo,
00:05:49luego el nombre de mi bóveda ("test"), el nombre del elemento ("openai") y, finalmente,
00:05:55el nombre del campo que, si revisamos aquí, podemos ver que es "credential".
00:06:02También la marcaré como sensible. Si ejecutamos "varlock load", tarda unos segundos
00:06:08en obtener mi clave de OpenAI de 1Password, y podemos comprobar que funciona incluso
00:06:14si cambio el valor aquí por algo como "1234". Al ejecutar de nuevo, obtiene los valores correctos.
00:06:20Ya está; nuestro esquema .env debería estar listo para subir. Pero sé lo que piensan,
00:06:25¿qué pasa con el token de 1Password? ¿Es seguro? Bueno, si estás desarrollando
00:06:31en local y tienes 1Password, puede que tengas la app de escritorio o uses la CLI.
00:06:38En ese caso, puedes usar esta configuración para desbloquear 1Password con tu huella
00:06:43en lugar de usar un token. Varock también soporta plugins para AWS, GCP e incluso Bitwarden,
00:06:52además de integraciones con Vite, Next.js y Cloudflare Workers. Hay muchas
00:06:57otras funciones que no me dio tiempo a ver, como generar tipos de TypeScript desde
00:07:03tu esquema, importar variables de otros archivos e incluso censurar datos sensibles
00:07:08en los logs y respuestas HTTP, lo cual es un gran detalle. Incluso hay un servidor MCP
00:07:15para que tu agente de programación configure el esquema .env automáticamente,
00:07:21y una GitHub Action para cargar y validar tus variables en el proceso de CI/CD.
00:07:27Pero, por muy genial que sea varlock, tiene algunos inconvenientes. Por ejemplo,
00:07:32no puedes usarlo sin conexión; si programas en un aeropuerto, tendrás que usar tus variables fijas.
00:07:37Y hablando de internet, hay un pequeño retraso cuando trae las contraseñas
00:07:41de un proveedor externo, así que tus scripts tardarán un poquito más en arrancar.
00:07:46También faltan proveedores como Dashlane y otros, y experimenté un bug extraño:
00:07:53si usaba en mi esquema el mismo nombre que una variable de mi terminal local,
00:07:59usaba la variable local en lugar de la de 1Password. Pero varlock está en desarrollo activo
00:08:05y estoy seguro de que muchas de estas cosas se solucionarán en el futuro.
00:08:10Aun así, el producto tal como está ahora me resulta increíblemente útil y creo que
00:08:16lo voy a usar para todos mis proyectos personales de ahora en adelante, y quizás
00:08:21sustituya mis archivos de la terminal por esquemas de varlock si hay forma de hacerlo.
00:08:26Espero que sí, porque no quiero que ningún agente extraiga mi información.

Key Takeaway

Varlock revoluciona la gestión de secretos al sustituir los archivos .env tradicionales por esquemas tipados y seguros que se conectan directamente con bóvedas de contraseñas externas.

Highlights

Varlock elimina la necesidad de almacenar secretos en texto plano mediante un esquema de tipos seguros.

Utiliza un lenguaje de dominio específico (DSL) llamado mspec para definir variables de entorno.

Se integra directamente con gestores de contraseñas como 1Password, Bitwarden, AWS y GCP.

Permite subir el archivo de esquema .env a repositorios públicos de GitHub sin comprometer la seguridad.

Funciona de manera agnóstica al lenguaje, soportando Node.js, Python, Go, Rust y más.

Previene ataques de inyección de prompts de IA al ocultar secretos del contexto de los agentes.

Incluye herramientas avanzadas como generación de tipos de TypeScript y validación en CI/CD.

Timeline

Introducción a Varlock y el problema de los archivos .env

El video comienza presentando a Varlock como una herramienta de código abierto diseñada para gestionar variables de entorno sin usar texto plano. El orador explica que el problema común de los desarrolladores es la dependencia de archivos .env locales que deben compartirse manualmente o extraerse de almacenamientos cifrados. Varlock resuelve esto permitiendo que el archivo de configuración sea seguro incluso para la inteligencia artificial o repositorios públicos. Se destaca que la herramienta utiliza un esquema de tipos seguros para inyectar secretos en tiempo de ejecución. Este enfoque elimina la fricción al configurar proyectos nuevos en equipos de desarrollo.

Configuración del esquema mspec y decoradores

En esta sección, se muestra un proyecto práctico que utiliza Whisper y Claude para generar artículos. El presentador introduce el archivo de esquema .env basado en la especificación mspec, que actúa como la única fuente de verdad. Se explica el uso de decoradores de raíz como "default sensitive" y decoradores de elementos como "required" para validar los datos. El sistema permite asignar tipos como "string", "number" o "port", lanzando errores si los valores no coinciden. Esta validación asegura que la aplicación siempre reciba los datos en el formato correcto antes de arrancar.

Ejecución e inyección de variables en la aplicación

El orador demuestra cómo utilizar el comando "varlock run" para inyectar las variables procesadas en un proyecto de Vite. Al ejecutar este comando, Varlock carga la configuración, resuelve las variables y las pasa al entorno de ejecución de forma transparente. Se resalta que esta funcionalidad no se limita a JavaScript, sino que es compatible con cualquier lenguaje como Python o Go. También se menciona la existencia de una interfaz de línea de comandos (CLI) independiente para quienes no deseen usar npm. El proceso garantiza que los valores sensibles se mantengan ocultos mientras la aplicación funciona con normalidad.

Integración con 1Password y proveedores externos

Esta sección profundiza en la integración con proveedores de secretos externos, utilizando 1Password como ejemplo principal. El proceso requiere instalar un plugin específico que añade nuevos decoradores al esquema para conectar con las bóvedas del gestor. Se explica detalladamente cómo configurar un token de servicio para desarrolladores y cómo referenciar campos específicos mediante protocolos como "onepassword://". El video muestra cómo Varlock tarda unos segundos en obtener las claves reales de la nube, manteniendo el archivo local libre de secretos reales. Esta arquitectura permite cambiar valores en el gestor de contraseñas y ver los cambios reflejados automáticamente en el entorno local.

Ecosistema, ventajas y limitaciones actuales

El autor repasa las capacidades extendidas de Varlock, incluyendo el soporte para AWS, Bitwarden y la generación automática de tipos para TypeScript. Menciona características útiles como la censura de datos sensibles en logs y la existencia de un servidor MCP para agentes de programación. Sin embargo, también advierte sobre desventajas actuales como la imposibilidad de trabajar sin conexión a internet y el ligero retraso al arrancar los scripts. Se reporta un error técnico relacionado con la prioridad de las variables de terminal sobre las del esquema. A pesar de estos inconvenientes, el orador concluye que la herramienta es extremadamente valiosa para evitar filtraciones de datos por parte de agentes de IA.

Community Posts

View all posts