コンテンツにスキップ

機密データのクリーンアップ

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から機密データを除外する

OpenTelemometryは、ライブラリによって記録されたプロパティ “http.url” を検出するため、像“http://example.com/users/123/authenticate” のようなURLは編集されないように安全であると見なされます。

原則として、Logfireだけでなく、クエリパラメータを含むURLが記録されることが想定されているため、機密データはリクエスト本文またはヘッダーに配置する必要があります。

パラメータ化されたデータベースクエリの使用

OpenTelemometryデータベースツールライブラリに記録されている “db.statement” プロパティは安全であると見なされるため、像 “SELECT secret_value FROM table WHERE ..."のようなSQLクエリは編集されません。

SQLインジェクションの影響を受けない補間メソッドを使用している場合でも、機密データがクエリ文字列に直接挿入されないように、パラメータ化されたクエリ(プレパラトステートメントなど)を使用します。


本文总阅读量次