Splunk-запрос на основе результатов другого запроса - PullRequest
0 голосов
/ 16 мая 2019

Вопрос Splunk ...

Я нашел несколько обращений Google, которые, как я думал, помогут с этим.Я пытаюсь выполнить поиск по всем «строкам», которые возвращаются внешним поиском / запросом.

Я ни в коем случае не эксперт по Splunk, даже не опытный пользователь!

Внешний запрос выполняет поиск в LDAP по Active Directory и возвращает список людей с определенным членством в группе (например, все администраторы домена или операторы учетных записей и т. Д.)

Затем я хочу выполнить поиск для каждого извозвращенные имена пользователей в журналах событий Windows… и возвращают результаты в виде одного набора данных.

У меня обнаружен поиск LDAP.У меня есть поиск в журнале событий Windows.Мне просто нужно соединить их вместе.

Если бы я кодировал это в сценарии, я бы либо:

i) Перечислил соответствующие члены группы в массив.Запустите запрос журнала событий для пользователей, которые существуют в массиве, например: с использованием семантики, такой как isin () или contains ();или ii) Перечислите членов группы и выполните цикл типа foreach ().

Итак, как #?! @ Я делаю это в Splunk.Я пытался использовать команды "search" и "foreach", но не испытывал радости.Я даже поиграл с созданием поиска и попробовал isin (), но не смог заставить его работать.

Пример поиска по LDAP:

| ldapsearch domain="contoso.com" search="(&(objectclass=user)(objectCategory=person)(memberOf=CN=Domain Admins,OU=MyContainer,DC=contoso,DC=com))" attrs="sAMAccountName" basedn="DC=contoso,DC=com" | eval ldapSearchUserName="contoso\\"+lower(sAMAccountName)

Пример поиска по журналу событий:

index="wineventlog" source="WinEventLog:Security" sourcetype="WinEventLog:Security" "LogName=Security" "EventCode=4624" earliest=-1d | rex field=Message ".*Logon Type:\s+(?<LogonType>\d+)" | eval UserName=mvindex(Security_ID, 1) | table UserName

Какие-нибудь мысли, советы или рекомендации?

Большое спасибо

S

1 Ответ

0 голосов
/ 16 мая 2019

Сначала позвольте мне кое-что прояснить.

Splunk возвращает результаты в виде таблицы. Строки называются «событиями», а столбцы - «полями». Большинство команд поиска работают одновременно с одним событием.

Команда foreach перебирает поля внутри одного события. Используйте команду map для зацикливания событий (это может быть медленно).

Splunk поддерживает вложенные запросы. «Внутренний» запрос называется «подпоиском», а «внешний» запрос называется «основным поиском». Подзапросы заключены в квадратные скобки [] и всегда выполняются первыми. Означает, что результаты подзапроса передаются в основной поиск, а не наоборот.

Один из подходов к вашей проблеме - сделать ldapsearch в подпоиске, и эти результаты станут частью основного поиска.

index="wineventlog" source="WinEventLog:Security" sourcetype="WinEventLog:Security" "LogName=Security" "EventCode=4624" earliest=-1d 
| rex field=Message ".*Logon Type:\s+(?<LogonType>\d+)" 
| eval UserName=mvindex(Security_ID, 1) 
| search [| ldapsearch domain="contoso.com" search="(&(objectclass=user)(objectCategory=person)(memberOf=CN=Domain Admins,OU=MyContainer,DC=contoso,DC=com))" attrs="sAMAccountName" basedn="DC=contoso,DC=com" 
| eval UserName="contoso\\"+lower(sAMAccountName)|fields UserName | format]
| table UserName

Здесь при поиске по LDAP список пользователей извлекается в поле с именем «Имя пользователя». Используемое здесь имя поля должно совпадать с полем, используемым в основном поиске, иначе вы не получите никаких результатов. Команда format помещает результаты в форму (UserName=foo OR UserName=bar...) для правильного поиска. Затем он используется для поиска в списке имен пользователей, полученных в результате основного поиска, который должен дать результаты, которые вы ищете.

...