Как добавить хеш всего содержимого события в Logstash для OpenSearch?
проблема заключается в следующем: я изучаю, как добавить некоторую защиту от несанкционированного доступа к событиям, хранящимся в OpenSearch, которые анализируются и отправляются туда с помощью Logstash. Информация состоит из журналов приложений, собранных с нескольких хостов. Идея состоит в том, чтобы добавить хешированное поле, связанное с исходным содержимым, чтобы любая модификация полей нарушала результат хеширования и могла быть обнаружена.
В настоящее время у нас есть несколько фильтров Grok, которые извлекают информацию из полученных строк журнала и сохраняют ее в разных полях, используя несколько шаблонов. Чтобы злоумышленнику, который изменяет эти журналы, чтобы замести следы, было сложнее, я подумываю добавить дополнительное поле, в котором вся строка хешируется и обрабатывается перед разделением.
Начальная часть моей конфигурации фильтра выглядит так. Он использовался в основном с ELK, но наш проект перейдет на OpenSearch:
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:mytimestamp} (\[)*%{LOGLEVEL:loglevel}(\])* %{JAVACLASS:javaclass}(.)*(\[/])* %{DATA:component} %{DATA:version} - %{GREEDYDATA:message}"}
overwrite => [ "message" ]
overwrite => [ "version" ]
break_on_match => false
keep_empty_captures => true
}
// do more stuff
}
В OpenSearch есть информация о маскировании полей , но это не совсем то, что мне нужно.
Если бы кто-нибудь из вас мог помочь мне указателем или идеей, как это сделать. Я не знаю, доступны ли хэш-поля, доступные в ELK, и в OpenSearch, и можно ли использовать плагин Logstash, который выполняет хеширование полей, без проблем с лицензированием. Но, возможно, есть другие, лучшие варианты, о которых я не знаю. Я искал информацию о том, как вызвать внешний скрипт, чтобы сделать это во время выполнения фильтра, но я даже не знаю, возможно ли это (по-видимому, нет, по крайней мере, я ничего не нашел).
Любые идеи? Спасибо!