Необходимо реализовать систему приёма и обработки событий, поступающих от распределённых агентов.
-
Регистрация приходящих событий от агентов
- конфиденциальная часть события шифруется
- событие записывается в хранилище
-
Разбор событий
- Аналитик может просматривать события (включая секретную информацию)
- Аналитик может отмечать подозрительные события как "инцидент"
-
Администрирование системы
- Администратор может подтвердить регистрацию нового пользователя
- Администратор может контролировать состояние системы, просматривая список событий без секретной информации
- Система принимает события от агентов по протоколу TCP и сохраняет в персистентное хранилище
- События от агентов представляют собой поток line-delimited JSON структур аналогичных
type Event struct { EventID int Created time.Time SystemName string Message string }
- Поле
Message
в получаемых событиях представляет собой конфиденциальную информацию и всегда должно храниться в зашифрованном виде. Шифрование должно производиться при помощи приложенной проприетарной библиотеки CloseSSL
- События от агентов представляют собой поток line-delimited JSON структур аналогичных
- Система предоставляет API для доступа к событиям зарегистрированным пользователям:
- Роль пользователя указывается при регистрации, регистрация должна быть подтверждена
- Пользователям с ролью "Аналитик" доступен просмотр событий (включая конфиденциальные данные) и возможность пометить одно или несколько событий как "инцидент"
- Пользователям с ролью "Администратор" доступен просмотр публичных данных событий и возможность подтвердить регистрацию пользователя
В рамках тестового задания необходимо разработать Backend описанной системы: приём и сохранение событий, API (и логику) для веб-интерфейса.
Неописанные явно архитектурные требования остаются на усмотрение разработчика. В особо емких местах допускаются TODO с описанием того, как должен работать функционал
- Постраничное отображение событий, сортировка и фильтрация событий на стороне сервера
- Журналирование действий пользователей
- Тесты, документация API
closessl/closessl.h
,closessl/libclosessl.so
иclosessl/libclosessl.dylib
-- заголовочный файл и динамические библиотеки для Linux и MacOS соответственноagent.elf
иagent.macho
-- тестовые агенты для отладки системы, скомпилированные для Linux и MacOS соответственно. Могут быть использованы для генерации поступающих от агентов событий. Использование:agent.elf --help
git clone https://github.com/moguchev/combotest.git
cd combotest
docker-compose up