Stronghold поддерживает включение аудит-устройств с опцией filter, которая ограничивает набор записей, попадающих в конкретный журнал аудита. Фильтры задаются при включении устройства и не могут быть изменены впоследствии: для изменения фильтра устройство нужно отключить и включить заново.

Использование отфильтрованных устройств без настроенного резервного устройства может привести к пробелам в журналах аудита. Всегда проверяйте конфигурацию в тестовой среде перед применением в production-среде.

При включении аудит-устройства с фильтром каждая запись аудита сравнивается с предикатным выражением. В журнал попадают только соответствующие фильтру записи. Поведение уже существующих устройств и новых устройств без фильтра не изменяется.

Резервные устройства

Фильтрация делает аудит гибче, но также создает риск потери записей. Например, если одно устройство настроено на operation == "read", а другое на operation == "write", записи с operation == "update" не попадут ни в одно из них.

Резервное устройство (fallback) сохраняет все записи, которые ни одно отфильтрованное устройство не приняло. Это помогает соблюдать модель безопасности, при которой все запросы и ответы должны быть залогированы до того, как клиент получит секретные данные.

В инсталляциях, использующих только отфильтрованные устройства, всегда должно быть настроено резервное устройство.

Во всей инсталляции Stronghold может быть не более одного резервного устройства.

Ограничения

  • Фильтр нельзя добавить к уже включённому устройству: он задается только при включении.
  • Фильтрация поддерживается для всех типов аудит-устройств: file, socket, syslog.
  • Нельзя одновременно указать filter и fallback=true: эти опции взаимоисключающие.
  • Допускается только одно резервное устройство.
  • Резервное устройство может быть единственным бэкендом аудита. В этом случае оно будет получать все записи.

Фильтрация и тестовые сообщения

При включении аудит-устройства Stronghold отправляет тестовое сообщение. Если фильтр не соответствует свойствам тестового сообщения, оно не будет записано в журнал нового устройства. При этом само включение устройства считается успешным.

Свойства тестового сообщения по умолчанию:

СвойствоЗначение
mount_pointПустая строка
mount_typeПустая строка
namespaceПустая строка
operationupdate
pathsys/audit/test

Доступные свойства для фильтрации

Фильтры могут ссылаться только на следующие свойства аудит-записи:

СвойствоПримерОписание
mount_pointmount_point == "auth/oidc"Логировать записи для точки монтирования auth/oidc
mount_typemount_type == "kv-v2"Логировать записи от плагинов kv-v2
namespacenamespace != "admin/"Логировать записи не из неймспейса admin
operationoperation == "read"Логировать все операции чтения
pathpath == "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. Для этого:

  1. Включите аудит-устройство file с фильтром по mount_type:

    • Stronghold в DP
    • Stronghold в Linux
    d8 stronghold audit enable             \
      -path kv-only                        \
      file                                 \
      filter='mount_type == "kv"'          \
      file_path=/logs/kv-audit.log
    stronghold audit enable             \
      -path kv-only                        \
      file                                 \
      filter='mount_type == "kv"'          \
      file_path=/logs/kv-audit.log
  2. Включите резервное устройство:

    • Stronghold в DP
    • Stronghold в Linux
    d8 stronghold audit enable             \
      -path=my-fallback                    \
      -description="fallback device"       \
      file                                 \
      fallback=true                        \
      file_path=/tmp/kv-audit.fallback.log
    stronghold audit enable             \
      -path=my-fallback                    \
      -description="fallback device"       \
      file                                 \
      fallback=true                        \
      file_path=/tmp/kv-audit.fallback.log
  3. Убедитесь, что устройства включены:

    • Stronghold в DP
    • Stronghold в Linux
    d8 stronghold audit list --detailed
    stronghold audit list --detailed
  4. Включите KV secrets engine:

    • Stronghold в DP
    • Stronghold в Linux
    d8 stronghold secrets enable -path my-kv kv-v2
    stronghold secrets enable -path my-kv kv-v2
  5. Запишите секрет:

    • Stronghold в DP
    • Stronghold в Linux
    d8 stronghold kv put -mount=my-kv my_secret the_value=always_angry
    stronghold kv put -mount=my-kv my_secret the_value=always_angry

После этого файл kv-audit.log будет содержать записи по операциям с my-kv, а резервное устройство перехватит записи, не попавшие под фильтр.