Работает
Сервисы забирают переменные окружения сами
Вы меняете ключ в кабинете — сервисы подхватят его при следующем запуске. Значения приезжают по машинной identity при старте: секреты не едут на сервер по SSH вместе с деплоем и не лежат в настройках CI.
Как это работает
Записываете значения
Проект и окружения заводите в кабинете. У каждой пары «проект × окружение» свой ключ данных, он лежит зашифрованным под корневым; шифрование — XChaCha20-Poly1305 поверх библиотек @noble. У записи один из уровней видимости: plain видна всем с доступом к проекту, masked отдаётся по явному запросу и попадает в аудит, restricted человеку не показывается вовсе.
Выдаёте машине identity
Способов входа два. Universal: client_id и client_secret обмениваются на короткий токен. Enrollment: одноразовый токен живёт 10 минут и срабатывает ровно один раз. Доступ режется скоупом до набора ключей: сервису биллинга хватает DB_* вместо всего окружения, сверху — список разрешённых IP.
Сервис забирает значения сам
При старте сервис получает ключ данных обёрнутым x25519 и расшифровывает его на своей стороне. У значения есть история версий с метками current, previous и pending; ротация идёт фазами create → set → test → finish, и новое значение становится текущим только после успешной проверки.
Что это снимает с человека
Значения живут в кабинете, а не в копиях .env и настройках CI. Новый человек в команде клонирует репозиторий, запускает одну команду — и у него те же переменные, что у всех остальных.
Пайплайн падает до выкладки, а не в рантайме: не хватает ключа — сборка не доезжает до сервера. Значения в джобу деплоя приносит composite action aistastudio/env-action — для GitHub, Gitea и GitVerse.
Журнал аудита отвечает, кто менял значение и кто заходил за ним. Два потока — изменения и доступы — связаны хеш-цепочкой на HMAC-SHA256 под отдельным ключом; в журнал попадают имена ключей, само значение не попадает никогда.
Условия и деньги
-
Бесплатный план
Квоты: 3 проекта, 10 сервисов, 5 участников, журнал за 7 дней. По безопасности урезаний нет: шифрование, ротация и аудит доступны на этом же плане.
-
Платные планы
Цена по запросу, письмом. Онлайн-оплаты и подписок на сайте нет.
-
Бэкапы
Копию делаем каждые сутки и шифруем. Каждую разворачиваем во временную базу и проверяем, что она восстанавливается.
-
CLI и SDK
CLI и SDK опубликованы в npm:
envmasterи@env-master/sdk— версию видно в реестре. Интерфейс и документация — на русском и английском.
env-master хранит значения и пишет журнал аудита; кому какой доступ открывать — решаете вы.
Вопросы
Сервер видит мои значения?
Человеческий путь — да: при записи и просмотре сервер видит открытый текст по TLS. Машинный устроен иначе: ключ данных выдаётся машине обёрнутым x25519, расшифровка идёт на клиенте. Шифрование — XChaCha20-Poly1305, и криптография здесь только библиотечная, @noble; своей в проекте нет.
Что случится, если enrollment-токен утечёт?
Он живёт 10 минут и срабатывает один раз. Если тем же токеном попробуют войти второй раз, сервер откажет и поднимет тревогу. Дальше в дело вступает скоуп: сервису биллинга выдаются ключи DB_*, а не всё окружение целиком, плюс список разрешённых IP.
Как ротация проходит без простоя?
Четырьмя фазами: create → set → test → finish. Сервисы получают новое значение рядом со старым, вы его проверяете — и только после успешной проверки оно становится текущим. Версии помечены current, previous и pending, откат — одна операция. Готовый ротатор один — PostgreSQL.
Откройте кабинет и запишите первое значение
Открыть кабинетВопрос по сервису — почта студии: tea@aistastudio.ru
Другие продукты студии
Otapush
OTA-обновления для React Native и Expo: правка уходит пользователям при следующем запуске, минуя ревью сторов.
Работает, цены черновыеЛегалДокс
Отвечаете на вопросы про свою ситуацию — получаете договор со ссылками на действующие законы и забираете его файлом .docx.
Работает, кабинет открыт