Open sourceAGPL-3.0self-hostedверсия 1.0.2
Пароли, токены и настройки приложений хранятся в одной панели на вашем
сервере. Поменяли значение в браузере, и серверы сами подтянут его в свои
.env. Админку можно закрыть от всех, кроме своих адресов, а
серверы могут значения только читать.
Все, ради чего обычно ставят хранилище секретов, и ничего лишнего.
В проекте свои окружения, например dev, stage и prod, а ключи в них
можно разложить по папкам. .env загружается и выгружается
целиком, общие значения можно брать из другого окружения. Поиск по
Ctrl+K ищет по всей панели, так что и среди сотни проектов нужное
находится быстро.
Значение не перезаписывается, каждая правка сохраняется отдельной версией. Видно, что было в ключе вчера и что поменялось за неделю, любую версию можно вернуть одной кнопкой. Удаленный ключ тоже возвращается.
Доступ выдается на проект, окружение или папку. Можно разрешить видеть только список ключей: разработчик знает, какие переменные нужны приложению, но паролей от прода не видит. У права бывает срок, а для важного можно потребовать второй фактор. Права проверяет сам сервер, поэтому в обход интерфейса их тоже не обойти.
Правка от младшей роли сначала ждет подтверждения старшего и до этого не уходит на серверы. Свою правку подтвердить нельзя, а с какой роли нужно подтверждение, решает владелец.
Панель показывает команду, вы запускаете ее на сервере. Агент
получает свою учетную запись, в панели от нее остается только хеш.
Дальше он сам забирает изменения, обновляет .env и
перезапускает приложение. Обновляется агент тоже сам и ставит только
версии с правильной подписью.
Поду не нужен токен, сохраненный в кластере. Он предъявляет панели короткоживущий токен своего ServiceAccount, а панель проверяет его подпись по ключам кластера. Если у вас уже стоит External Secrets Operator, можно работать через него.
Значения переносятся из Infisical и Vault KV. Перед переносом видно, что добавится, а что уже есть, существующие значения по умолчанию не трогаются. Доступы к старому хранилищу панель не сохраняет.
К ключу можно написать, зачем он нужен, и поставить дату замены,
панель напомнит заранее. Видно, каких обязательных ключей не хватает и
какие никто не читал целый год. Окружения можно сравнить, не показывая
значений, а changeme в проде панель найдет сама.
Каждую ночь панель делает шифрованный бэкап и сообщит, если он не сделался. Восстановление одной командой, перед обновлением бэкап снимается сам. Оповещения идут в Telegram или на вебхук, значений в них нет. Раз в неделю приходит сводка изменений.
Скриншоты сделаны в настоящей панели на демо-данных: проекты, серверы и адреса на них выдуманы.
Главное правило: даже с украденной базой значения не прочитать. Все остальное построено вокруг него.
Каждое значение зашифровано AES-256-GCM ключом своего окружения, а ключи окружений зашифрованы корневым ключом. Значение привязано к своему месту в базе: его не получится перенести в другое окружение или подменить чужим.
После перезапуска панель заперта, и пока не введут корневой ключ, значения не может прочитать никто, даже владелец. Ключ можно разделить на доли между несколькими людьми (по умолчанию нужно 3 из 5), вводить целиком или хранить файлом на сервере, тогда панель отпирается сама.
Подключенный сервер не может изменить или удалить секрет: таких запросов для серверов в панели просто нет. Это проверяет тест при каждой сборке, так что случайно такой запрос не появится.
Каждая запись журнала хранит хеш предыдущей, и раз в сутки панель проверяет, что цепочка цела. Записи можно сразу отправлять на внешний вебхук, чтобы их не удалили вместе с базой. Самих значений в журнале нет.
Для особо важных проектов значения шифруются прямо в браузере ключом, которого у сервера нет совсем. Но если забыть пароль проекта, значения уже не вернуть.
Все значения можно выгрузить в один зашифрованный файл под своим паролем. Открывается он отдельной утилитой, без панели и без интернета, на случай если панели уже нет.
Подробно о том, от чего Sekvyr защищает, а от чего нет, написано в модели безопасности и модели угроз.
Sekvyr не пытается заменить Vault целиком. Он сделан для случая, который встречается чаще: десятки серверов, пара человек на инфраструктуре и желание видеть все в одном месте.
| Sekvyr | HashiCorp Vault | Infisical | |
|---|---|---|---|
| Как начать | открыть панель, все видно сразу | разобраться с политиками на HCL, движками секретов и терминологией | веб-панель, по идее ближе всего к Sekvyr |
| Что нужно для работы | только Postgres | встроенное хранилище Raft или Consul | Postgres и Redis |
| В чем силен | .env-файлы, история версий, доставка на серверы, журнал |
динамические секреты, PKI, шифрование как сервис | интеграции с CI и облаками |
| Лицензия | AGPL-3.0, все функции бесплатны | BSL 1.1 | MIT, часть функций платная |
Нужен сервер на Linux со свободными портами 80 и 443. Команда поставит Docker, если его нет, поднимет Caddy с сертификатом Let's Encrypt и запустит панель из готовых образов, сразу с ночными шифрованными бэкапами. В конце она покажет адрес панели и пароль владельца.
curl -fsSL https://raw.githubusercontent.com/mihsergeev/Sekvyr/main/ops/quickstart-ru.sh | sudo shСвой домен не обязателен: панель сразу откроется по адресу
вида <ip-сервера>.sslip.io с обычным сертификатом. Но без
списка адресов админка открыта всем, поэтому для постоянной установки
укажите домен и адреса, с которых в нее можно заходить:
curl -fsSL https://raw.githubusercontent.com/mihsergeev/Sekvyr/main/ops/quickstart-ru.sh | sudo sh -s -- --domain sekvyr.example.ru --allow-ips "203.0.113.10"Войдите и смените пароль, включите второй фактор.
Пароль от установщика лежит в .env в открытом виде.
Заведите сейф. Доли корневого ключа показываются один раз, раздайте их разным людям.
Настройте оповещения, чтобы сразу узнать, если с панелью что-то не так.
Подключите первый сервер. Панель покажет готовую команду для установки агента.
Ручная установка, свой HTTPS-прокси, Kubernetes и бэкапы описаны в документации. Готовые образы панели собраны под amd64, на других серверах установщик сам соберет панель из исходников.