30 марта 2021

Блог

Библиотека логирования True Engineering теперь умеет маскировать данные

Команды True Engineering используют наши собственные библиотеки логирования для .Net и Java проектов. Это помогает нам экономить время на настройке и поддерживать одинаковое качество логирования во всех микросервисах и продуктах.

Наши библиотеки позволяют фиксировать:

  • Все шаги пользователя
  • Все шаги внутри системы между микросервисами и между микросервисами и сторонними системами
  • Все, что приходит на вход и уходит в ответ — в том числе в сторонние системы
  • Время выполнения запросов пользователя на всех этапах


Недавно мы внедрили библиотеку в нашу систему взаиморасчетов с клиентами. В ней отображаются счета, оплаты, уникальные платежные токены… в общем, данные из разряда коммерческой тайны, а для мониторинга системы их знать не нужно. Да и в других продуктах часто крутится конфиденциальная информация. Поэтому мы поняли, что возможность скрывать такие данные должна стать частью базовых функций библиотеки. 

Начали с версии для .Net – там появились два вида маскирования:

1)      Мы использовали функцию Destructure библиотеки Serilog, чтобы настраивать скрытие определенных классов и/или их свойств.

2)     А также добавили анализ параметров запроса, таких как: заголовки запроса/ответа, параметры query, cookies, параметры действия контроллера и результат действия контроллера. И сокрытие отдельных параметров, попадающих под регулярные выражения, задаваемые разработчиками. 

Пока вся скрытая информация отображается в едином формате: “Value is hidden by log policy”. Но в скором времени мы добавим в библиотеку расширенные условия маскинга – дадим команде возможность самой задавать формат маски: cлова, звездочки или что-то иное, что им будет более удобно использовать.

Объекты без маскинга:
[17:54:52 INF] Credentials: {"SensibleValue": "User's password", 
"NonSensibleValue": "User's account"}
[17:54:52 INF] Vault key: {"Value": "Bitcoin vault's key value"}

С маскингом:
[17:48:15 INF] Credentials: {"SensibleValue": "Value is hidden by log policies", 
"NonSensibleValue": "User's account"}
[17:48:15 INF] Vault key: {"Object's value": "Value is hidden by log policies"}

Заголовки без маскинга:
Request's headers: {"Authorization": ["Basic dXNlcjpwYXNzd29yZA=="], 
"Cookie": ["authorizationCookie=dXNlcjpwYXNzd29yZA=="]}
Request's cookies: {"authorizationCookie": "dXNlcjpwYXNzd29yZA=="}

С маскингом:
Request's headers: {"Authorization": ["Value is hidden by log policies"], 
"Cookie": ["Value is hidden by log policies"]}
Request's cookies: {"authorizationCookie": "Value is hidden by log policies"}