Abandonei o dotenv pelo Varlock (Eis o motivo)

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00Este é o Valor, uma ferramenta de código aberto para gerenciar variáveis de ambiente que permite
00:00:04que você nunca mais armazene segredos em texto simples no disco, resolvendo essas variáveis
00:00:10localmente ou via gerenciadores de senhas como 1Password, Bitwarden, AWS e outros, usando
00:00:16um esquema de tipos seguros. Ele injeta seus segredos na aplicação em tempo de execução, tornando
00:00:21seu arquivo .env seguro para IAs e até para subir no GitHub. Mas como isso funciona na prática
00:00:27e o que significa essa sintaxe estranha? Se inscreva no canal e vamos conferir.
00:00:31Quantas vezes você começou num novo emprego de dev, acessou o código, tentou rodar localmente
00:00:39e não funcionou, só para descobrir que faltava um arquivo .env que outro desenvolvedor tinha
00:00:45ou que estava em algum armazenamento criptografado? Você tem que repetir esse processo
00:00:50toda vez que o .env é atualizado. É este problema que o Valor resolve, além de evitar
00:00:56que agentes de IA com injeção de prompt acessem segredos indevidos. Vamos ver como funciona.
00:01:02Aqui tenho um pequeno projeto que gera artigos a partir de vídeos do Twitter, usando
00:01:06o Whisper da OpenAI para transcrever e o Claude para escrever o texto.
00:01:12Mas começaremos pelo simples: usar o Valor para mudar o número da porta. Com o Valor
00:01:17instalado, devemos ter um arquivo de esquema .env, que está vazio. Ele será a fonte
00:01:23de verdade das nossas variáveis e pode ser enviado publicamente ao GitHub.
00:01:28Vou começar adicionando uma variável simples “appenv” e definirei seu valor como
00:01:33“testing”. Agora, em outra aba, rodo “varlock load” para validar o esquema. Veja que
00:01:39ele leu nossa variável de ambiente e a marcou como sensível. Isso acontece
00:01:43porque no Varlock todas as variáveis são sensíveis por padrão, mas podemos mudar isso.
00:01:48Neste arquivo, vou adicionar nosso primeiro decorador, que será um decorador de raiz (root),
00:01:52pois afetará todas as variáveis do arquivo. Definirei “default sensitive” como false.
00:01:56Note que a sintaxe usa uma hashtag na frente, e variáveis de raiz costumam ser separadas
00:02:02por uma linha. Este arquivo usa uma linguagem específica (DSL) chamada mspec,
00:02:08que é uma especificação aberta do time Varlock. Se eu validar o esquema de novo,
00:02:14poderemos ver o valor da variável, pois ela não é mais considerada sensível.
00:02:19Mas podemos fazer coisas mais legais, como dar um tipo à nossa variável. Vou
00:02:24definir o tipo como string; tudo continua funcionando, mas se eu mudar para
00:02:29number, recebemos um erro porque o sistema esperava uma string. Também posso
00:02:33usar o decorador “required” e remover este texto. Ao verificar o arquivo, temos um erro
00:02:39porque falta um valor. Esses são decoradores de item. A lista completa deles
00:02:44e de tipos disponíveis está na documentação do Varlock. Vamos adicionar outra
00:02:50variável chamada “port” com o valor 3002. Vou definir seu tipo como “port”
00:02:55e, aqui em cima, voltarei para sensível e mudarei a primeira de volta para string.
00:03:01Agora ele detectou ambas as variáveis e ocultou os valores por serem sensíveis.
00:03:05Mas como levamos esses valores para a aplicação? Basta rodar
00:03:10“varlock run” seguido do script que inicia o projeto. Se olharmos o package.json,
00:03:15ele carrega a configuração, a resolve e a injeta nas nossas variáveis de ambiente.
00:03:21pelo comando vite, ele deve carregar a configuração, resolvê-la e então injetá-la em nossas variáveis
00:03:27Foi o que aconteceu: a porta agora é 3002, o que funciona no nosso código
00:03:33porque ele verifica primeiro a variável de porta injetada pelo Varlock.
00:03:38Isso não serve só para JavaScript; o Varlock funciona em qualquer projeto, como
00:03:43Python, Go ou Rust. Tudo deve funcionar como esperado. E se não quiser
00:03:48instalar via npm, existe o Varlock CLI que funciona igual. Tudo certo para variáveis
00:03:54locais, mas vamos ver como buscá-las no 1Password em vez de usar
00:03:59variáveis locais do shell para as chaves de API da OpenAI e da Anthropic.
00:04:05Eu não uso o 1Password pessoalmente; criei uma conta de teste para o vídeo, mas
00:04:11como podem ver, criei um novo cofre (vault). Isso é importante e explicarei depois.
00:04:16Neste cofre temos dois itens: a chave da OpenAI e a da Anthropic. Não me importo
00:04:24em mostrar pois são fictícias; se eu revelar, verão que não são chaves reais.
00:04:30Para levar esses valores ao esquema Varlock, primeiro instalamos o plugin do 1Password.
00:04:36Plugins no Varlock podem adicionar seus próprios decoradores de raiz e de item,
00:04:42então você verá alguns novos aqui, como este decorador “init one password”.
00:04:49Após instalar o varlock-onepassword, carregamos o plugin no decorador de raiz
00:04:55e rodamos o “init one password”. Tudo que preciso agora é do token,
00:05:01que posso carregar daqui. Para obter esse token, você deve conectá-lo a um novo cofre,
00:05:06não ao seu pessoal; procure em “developer service account” e siga os passos.
00:05:11Como vou deletar o token e a conta após o vídeo, não me importo em exibi-lo.
00:05:15Vou defini-lo como tipo “one password service token”, que é sensível e
00:05:21vem do próprio plugin. Você deve ter notado que este arquivo não tem
00:05:26realce de sintaxe; o time do Varlock criou uma extensão para o VS Code
00:05:32que suporta isso, mas ainda não há para Neovim. Talvez eu crie uma ou peça ao Claude.
00:05:37Agora criarei uma variável chamada “openai api key id” e, para buscá-la
00:05:43no 1Password, uso a função “op” seguida deste protocolo. Preciso do nome
00:05:49do meu cofre, que é “test”, o nome do item, “openai”, e o nome do campo,
00:05:55que conferindo aqui, vemos que é “credential”. Vou definir como sensível.
00:06:02Ao rodar “varlock load”, leva alguns segundos para buscar a chave no 1Password.
00:06:08e ao rodar “varlock load” novamente, ele traz os valores corretos.
00:06:14o valor aqui, algo como um dois três quatro, e se rodarmos varlock load novamente, ele obtém os valores corretos
00:06:20Aí está: nosso arquivo de esquema .env pronto para o commit. Mas eu sei o que
00:06:25está pensando: e esse token do 1Password? É seguro? Bom, sinceramente,
00:06:31se você desenvolve localmente e tem o 1Password, talvez já tenha o app Desktop
00:06:38ou a CLI. Nesses casos, pode usar a biometria para desbloquear em vez do token.
00:06:43O Varlock também suporta plugins para AWS, GCP e Bitwarden, além de muitas
00:06:52outras integrações como Vite, Next.js e Cloudflare Workers. Há diversos
00:06:57outros recursos que não cobri, como gerar tipos TypeScript do seu esquema,
00:07:03importar variáveis de outros arquivos e até ocultar dados sensíveis de logs
00:07:08e respostas HTTP, o que é um toque excelente. Há até um servidor MCP
00:07:15para ajudar seu agente de código a configurar o esquema .env automaticamente,
00:07:21além de uma GitHub Action para carregar e validar variáveis no seu CI/CD.
00:07:27Mas, por mais legal que o Varlock seja, há alguns problemas. Por exemplo, não
00:07:32funciona offline; se estiver codando num avião, terá que usar variáveis locais.
00:07:37E por falar em internet, há um pequeno atraso ao buscar senhas de provedores
00:07:41externos, então o script demora um pouco mais para iniciar. Também faltam
00:07:46alguns provedores como Dashlane, e eu notei um bug estranho: se eu usasse
00:07:53no esquema o mesmo nome de uma variável de ambiente do meu shell local,
00:07:59ele usava a local em vez da do 1Password. Mas o Varlock está em desenvolvimento
00:08:05ativo e tenho certeza que muitos desses pontos serão resolvidos. De qualquer
00:08:10forma, o produto hoje já é incrivelmente útil para mim e pretendo usá-lo em
00:08:16todos os meus projetos paralelos. Talvez até substitua meus arquivos de shell
00:08:21pelos esquemas do Varlock se houver um jeito; espero que sim, pois não quero
00:08:26agentes raspando minhas informações.

Key Takeaway

O Varlock revoluciona o gerenciamento de configurações ao substituir arquivos .env vulneráveis por um sistema de tipos seguros que busca segredos diretamente de cofres criptografados em tempo de execução.

Highlights

  • Varlock como alternativa segura ao uso de arquivos .env com segredos em texto simples.

  • Utilização da linguagem mspec (DSL) para definir esquemas de variáveis com tipos seguros.

  • Integração nativa com gerenciadores de senhas como 1Password, Bitwarden e provedores de nuvem.

  • Injeção de segredos em tempo de execução, permitindo o commit de arquivos de configuração no GitHub.

  • Proteção contra agentes de IA que tentam acessar variáveis de ambiente via injeção de prompt.

  • Suporte multi-linguagem (JavaScript, Python, Go, Rust) e ferramentas de CLI.

  • Funcionalidades avançadas como geração de tipos TypeScript e ocultação de dados em logs.

Timeline

Introdução ao Varlock e Problemas do .env Tradicional

O vídeo começa apresentando o Varlock como uma ferramenta de código aberto que resolve o problema crítico de armazenar segredos em texto simples no disco rígido. O narrador explica que arquivos .env tradicionais causam atritos em equipes de desenvolvimento, pois frequentemente estão desatualizados ou ausentes. Além disso, o uso de ferramentas de IA aumenta o risco de vazamento de segredos caso os arquivos locais sejam expostos. O Varlock propõe injetar esses dados apenas em tempo de execução, garantindo maior segurança. Esta seção estabelece a base para entender por que a gestão de segredos precisa evoluir além do modelo atual.

Prática com mspec e Decoradores de Esquema

Nesta parte prática, o autor demonstra como configurar um arquivo de esquema usando a linguagem mspec, uma especificação aberta do time Varlock. Ele mostra a criação de variáveis simples, como o ambiente da aplicação e a porta do servidor, utilizando decoradores como #default sensitive e #required. A ferramenta permite definir tipos específicos, como strings ou números de porta, e valida esses dados através do comando "varlock load". Se um valor não corresponder ao tipo definido, o sistema gera um erro imediatamente. Isso garante que a configuração da aplicação seja robusta e menos propensa a erros humanos antes mesmo do código rodar.

Execução e Injeção de Variáveis na Aplicação

Após definir o esquema, o vídeo mostra como integrar o Varlock ao fluxo de trabalho de desenvolvimento usando o comando "varlock run". Este comando intercepta o processo de inicialização, resolve as variáveis definidas no esquema e as injeta no ambiente da aplicação de forma transparente. O exemplo prático utiliza um projeto em Vite, mas o narrador enfatiza que a solução é agnóstica a linguagem, funcionando perfeitamente com Python, Go ou Rust. O Varlock CLI é apresentado como uma alternativa para quem não deseja utilizar o gerenciador de pacotes npm. Esta flexibilidade torna o Varlock uma ferramenta versátil para diversos ecossistemas de desenvolvimento.

Integração com 1Password e Plugins

O narrador demonstra um dos recursos mais poderosos do Varlock: a busca de segredos em gerenciadores de senhas externos como o 1Password. É explicado o processo de instalação do plugin específico e a configuração de um token de serviço para acessar cofres (vaults) criptografados. Através de uma sintaxe especial, as chaves de API da OpenAI e Anthropic são recuperadas diretamente da nuvem sem nunca tocarem o disco local em texto simples. O vídeo destaca que, embora não haja realce de sintaxe nativo no Neovim, já existe uma extensão oficial para o VS Code. Esta integração elimina a necessidade de compartilhar arquivos .env sensíveis entre membros da equipe por canais inseguros.

Recursos Avançados e Limitações Atuais

Na conclusão, o vídeo aborda funcionalidades extras como a geração automática de tipos TypeScript e o uso de servidores MCP para agentes de código. No entanto, o autor é honesto sobre as limitações, mencionando que o Varlock exige conexão com a internet para buscar segredos remotos e pode causar um pequeno atraso na inicialização. Ele também relata um bug pontual relacionado à precedência de variáveis de ambiente locais do shell sobre as do gerenciador. Apesar desses pontos, o saldo é extremamente positivo, e o narrador recomenda o uso em projetos pessoais para evitar a raspagem de dados por IAs. O vídeo encerra com a perspectiva de que o desenvolvimento ativo da ferramenta resolverá as arestas encontradas.

Community Posts

View all posts