Журнал аудита
Журнал аудита хранит записи о важных действиях в Semaphore: кто вошёл в систему, кто изменил пользователя или роль, кто создал API-токен. Каждое событие показывает, кто это сделал, когда, с какого адреса и получилось ли. С его помощью можно выяснить, что произошло в вашей установке, или отправлять события в SIEM, чтобы они хранились рядом с остальными журналами.
Журнал аудита есть во всех редакциях. Для фильтрации, экспорта в файл и отправки событий в SIEM нужен Semaphore Pro.
Что записывается
Сейчас Semaphore записывает входы в систему, действия с учётными записями, проектами и задачами:
- входы, неудачные попытки входа, выходы и проверки второго фактора;
- отклонённые API-токены, запрещённые запросы и заблокированные межсайтовые запросы;
- изменения пользователей, паролей, двухфакторной аутентификации, внешних учётных записей и API-токенов;
- изменения участников проекта, ролей и прав на шаблоны;
- изменения проектов, инвентарей, репозиториев, шаблонов, расписаний, интеграций, конфигураций хостов, окружений, учётных данных и хранилищ секретов, а также экспорт и восстановление резервных копий проектов;
- изменения системных настроек и активацию лицензии Pro;
- запуски задач с их источником (API, расписани е, интеграция, автозапуск, workflow), подтверждения, остановки, завершения и удалённую историю задач;
- изменения раннеров, регистрации (включая отклонённые токены регистрации), отмены регистрации и отчёты раннеров с недопустимым статусом;
- экспорт журнала аудита в файл;
- каждый запуск сервера.
Полный список — на странице События аудита.
Пароли, токены, значения секретов и вывод задач никогда не попадают в события аудита. API-токены показываются отпечатком, а не значением. При неудачном входе сохраняется введённое имя для входа, поэтому там может оказаться адрес электронной почты.
В событии завершения задачи metadata.result показывает
статус, который Semaphore присвоил задаче, а metadata.end_reason говорит, почему Semaphore её завершил: timeout, если она работала
слишком долго, runner_lost, если её раннер перестал отвечать. Аргументы задачи, переменные, теги раннеров и токены
не записываются.
Во время плавающего обновления HA-кластера у задачи, запущенной на обновлённом узле и завершённой на ещё не обновлённом, нет события завершения.
URL репозиториев, URL конфигураций хостов и псевдонимы интеграций тоже не записываются.
Бывает, что Semaphore сохраняет или удаляет объект, но следующая часть того же запроса завершается ошибкой.
Интерфейс или API тогда показывает ошибку, хотя объект уже создан или удалён. Такое событие записывается как
успешное с metadata.partial=true, а reason говорит, что не было выполнено:
secret_failed: окружение сохранено или удалено, но часть его секретов не сохранена или не удалена;inventory_failed: шаблон создан, но инвентарь для его рабочей области Terraform — нет;restore_failed: проект восстановлен из резервной копии, но не все его объекты;setup_failed: проект создан, но настроен не до конца, например его создатель не добавлен как владелец.
Включение журнала аудита
По умолчанию журнал аудита выключен. Чтобы включить его, задайте audit.enabled и дайте установке имя в
audit.instance_id:
{
"audit": {
"enabled": true,
"instance_id": "prod-eu"
}
}
Или через переменные окружения:
SEMAPHORE_AUDIT_ENABLED=true
SEMAPHORE_AUDIT_INSTANCE_ID=prod-eu
ID установки — от 1 до 255 символов без пробелов. Он добавляется в каждое событие, поэтому установки можно различить, даже если они отправляют события в одно место.
Перезапустите Semaphore. Запись начинается после перезапуска, более ранние действия не добавляются. Все параметры описаны на странице Параметры конфигурации.
Запись адреса клиента за прокси-сервером
Если Semaphore работает за обратным прокси, в событиях будет адрес прокси, а не пользователя. Чтобы
записывать настоящий адрес клиента, перечислите сети ваших прокси в audit.trusted_proxy_cidrs:
{
"audit": {
"enabled": true,
"instance_id": "prod-eu",
"trusted_proxy_cidrs": ["10.0.0.0/8"]
}
}