New Relicでは、アプリケーションのパブリック構造に機密情報を含めないことを推奨していますが、それが常に可能であるとは限らないことも理解しています。Browserエージェントを設定して、送信するすべてのペイロード内のデータを選択的に難読化できます。これは、ナビゲーションパス、エラーメッセージなど、エージェントがキャプチャする場所にアプリケーションが機密データを使用している場合に役立ちます。
難読化ルールの設定 以下のいずれかの方法を使用して難読化ルールを作成できます:
New Relicプラットフォーム経由での設定 重要 Browserエージェントのバージョン1.317.0 以降、コピー/ペースト、NPMブラウザのインストレーション方法、およびAPMが挿入されたアプリケーションに対して、New RelicプラットフォームおよびNerdGraph経由で難読化を設定できます。
New Relicプラットフォームから直接、取り込み難読化ルールを作成して、機密データが収集される前にマスクできます。これらのルールは、すべてのブラウザイベントに適用されます。New RelicプラットフォームまたはNerdGraph経由で設定されたルールは、APMが注入されたアプリケーション、コピー/ペーストのインストレーション、およびNPMのインストレーションに適用されます。ただし、コピー/ペーストおよびNPMのインストレーション では、init設定にobfuscateプロパティを追加することで、New Relicプラットフォームで設定されたルールを手動で上書きできます。
ヒント 初回セットアップ :New Relicプラットフォームで難読化ルールの設定を表示するには、まずAJAXペイロードキャプチャ を有効にする必要があります。ペイロードキャプチャが有効になると、Application settingsに難読化ルールセクションが表示されます。その後、カスタムの難読化ルールを保持したまま、ペイロードキャプチャを無効にすることができます。
難読化ルールを追加するには:
one.newrelic.com > All capabilities > Browser > (select an app) > Settings > Application settings に移動します。Ingest obfuscation rules で、 Add a rule をクリックします。Original value フィールドに、マスクする機密データに一致する正規表現パターンを入力します。Replace with フィールドに、ニュートラルな値または置換値を入力します。Choose where to store ドロップダウンから、難読化ルールを適用するイベント属性のタイプを選択します。Add rule をクリックして作成します。難読化ルールは、取り込み前のすべてのBrowserイベント全体で一致するデータに適用されます。JavaScript経由で設定する 送信するすべてのペイロード内のデータを選択的に難読化するようにBrowserエージェントを設定できます。これは、ナビゲーションパス、エラーメッセージなど、エージェントがキャプチャする場所でアプリケーションが機密データを使用する場合に便利です。
ブラウザ エージェントバージョン 1216 以降では、送信ハーベスト ペイロードに難読化ルールを適用できます。
これらのルールをセットアップするには、次のBrowserエージェントプロパティを設定します:
プロパティinit.obfuscateには、送信前に各ハーベストを変更するために使用されるセレクターと置換の配列が含まれています。
JavaScript設定セクションを手動で編集し、難読化条件が含まれるようにobfuscate配列を設定する必要があります。 推奨事項
このプロパティを構成するときは、次のことをお勧めします。
意図的な正規表現パターンを使用して、難読化が必要なもののみを難読化します。
過度な難読化は、データをグループ化する際の粒度が低下したり、エージェントがキャプチャした内容を消化する能力が低下したりするなどの副作用をもたらす可能性があります。 機密データを、どのデータが編集されたかを示す中立的かつ一般的な用語に置き換えます。
例: /account-id/g --> ACCOUNT_ID コピー&ペーストでインストール コピー/ペーストのインストール方法を使用している場合は、エージェント ローダーの前にブラウザの JavaScript 設定に次の設定を追加します。
... < other init properties > ... ,
regex : < RegExp | string > ,
... < other obfuscation rules > ...
NPMのインストール NPMブラウザのインストレーション方法を使用している場合は、Browserエージェントを初期化する際に以下の設定を追加してください:
... < other init properties > ... ,
regex : < RegExp | string > ,
... < other obfuscation rules > ...
例:特定のイベントタイプに難読化をスコープする デフォルトでは、難読化ルールはBrowserエージェントによってキャプチャされたすべてのイベントタイプに適用されます。ただし、eventFilter配列プロパティを使用して、特定のイベントタイプにルールをスコープできます。
これは、AJAXペイロード をキャプチャする場合に特に便利です。この場合、他のイベントに影響を与えることなく、リクエスト/レスポンス本文内の機密データを難読化したいことがあります。
ヒント eventFilterプロパティを省略すると、ルールはすべてのイベントタイプに適用され、既存の設定との互換性が維持されます。
... < other init properties > ... ,
eventFilter : [ 'AjaxRequest' ]
... < other init properties > ... ,
replacement : 'ACCOUNT_ID' ,
eventFilter : [ 'AjaxRequest' , 'JavaScriptError' ]
標準の難読化 AJAXペイロードキャプチャ を有効にすると、Browserエージェントには、一般的な種類の機密データを保護するためのデフォルトの難読化ルールが含まれます。これらのルールは、AJAXペイロードキャプチャを初めて有効にしたときにのみ作成されます。この機能を無効にしてから再度有効にしても、デフォルトのルールは再作成されません:
ヒント これらのルールは、AJAXペイロードキャプチャが有効になっているすべてのアプリケーションに適用されます。New Relicプラットフォームで、またはNerdGraphを使用して、これらのルールをカスタマイズまたは無効にすることができます。ペイロードキャプチャは一般的な種類の機密データに対する重要な保護を提供するため、設定が特定のユースケースで誤検知を引き起こさない限り、これらのルールを有効にしておくことをお勧めします。
クレジットカード番号 2つの正規表現パターンが、一般的なクレジットカードのフォーマットを検出してマスクします:
パターン1 (よりシンプルな形式):
regex : / \b (?: 4 [ 0 - 9 ] {12} (?: [ 0 - 9 ] {3} ) ? | 5 [ 1 - 5 ] [ 0 - 9 ] {14} | 3 [ 47 ] [ 0 - 9 ] {13} | 6011 [ 0 - 9 ] {12} ) \b / g ,
replacement : 'XXXX-XXXX-XXXX-XXXX' ,
eventFilter : [ 'AjaxRequest' ]
パターン2 (包括的で、より多くのカードタイプをカバー):
regex : / (?: 4 \d {12} (?: \d {3} ) {0,2} | 5 [ 1 - 5 ] \d {14} | 2 (?! 20 ) [ 2 - 7 ] \d {14} | 220 [ 0 - 4 ] \d {12} | 3 [ 47 ] \d {13} | 3 (?: 0 [ 0 - 5 ] | [ 68 ] \d ) \d {11} | 6 (?: 011 | 5 \d {2} | 4 [ 4 - 9 ] \d ) \d {12} | 62 \d {14,17} | 35 (?: 2 [ 89 ] | [ 3 - 8 ] \d ) \d {12,15} | (?: 5018 | 5020 | 5038 | 6304 | 6759 | 676 [ 1 - 3 ] ) \d {8,15} | (?: 60 | 65 | 81 | 82 ) \d {14} ) / g ,
replacement : 'XXXX-XXXX-XXXX-XXXX' ,
eventFilter : [ 'AjaxRequest' ]
どちらのパターンも、検出されたクレジットカード番号をXXXX-XXXX-XXXX-XXXXに置き換えます。
社会保障番号 以下の正規表現パターンは、XXX-XX-XXXXを含む一般的な社会保障番号を検出してマスクします:
regex : / \b \d {3} - ? \d {2} - ? \d {4} \b / g ,
replacement : 'XXX-XX-XXXX' ,
eventFilter : [ 'AjaxRequest' ]
難読化とユーザー識別 ユーザーを識別するためにnewrelic.setUserId() APIを使用する場合、難読化ルールは、setUserId()によって設定されたenduser.id属性を含む、Browserエージェントによって収集されたすべてのデータ に適用されることに注意してください。
電子メールアドレスやその他のPIIをユーザー識別子として使用しながら、AJAXペイロード内の同じデータ型を難読化している場合、競合が発生する可能性があります。
シナリオ例 次の状況を想定します:
ユーザーIDとしてメールアドレスを使用する: newrelic.setUserId('user@example.com') AJAXリクエスト/レスポンス本文内の電子メールアドレスをマスクするように難読化を設定する 難読化ルールは次のようになります:
regex : / [ a - z A - Z 0 - 9 ._%+- ] + @ [ a - z A - Z 0 - 9 .- ] + \. [ a - z A - Z ] {2,} / g ,
replacement : 'EMAIL_REDACTED' ,
eventFilter : [ 'AjaxRequest' ]
問題 :難読化ルールは(AJAXペイロードだけでなく)すべてのイベントデータに適用されるため、enduser.id属性も難読化され、実際のメールアドレスの代わりにEMAIL_REDACTEDとして表示されます。
ソリューション オプション1:PII以外のユーザー識別子を使用する 推奨されるアプローチは、setUserId()に次のような機密性のない識別子を使用することです:
ハッシュ化または暗号化されたユーザーID
内部アカウント番号
UUIDまたは生成された識別子
newrelic . setUserId ( 'user-12345' )
newrelic . setUserId ( hashEmail ( 'user@example.com' ) )
オプション2:より具体的な難読化ルールを作成する ユーザーIDとしてメールアドレスを使用する必要がある場合は、メールパターンをグローバルに照合するのではなく、特定のJSONパスまたは属性名をターゲットとする難読化ルールを作成します:
regex : / ( "customerEmail" \s * : \s * " ) [ ^ " ] + ( @ [ ^ " ] + " ) / g ,
replacement : '$1EMAIL_REDACTED$2' ,
eventFilter : [ 'AjaxRequest' ]
このアプローチでは、誤検知を回避しながらすべての機密データを確実にキャッチするために、慎重なテストが必要です。
注意 本番環境にデプロイする前に、常に開発環境で難読化ルールを十分にテストしてください。ブラウザの開発者ツールのネットワークタブを使用して、New Relicに送信されている実際のペイロードを検査します。