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