Stronghold поддерживает включение audit-устройств с опцией filter, которая ограничивает набор записей, попадающих в конкретный аудит-лог. Фильтры задаются при включении устройства и не могут быть изменены впоследствии: для изменения фильтра устройство нужно отключить и включить заново.
Фильтрация аудит-логов является продвинутой функцией. Использование только отфильтрованных устройств без настроенного fallback может привести к пробелам в аудит-логах. Всегда тестируйте конфигурацию в непроизводственной среде.
При включении audit-устройства с фильтром каждая запись аудита сравнивается с предикатным выражением. В лог попадают только записи, соответствующие фильтру. Поведение уже существующих устройств и новых устройств без фильтра не изменяется.
Fallback-устройства
Фильтрация делает аудит гибче, но также создает риск потери записей. Например, если одно устройство настроено на operation == "read", а другое на operation == "write", записи с operation == "update" не попадут ни в одно из них.
Fallback-устройство сохраняет все записи, которые ни одно отфильтрованное устройство не приняло. Это помогает соблюдать модель безопасности, при которой все запросы и ответы должны быть залогированы до того, как клиент получит секретные данные.
Инсталляции, использующие только отфильтрованные устройства, должны всегда настраивать fallback-устройство.
Во всей инсталляции Stronghold может быть не более одного fallback-устройства.
Ограничения
- Фильтр нельзя добавить к уже включенному устройству: он задается только при включении.
- Фильтрация поддерживается для всех типов audit-устройств:
file,socket,syslog. - Нельзя одновременно указать
filterиfallback=true: эти опции взаимоисключающие. - Допускается только одно fallback-устройство.
- Fallback-устройство может быть единственным audit-backend-ом, и в этом случае оно будет получать все записи.
Фильтрация и тестовые сообщения
При включении audit-устройства Stronghold отправляет тестовое сообщение. Если фильтр не соответствует свойствам тестового сообщения, оно не будет записано в лог нового устройства. При этом само включение устройства считается успешным.
Свойства тестового сообщения по умолчанию:
| Свойство | Значение |
|---|---|
mount_point | пустая строка |
mount_type | пустая строка |
namespace | пустая строка |
operation | update |
path | sys/audit/test |
Доступные свойства для фильтрации
Фильтры могут ссылаться только на следующие свойства аудит-записи:
| Свойство | Пример | Описание |
|---|---|---|
mount_point | mount_point == "auth/oidc" | Логировать записи для точки монтирования auth/oidc |
mount_type | mount_type == "kv-v2" | Логировать записи от плагинов kv-v2 |
namespace | namespace != "admin/" | Логировать записи не из namespace admin |
operation | operation == "read" | Логировать все операции чтения |
path | path == "auth/approle/login" | Логировать активность на пути входа AppRole |
Путь не-root namespace должен заканчиваться символом / для корректного совпадения. Root namespace не имеет пути и соответствует только пустой строке. Для фильтрации root namespace используйте namespace == "".
Фильтры используют синтаксис bexpr и поддерживают:
- операторы сравнения
==,!=; - оператор
matchesдля регулярных выражений; - составные выражения
and,or,not.
Метрики fallback
Stronghold публикует telemetry-метрики, связанные с fallback-аудитом:
audit.fallback.success— увеличивается, когда fallback-устройство успешно записало аудит-событие, которое не было успешно записано ни одним не-fallback устройством;audit.fallback.miss— увеличивается, когда событие не было записано ни одним отфильтрованным устройством и при этом fallback-устройство не настроено.
Метрика audit.fallback.miss особенно полезна для обнаружения потерь аудит-событий в конфигурациях, где используются только отфильтрованные устройства.
Практический пример
Допустим, у вас есть audit-файл stronghold-audit.log, и вы хотите направлять события key/value (kv) в отдельный файл kv-audit.log.
Включите
fileaudit-устройство с фильтром поmount_type:stronghold audit enable \ -path kv-only \ file \ filter='mount_type == "kv"' \ file_path=/logs/kv-audit.logВключите fallback-устройство:
stronghold audit enable \ -path=my-fallback \ -description="fallback device" \ file \ fallback=true \ file_path=/tmp/kv-audit.fallback.logУбедитесь, что устройства включены:
stronghold audit list --detailedВключите KV secrets engine:
stronghold secrets enable -path my-kv kv-v2Запишите секрет:
stronghold kv put -mount=my-kv my_secret the_value=always_angry
После этого файл kv-audit.log будет содержать записи по операциям с my-kv, а fallback-устройство перехватит записи, не попавшие под фильтр.