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"}