Предисловие

В какой-то момент логирования многие задаются вопросом как логировать события с конфиденциальными данными. Для примера возьмём банковские операции. Допустим что прошла какая-то транзакция где есть публичные поля ( id и т.п ) и конфиденциальные поля ( card number ).

Что можно сделать в таком случае? Конечно зашифровать половину данных, как это обычно бывает в истории переводов в том же мобильном приложении от интернет банкинга.

Т.е допустим номер карты 1111-2222-5555-9999 значит надо перевести его в XXXX-XXXX-XXXX-9999

SEDCMD

В splunk для это можно использовать модуль SEDCMD.

Суть работы SEDCMD:

  1. forwarder отправляет логи в splunk
  2. splunk смотря на источник указанный в props.conf обрабатывает логи согласно правилу SEDCMD ( pattern )
  3. индексирует логи ( записывает )

Источник данных ( input )

Для нашего примера создадим файл в который будем писать лог, например /tmp/test.txt.

touch /tmp/test.txt

Добавим в inputs.txt наш файл для логирования /opt/splunkforwarder/etc/system/local/inputs.conf

vi /tmp/test.txt
	[monitor:///tmp/test.txt]
	disabled = false
	sourcetype = mysourcetype
	index = myindex

systemctl restart splunk

Тестирование

Добавляем в файл запись 1111-2222-5555-9999

vi /tmp/test.txt
	1111-2222-5555-9999	

Делаем поиск в splunk

index=myindex sourcetype=mysourcetype

Добавление SEDCMD

Для этого редактируем файл props.conf на node splunk

vi $SPLUNK_HOME/etc/system/local/props.conf
	[mysourcetype]
	SEDCMD-Mysourcetype= s/(\d{4}-){3}(\d{4})/xxxx-xxxx-xxxx-\2/g

Разбор конфига:

  • s/ - добавляется всегда в начале
  • (\d{4}-){3}(\d{4}) - это pattern для нашей строки, где данные бьются на 4 части
  • / - добавляется в конце pattern
  • xxxx-xxxx-xxxx-\2 - собственно pattern на что менять текст, где \2 последняя часть с (\d{4}-){3}(\d{4})
  • /g - добавляется в конце

Тестирование

Добавляем в файл запись 1111-2222-5555-9999

vi /tmp/test.txt
	1111-2222-5555-9999	

Делаем поиск в splunk

index=myindex sourcetype=mysourcetype