Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dyakovri/keystore
Software to store sensitive information in teams
https://github.com/dyakovri/keystore
Last synced: 14 days ago
JSON representation
Software to store sensitive information in teams
- Host: GitHub
- URL: https://github.com/dyakovri/keystore
- Owner: dyakovri
- Created: 2023-03-01T02:36:58.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-09-24T17:03:46.000Z (about 1 year ago)
- Last Synced: 2024-10-05T19:22:24.429Z (about 1 month ago)
- Size: 119 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Хранилище конфиденциальной информации
Хранилище различных ключей, токенов и другой чувствительной информации
## Принцип работы
Есть база данных с зашифрованными данными. Данные шифруются одним токеном, который при (пере)запуске должен ввести администратор, что защищает от утечки данных вместе с базой.Все запросы к API происходят искобчительно с JWT токеном в поле `Authorization: Bearer ...`. Все доступы выдаются по значению поля `sub` JWT токена.
Популярные юзкейсы:
### Первоначальная настройка
- Администратор получает JWT токен. *Слелующие пункты этот токен в хэдэре*
- Производит первоначальную настройку ручкой `/POST install`
- Разблокирует базу ручкой `/POST unseal`### Разблокировка
- Администратор получает JWT токен. *Слелующие пункты этот токен в хэдэре*
- Разблокирует базу ручкой `/POST unseal`### Создание секрета
- Пользователь получает JWT токен. *Слелующие пункты этот токен в хэдэре*
- Создает секрет `POST /secret`, становится автоматически его владельцем (`GET /secret/{sec_name}/access` отдает его `sub` в поле `owner`)
- Создает новую версию секрета `POST /secret/{sec_name}/ver`
- Дает доступ к секрету `PUT /secret/{sec_name}/access`### Получение секрета
- Пользователь получает JWT токен. *Слелующие пункты этот токен в хэдэре*
- Получает список секретов `GET /secret`
- Получает значение послдней версии интересующего его секрета `GET /secret/{sec_name}/ver/{ver_num}`.
- В предыдущем пункте пользователь получил список ключей. Значение конкретного ключа через `GET /secret/{sec_name}/ver/{ver_num}/token/{t_name}`## API
### Secret
sec_name – название ключа (/\w+/)
sec_decription – описание ключа
sec_change_ts, sec_create_ts – время последнего обновления и создания ключа- `GET /secret`
- Получить список всех доступных секретов
- Возвращает: sid, sec_name, sec_decription, sec_change_ts, sec_create_ts
- `POST /secret`
- создать запись
- Поля: sec_name, sec_decription
- Возвращает: sec_name, sec_decription
- `GET /secret/{sec_name}`
- Получить описание конкретного секрета
- Возвращает: sec_name, sec_decription, sec_changed, номер последней версии, дату и время последней версии, список токенов последней версии
- `PUT /secret/{sec_name}`
- обновить sec_name, sec_decription
- изменяет sec_change_ts – время последнего обновления **секрета** sec_changed
### Secret Version
- `GET /secret/{sec_name}/ver`
- получить список версий `ver_num` ключа `sec_name`
- Поля: номер версии, дата создания версии и описание версии
- `GET /secret/{sec_name}/ver/{ver_num}`
- получить версию `ver_num` ключа `sec_name`
- Поля: номер версии, дата создания версии и описание версии и названия всех ключей
- `GET /secret/{sec_name}/ver/{ver_num}/token/{t_name}`
- получить значение токена `t_name` версии `ver_num` ключа `sec_name`.
- Формат: `{"name": "{t_name}", "value": "..."}`
- `POST /secret/{sec_name}/ver`
- Создать версию
- Поля: ver_description и список ключей с значениями
- Формат: `{"description": "{ver_description}", "tokens": [{"name": "...", "value": "..."}]}`
- изменяет sec_change_ts### Secret Access
- `GET /secret/{sec_name}/access`
- Получить список доступов к записи `sec_name`
- Формат: {"owner": sub_value, "rw": [sub_value], "r": [sub_value]}
- изменяет sec_change_ts – время последнего обновления **секрета** sec_changed
- `PUT /secret/{sec_name}/access`
- Обновить список доступов к записи `sec_name`
- Формат: {"owner": sub_value, "rw": [sub_value], "r": [sub_value]}
- изменяет sec_change_ts – время последнего обновления **секрета** sec_changed### Security
- `POST /install`
- Установка новой инсталляции. Ручка работает один раз
- `POST /seal`
- Блокировка системы, может быть совершена только тем же токеном, который установил систему
- `POST /unseal`
- Разблокировка системы, может быть совершена только тем же токеном, который установил систему. Требуется дополнительный seal-token
- Поле: токен
- `PUT /owner`
- Заменить владельцев