Abandonei o dotenv pelo Varlock (Eis o motivo)

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

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