Я бросил dotenv ради Varlock (и вот почему)

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00Это Valor, инструмент с открытым исходным кодом для управления переменными окружения. С ним вы
00:00:04навсегда забудете о хранении секретов в открытом виде на диске. Он работает, разрешая переменные
00:00:10локально или через менеджеры паролей, такие как 1Password, Bitwarden, AWS и многие другие,
00:00:16используя типизированную схему. Затем он внедряет ваши секреты в приложение во время выполнения, делая ваш .env
00:00:21файл безопасным для ИИ и даже для публикации в GitHub. Но как это работает на самом деле
00:00:27и что это за странный синтаксис? Подписывайтесь, и давайте разберемся.
00:00:31Сколько раз вы выходили на новую работу, получали доступ к коду, запускали его локально,
00:00:39а он не работал? Только чтобы узнать, что вам не хватает .env файла, который нужно просить у коллеги
00:00:45или искать в зашифрованном хранилище. И вам приходится проходить через это снова и снова,
00:00:50каждый раз, когда .env файл обновляется. Именно эту проблему решает Valor, а также исправляет
00:00:56проблему ИИ-агентов, которые через инъекции промптов могут получить доступ к чужим секретам. Погнали!
00:01:02Вот небольшой проект, над которым я работал: он создает статьи из видео из Twitter,
00:01:06используя Whisper от OpenAI для транскрибации и Claude для написания текста.
00:01:12Но начнем с простого: используем Valor для смены номера порта. В Valor,
00:01:17который у меня уже установлен, должен быть файл схемы .env, который сейчас пуст. Это будет
00:01:23единственный источник истины для всех наших переменных, и его можно спокойно пушить в публичный GitHub.
00:01:28Начнем с добавления простой переменной app_env и установим ей значение “testing”.
00:01:33Теперь в новой вкладке я запущу “varlock load”, чтобы проверить нашу схему. Видите,
00:01:39она прочитала нашу переменную и пометила её как “sensitive” (чувствительную). Это потому,
00:01:43что по умолчанию все переменные в Varlock считаются чувствительными, но это можно изменить.
00:01:48В этот файл я добавлю наш первый декоратор — корневой декоратор (root decorator),
00:01:52так как он затронет все переменные в файле, и установлю “default sensitive” в false.
00:01:56Заметьте, что синтаксис здесь начинается с решетки, а корневые переменные обычно отделяются разделителем.
00:02:02Весь этот файл использует предметно-ориентированный язык mspec,
00:02:08разработанный командой Varlock. Теперь, если я снова проверю схему, мы увидим
00:02:14значение переменной, так как она больше не помечена как чувствительная. Но можно делать и
00:02:19другие крутые вещи, например, указать тип переменной. Я укажу тип string (строка),
00:02:24и всё продолжит работать. Но если я изменю тип на number (число),
00:02:29то возникнет ошибка, так как ожидается строка. Также можно добавить
00:02:33декоратор “required” и удалить само значение. Тогда при проверке файла
00:02:39мы получим ошибку, так как значение обязательно. Это называются декораторы элементов,
00:02:44их полный список, как и список доступных типов, можно найти в документации Varlock. Давайте
00:02:50добавим еще одну переменную, назовем её port со значением 3002. Я укажу
00:02:55ей тип port, а выше установлю sensitive и верну тип string для первой переменной.
00:03:01Теперь система видит обе переменные и скрывает вторую, так как она чувствительная.
00:03:05Но как передать эти значения в приложение? Всё, что нужно — это запустить
00:03:10команду “varlock run”, за которой следует скрипт запуска вашего приложения. Если я открою package.json,
00:03:15система загрузит конфиг, разрешит переменные и внедрит их в окружение.
00:03:21командой vite, он должен загрузить конфиг, разрешить его и затем внедрить в наши переменные
00:03:27Это и произошло: теперь порт — 3002. В коде это работает,
00:03:33потому что приложение сначала проверяет переменную port, внедренную Varlock.
00:03:38Этот скрипт не обязательно должен быть на JavaScript — Varlock работает с любыми проектами:
00:03:43Python, Go, Rust — что угодно, всё будет работать как надо. А если вы не хотите
00:03:48устанавливать его через npm, есть Varlock CLI, который работает точно так же. Для локальных
00:03:54переменных это отлично, но давайте теперь попробуем получить их из 1Password
00:03:59вместо того, чтобы использовать локальные переменные оболочки для API-ключей OpenAI и Anthropic.
00:04:05Лично я не пользуюсь 1Password постоянно, завел триал только для этого видео. Но,
00:04:11как видите, я создал новое хранилище (vault), что очень важно (объясню почему позже). Внутри него
00:04:16есть два элемента: ключ OpenAI и ключ Anthropic. Мне не жалко
00:04:24их показывать, потому что они вымышленные. Видите? Это не настоящие ключи. Итак,
00:04:30чтобы получить эти значения в схему Varlock, сначала нужно установить плагин 1Password.
00:04:36Заметьте, что плагины в Varlock могут добавлять свои собственные декораторы, так что вы можете
00:04:42увидеть здесь новые, которых нет в основной документации, например, “init 1password”.
00:04:49После установки varlock-1password мы загружаем корневой декоратор плагина
00:04:55и запускаем декоратор инициализации. Сейчас мне нужен только токен,
00:05:01который я возьму отсюда. Для получения этого токена вам нужно подключиться именно к новому
00:05:06хранилищу, а не к личному. Это делается в разделе “developer service account” — следуйте инструкциям.
00:05:11Так как я удалю этот токен и аккаунт после видео, я не боюсь его светить.
00:05:15Я присвою ему тип “1password service token”, он помечен как sensitive и
00:05:21предоставляется этим плагином. Вы также могли заметить, что в этом файле нет
00:05:26подсветки синтаксиса. Это потому, что команда Varlock выпустила плагин для VS Code,
00:05:32который его поддерживает, но для Neovim его пока нет. Может, я сделаю его сам или попрошу Claude.
00:05:37Теперь я создам новую переменную openai_api_key, а чтобы получить её
00:05:43из 1Password, мне нужно вызвать функцию 1password с соответствующим протоколом.
00:05:49Затем я указываю имя хранилища (test), название элемента (openai)
00:05:55и имя поля, которое, как мы видим здесь, называется “credential”. Я также
00:06:02помечу её как sensitive. Теперь запускаем “varlock load”. Через пару секунд
00:06:08система получает мой ключ из 1Password. Мы можем убедиться, что всё работает,
00:06:14изменив значение здесь, например, на 1234. Запускаем varlock load снова — и вуаля,
00:06:20всё подтянулось верно. Теперь наш файл схемы .env готов к коммиту. Но я знаю, о чем вы
00:06:25думаете: а как же токен 1Password? Это безопасно? Честно говоря, если вы
00:06:31разрабатываете локально и у вас есть 1Password, скорее всего, у вас стоит десктопное приложение или CLI.
00:06:38В таком случае можно настроить разблокировку 1Password по отпечатку пальца вместо
00:06:43использования токена. Varlock также поддерживает плагины для AWS, GCP, Bitwarden
00:06:52и многие другие интеграции, включая Vite, Next.js и Cloudflare Workers. Есть еще
00:06:57масса функций, о которых я не успел рассказать: генерация типов TypeScript из схемы,
00:07:03импорт переменных из других файлов и даже скрытие чувствительных данных в логах
00:07:08и исходящих HTTP-ответах, что очень круто. Есть даже MCP-сервер, чтобы
00:07:15ваш ИИ-помощник мог автоматически настроить для вас схему .env. Имеется экшен для GitHub,
00:07:21чтобы загружать и проверять переменные в процессе CI/CD. Но при всей крутости Varlock,
00:07:27есть и нюансы. Например, его нельзя использовать офлайн. Если вы кодите в самолете,
00:07:32придется использовать захардкоженные переменные. Но, честно, кто сейчас кодит без
00:07:37интернета? Кстати, об интернете: есть небольшая задержка при получении паролей
00:07:41от внешнего провайдера, так что запуск ваших скриптов займет чуть больше времени.
00:07:46Также пока не хватает некоторых провайдеров, вроде Dashlane. И я столкнулся со странным багом:
00:07:53если имя в схеме совпадает с именем переменной в локальной оболочке, система берет
00:07:59локальную переменную вместо той, что в 1Password. Но Varlock активно развивается,
00:08:05и я уверен, что многие из этих моментов будут исправлены в будущем. Тем не менее,
00:08:10продукт уже сейчас невероятно полезен для меня. Думаю, я буду использовать его
00:08:16во всех своих пет-проектах и, возможно, даже заменю локальные файлы оболочки схемами Varlock,
00:08:21если это возможно. Надеюсь, что да, потому что я не хочу, чтобы какие-то агенты
00:08:26собирали мою информацию.

Key Takeaway

Varlock заменяет небезопасные файлы .env на типизированные схемы, которые позволяют безопасно хранить конфигурации в репозиториях и динамически загружать секреты из защищенных хранилищ.

Highlights

Varlock — это инструмент с открытым исходным кодом для безопасного управления переменными окружения с использованием типизированных схем.

Инструмент решает проблему передачи .env файлов между разработчиками и защищает секреты от кражи ИИ-агентами через промпт-инъекции.

Поддерживается интеграция с популярными менеджерами паролей, такими как 1Password, Bitwarden и облачными провайдерами (AWS, GCP).

Файлы конфигурации используют специализированный язык mspec, который позволяет описывать типы данных (string, number, port) и декораторы.

Varlock работает во время выполнения (runtime), внедряя секреты непосредственно в процесс приложения, что делает его совместимым с любым языком программирования.

Существуют расширенные функции, включая генерацию типов TypeScript, скрытие секретов в логах и использование MCP-сервера для настройки через ИИ.

Среди ограничений выделяются невозможность работы без интернета при использовании внешних провайдеров и небольшая задержка при загрузке данных.

Timeline

Введение в Varlock и проблемы .env файлов

Автор представляет Varlock как современную альтернативу традиционным .env файлам, акцентируя внимание на безопасности данных. Основная проблема классических методов заключается в хранении секретов в открытом виде на диске, что рискованно при работе с ИИ или публичными репозиториями. Varlock использует типизированные схемы для разрешения переменных локально или через менеджеры паролей вроде Bitwarden и AWS. Инструмент внедряет секреты во время выполнения, позволяя безопасно публиковать конфигурационные файлы на GitHub. Это решение также предотвращает утечки данных через вредоносные промпты, которыми могут манипулировать ИИ-агенты.

Работа со схемами и синтаксис mspec

Демонстрируется практическое применение Varlock в проекте, использующем OpenAI Whisper и Claude для обработки контента. Автор показывает создание файла схемы .env с использованием предметно-ориентированного языка mspec, разработанного командой проекта. Вводятся такие понятия, как корневые декораторы для управления чувствительностью данных и типизация переменных (например, типы string или port). Система автоматически проверяет соответствие типов и выдает ошибки, если значения не соответствуют заданной схеме. Использование команды "varlock load" позволяет мгновенно проверить валидность всей конфигурации перед запуском приложения.

Внедрение переменных и мультиплатформенность

Разбирается процесс запуска приложения с помощью команды "varlock run", которая внедряет разрешенные переменные в окружение процесса. Автор подчеркивает, что технология не ограничивается экосистемой JavaScript и отлично работает с Python, Go, Rust и другими языками. Для тех, кто предпочитает не использовать npm, предусмотрен автономный Varlock CLI с аналогичным функционалом. В примере с Vite показано, как приложение успешно считывает динамически подставленный порт 3002 вместо стандартных значений. Это делает процесс разработки более гибким и независимым от локальных настроек конкретной машины.

Интеграция с 1Password и плагины

В этой части подробно описывается настройка интеграции с 1Password для получения API-ключей OpenAI и Anthropic напрямую из облака. Для работы требуется установка плагина varlock-1password и настройка сервисного аккаунта разработчика для получения токена доступа. Автор объясняет использование специальных декораторов плагина и синтаксиса функций для обращения к конкретным хранилищам (vaults) и полям данных. Демонстрируется успешное получение ключа, что подтверждает возможность полного отказа от хранения критически важных данных в локальных файлах. Несмотря на отсутствие подсветки синтаксиса в Neovim, плагин для VS Code уже обеспечивает комфортную разработку.

Дополнительные возможности и недостатки

Обзор завершается перечислением продвинутых функций, таких как маскирование секретов в HTTP-ответах и использование GitHub Actions для CI/CD процессов. Однако автор честно упоминает и недостатки: необходимость интернет-соединения для внешних интеграций и задержки при сетевых запросах к менеджерам паролей. Упоминается также специфический баг с приоритетом локальных переменных оболочки над значениями из схемы Varlock. Тем не менее, наличие MCP-сервера для ИИ-помощников и общая продуманность продукта делают его крайне полезным для современных разработчиков. Автор выражает намерение перевести все свои пет-проекты на эту систему для защиты от сбора данных сторонними агентами.

Community Posts

View all posts