Работает

Сервисы забирают переменные окружения сами

Вы меняете ключ в кабинете — сервисы подхватят его при следующем запуске. Значения приезжают по машинной identity при старте: секреты не едут на сервер по SSH вместе с деплоем и не лежат в настройках CI.

envmaster validate сверяет схему env.schema.yml с реальным окружением: расхождение останавливает пайплайн до деплоя. Ниже — подключение composite action aistastudio/env-action в workflow.

Как это работает

Шаг 1

Записываете значения

Проект и окружения заводите в кабинете. У каждой пары «проект × окружение» свой ключ данных, он лежит зашифрованным под корневым; шифрование — XChaCha20-Poly1305 поверх библиотек @noble. У записи один из уровней видимости: plain видна всем с доступом к проекту, masked отдаётся по явному запросу и попадает в аудит, restricted человеку не показывается вовсе.

Шаг 2

Выдаёте машине identity

Способов входа два. Universal: client_id и client_secret обмениваются на короткий токен. Enrollment: одноразовый токен живёт 10 минут и срабатывает ровно один раз. Доступ режется скоупом до набора ключей: сервису биллинга хватает DB_* вместо всего окружения, сверху — список разрешённых IP.

Шаг 3

Сервис забирает значения сам

При старте сервис получает ключ данных обёрнутым 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