Перейти к содержанию

Очистка конфиденциальных данных

LogfireSDK сканирует и редактирует потенциально чувствительные данные из журналов и диапазонов, прежде чем экспортировать их.

Отключение очистки

Чтобы полностью отключить очистку, [scrubbing][logfire.configure(scrubbing)] Установить как False:

import logfire

logfire.configure(scrubbing=False)

Дополнительная очистка с использованием пользовательского режима

По умолчанию SDK ищет несколько чувствительных регулярных выражений. Чтобы добавить свои собственные шаблоны, установите extra_patterns в список строк регулярных выражений:

import logfire

logfire.configure(scrubbing=logfire.ScrubbingOptions(extra_patterns=['my_pattern']))

logfire.info('Hello', data={
    'key_matching_my_pattern': 'This string will be redacted because its key matches',
    'other_key': 'This string will also be redacted because it matches MY_PATTERN case-insensitively',
    'password': 'This will be redacted because custom patterns are combined with the default patterns',
})

Ниже приведены режимы очистки по умолчанию:

'password', 'passwd', 'mysql_pwd', 'secret', 'auth', 'credential', 'private[._ -]?key', 'api[._ -]?key', 'session', 'cookie', 'csrf', 'xsrf', 'jwt', 'ssn', 'social[._ -]?security', 'credit[._ -]?card'

Уменьшение очистки с помощью обратного вызова

С другой стороны, если очистка является радикальной, вы можете передать функции callback , чтобы предотвратить редактирование определенных данных.

Функция вызывается для каждого потенциального соответствия, найденного скруббером. Если вы вернетесь к None, то значение будет отредактировано. В противном случае возвращаемое значение будет заменено соответствующим значением. Функция принимает logfire.ScrubMatch .

Вот пример:

import logfire

def scrubbing_callback(match: logfire.ScrubMatch):
    # 'my_safe_value' 通常包含字符串 'password',但它实际上并不敏感。
    if match.path == ('attributes', 'my_safe_value') and match.pattern_match.group(0) == 'password':
        # 返回原始值,防止脱敏。
        return match.value

logfire.configure(scrubbing=logfire.ScrubbingOptions(callback=scrubbing_callback))

Советы по безопасности

Использование шаблонов сообщений

Полное сообщение span/log не очищается, а только поля в нем. Например, следующее:

logfire.info ('Сведения о пользователе:{user}', user=User(id=123, password='secret')

... может быть записано следующее:

Сведения о пользователе:[Исчищено из-за пароля]

... но это:

user = User(id=123, password ='secret')
logfire.info ('Сведения пользователя:' + str(пользователь))

Будут записаны:

Данные пользователя: User(id=123, password='secret')

Это необходимо для того, чтобы сообщения безопасности, такие как «правильный пароль», не редактировались полностью.

Если inspect_arguments(значение по умолчанию в Python 3.11+) включен и работает правильно, то строка f (например,logfire.info(f'User details: {user}')) ) является безопасной. Для получения дополнительной информации см.здесь.

Короче говоря, не форматируйте сообщение самостоятельно. Для Другие причины Это, как правило, является хорошей практикой.

Исключить конфиденциальные данные из URL

Свойство “http.url”, записанное в библиотеке обнаружения OpenTelemetry, считается безопасным, поэтому URL-адреса, подобные 像“http://example.com/users/123/authenticate”, не редактируются.

Как правило, для Logfire предполагается, что URL-адрес (включая параметры запроса) будет записываться, поэтому конфиденциальные данные должны быть помещены в тело запроса или заголовок.

Использование параметрических запросов базы данных

Свойство “db.statement”, записанное в базе данных OpenTelemetry, считается безопасным, поэтому SQL-запросы, такие как 像 “SELECT secret_value FROM table WHERE ..., не редактируются.

Используйте параметрические запросы (например, предварительно подготовленные инструкции), чтобы конфиденциальные данные не вставлялись непосредственно в строку запроса, даже если используемый метод интерполяции не подвержен влиянию SQL-вливаний.


本文总阅读量次