Wardhold

Секретохранилище · регистрация открыта

Секреты для машин. Пароли для людей.

Wardhold хранит то, что нельзя класть в репозиторий и в переписку: токены интеграций, пароли от баз, ключи доступа. Сервисы забирают значения по API, люди — из сейфа в браузере. Каждое чтение попадает в журнал, каждая замена значения — это новая версия, а не «перезаписали и забыли».

$ curl -s $WARDHOLD_URL/api/v1/secrets/billing/db/payload \
    -H "Authorization: Bearer $WARDHOLD_TOKEN"

{
  "POSTGRES_USER":     "billing",
  "POSTGRES_PASSWORD": "g7R…Qk",
  "POSTGRES_URL":      "postgres://billing@pg-01/billing"
}

# то же значение — в env процесса, без файла на диске
wardhold ci run billing/db -- ./migrate.sh

Плоский JSON без обёрток: тот же ответ понимают External Secrets Operator в Kubernetes, CI-раннер и агент на сервере.

Облако

Аккаунт за минуту, обновления и резервные копии — наша забота. Личный сейф бесплатен без ограничений по числу записей.

Свой сервер

Один Go-бинарь рядом с PostgreSQL: REST, MCP, веб-кабинет, планировщик и вебхуки — в одном процессе, без брокеров и Redis.

Открытое ядро

Community Edition под AGPLv3: формат хранения, API и правила доступа задокументированы, данные не заперты.

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

От записи секрета до переменной в процессе

Создайте секрет и первую версию

Секрет хранит имя, метки и настройки. Значения живут в версиях: строка, файл или набор пар ключ = значение. Изменить версию нельзя — только добавить следующую; запрет стоит триггером в базе, а не в коде приложения.

Заведите сервисный аккаунт

Отдельная сущность, не привязанная к сотруднику: увольнение человека не роняет прод. Токен wh_… со сроком и правами хранится в базе только хешем.

Выдайте роль на проект или секрет

viewer видит метаданные, payloadViewer — содержимое, editor создаёт версии. В карточке видно, у кого есть доступ и откуда он взялся.

Заберите значение там, где оно нужно

Kubernetes, GitLab CI, GitHub Actions, агент на сервере, AI-агент по MCP или обычный curl — один и тот же ответ и одна и та же строка в журнале.

Что уже сделано

Не слайды, а работающие вещи

Всё перечисленное работает в проде на app.wardhold.ru. Полная таблица готовности — на отдельной странице.

Агент для серверовработает

wardhold agent держит секреты в актуальном состоянии на обычной VM: рендерит файлы атомарно, следит за ротацией и перезапускает процесс. Ни Kubernetes, ни CI не нужны.

Вебхуки с подписьюработает

Событие о новой версии уходит подписчикам через outbox в PostgreSQL, с подписью Ed25519 и повторами. Значений в теле события нет — это сигнал «перечитай», а не канал доставки.

Отчёт раскрытия по сотрудникуработает

Что человек мог прочитать, что читал на самом деле и куда получал отказ — в разрезе проектов, с журналом и токенами. Основа офбординга.

Одноразовые ссылки на парольработает

Передать пароль подрядчику без аккаунта: запись шифруется в вашем браузере, ключ живёт во фрагменте ссылки и до сервера не доходит.

CI без переменных проектаработает

wardhold ci export и ci run в любом пайплайне, где можно скачать статический бинарь; для GitLab и GitHub — готовые шаблон и action.

MCP-сервер для AI-агентовработает

Агент видит список и описания секретов; содержимое отдаётся только под явное право токена — вытащить весь vault в контекст модели не получится.

Журнал уходит в ваш SIEMработает

Каждое обращение дублируется в файл JSON Lines и в syslog по RFC 5424 — их забирает почти любой SIEM без коннектора. Значений секретов в потоке нет. Во всех изданиях, включая Community.

Выбор

С чем нас сравнивают

Мы не единственные, и на сайте это написано прямо: в каждой батлкарте сначала идёт то, ради чего логичнее взять не нас. Все разборы — на странице сравнения.

Поставка

Продукт рассчитан на закрытый контур

Wardhold задумывался как коробка: единственный внешний компонент — PostgreSQL. Веб-кабинет и шрифты вшиты в бинарь, CDN не используется, планировщик и доставка вебхуков живут в том же процессе.

  • Один бинарь ~13,5 МБ и PostgreSQL 16 — больше ничего не нужно
  • 12–17 МБ памяти в покое и под прогревом, старт процесса — единицы миллисекунд
  • Работает без интернета: обновления, лицензия и словари не требуют доступа наружу
  • Docker Compose или systemd — на выбор; миграции применяет сам бинарь

Частые вопросы

Чем это отличается от менеджера паролей?

Менеджер паролей рассчитан на человека: открыл, скопировал, вставил. Секретохранилище рассчитано на сервис: он забирает значение по токену без участия человека, а хранилище ведёт версии и журнал. Wardhold умеет обе роли, но не смешивает их: сейф паролей зашифрован ключом владельца, машинные секреты — ключом инстанса.

Можно ли переехать из облака на свой сервер?

Да, это один и тот же код и одна и та же схема данных. wardhold export выгружает организацию в конверт под парольной фразой с подписью инстанса, wardhold import загружает его на своём сервере с проверкой подписи и предварительным отчётом, что именно будет создано.

Что происходит при увольнении сотрудника?

Wardhold показывает, к каким секретам у человека был доступ, что он реально читал и когда, — этого не знает ни одна другая система в контуре. Дальше вы отзываете доступы и ротируете то, что он действительно забирал, а не всё подряд.

Все ли сотрудники видят администрирование?

Нет. В организации три роли: сотрудник работает с секретами по выданным привязкам и своими сейфами, администратор ведёт учётные записи, проекты и доступы, владелец вдобавок распоряжается владением. Сотрудник, попавший в Wardhold синхронизацией каталога, получает роль сотрудника: перенос людей из портала не выдаёт прав.

Кто может прочитать содержимое личного сейфа?

Только владелец. Ключ выводится из мастер-пароля в браузере, сервер получает зашифрованные данные и параметры вывода ключа. Обратная сторона честная: забытый мастер-пароль восстановить нельзя.

У нас всё на 1С — это подходит?

Да, это один из основных сценариев: токены банков, маркетплейсов, ЭДО и обменов переезжают из констант информационной базы в хранилище, а конфигурация забирает значение обычным HTTP-запросом в момент выполнения. Подробности — на отдельной странице.

Чем вы отличаетесь от Пассворка?

Пассворк вырос из корпоративного менеджера паролей и сильнее там, где боль — пароли людей вне рабочего места: мобильные и десктопные клиенты, реестр российского ПО и сертификат ФСТЭК. Wardhold вырос из машинного хранилища: иммутабельные версии, роли на секрет, журнал каждого чтения и выдача значений в кластер и пайплайны без ключа расшифровки на стороне потребителя. Подробный разбор — на отдельной странице.

Сколько стоит поставить Wardhold к себе?

Community Edition под AGPLv3 бесплатна при любом размере. Коммерческое издание тоже бесплатно, пока в инстансе не больше ста сотрудников; дальше лицензия стоит 390 000 ₽ на инстанс до тысячи человек, каждая следующая тысяча — 99 000 ₽. При переезде с другого хранилища лицензия выдаётся на три года без ограничения по числу людей. Условия — на странице тарифов.

Есть ли бесплатная лицензия для школ и вузов?

Да. Государственные и муниципальные образовательные организации пользуются Wardhold бесплатно — и облаком, и коммерческим изданием в своём контуре. Достаточно письма с почты учреждения; условия — на странице тарифов.

Попадут ли события в наш SIEM?

Да, штатными средствами: Wardhold дублирует журнал обращений в файл JSON Lines и в syslog по RFC 5424, а их читает практически любой SIEM без отдельного коннектора. Формат события один на оба приёмника, значений секретов в нём нет ни при каких настройках. Поток входит во все издания, включая Community. Чего пока нет: готовых коннекторов к конкретным продуктам и гарантии доставки — очередь живёт в памяти процесса, и при недоступном приёмнике события теряются со счётчиком в проверке готовности, но чтение секретов при этом не ломается.

Есть ли открытый исходный код?

Ядро выпускается под AGPLv3; коммерческие функции лежат отдельно и в сборку Community не попадают физически. Публикация репозитория готовится — до неё сборку присылаем по запросу на hello@wardhold.ru.

Начать

Аккаунт в облаке — за минуту

Регистрация открыта: почта и пароль. Организация, проект и личный сейф создаются сразу, платить за личное использование не нужно.