ログの難読化ルールを使用すると、特定の種類の情報がNewRelicに保存されないようにすることができます。
要件 ログの難読化機能は、 Data Plus オプション の一部としてご利用いただけます。
ログの難読化とは何ですか? 当社のログ管理 サービスは 、クレジットカード番号や社会保障番号など、機密事項である可能性が高いと判断された番号パターンを自動的にマスクします。
追加の難読化が必要な場合は、使用するログフォワーダー(たとえば、インフラストラクチャエージェント)の設定を調整するという方法があります。 しかし、より簡単なオプションは、 Data Plus で利用できる ログの難読化 機能 を使用することです。 この機能を使用すると、時間のかかる手動構成を行わずに、ログ管理 UI から直接、または NerdGraph API 経由でログ難読化ルールを設定できます。 機密情報に一致する正規表現を定義し、そのデータを難読化するルールを作成します。 機密情報をマスクするかハッシュするかを選択できます。
定義 重要な用語をいくつか紹介します。
Obfuscation rules
難読化アクションを適用するログを定義します。
Obfuscation rule actions
どの属性を調べるか、どのテキストを難読化するか、どのように難読化するか(マスキングまたはハッシュ化のいずれか)を定義します。
Obfuscation expressions
難読化するテキストを識別する名前付き正規表現です。
Masking
情報を完全に削除し、 X
文字に置き換えます。 これが完了すると、特定の値を検索できなくなります。
Hashing
情報を隠します。 ハッシュ ツールを使用して機密値のハッシュを取得し、そのハッシュを含むログを検索できます。
難読化の仕組み 次の例に表示されている JSON オブジェクトは、NerdGraph API で使用されるペイロードを簡略化したものです。 これにより、さまざまな API 操作とそれに対応する UI 操作をより適切に関連付けることができます。
例:難読化前のログレコード 次のようなログ記録があるとします。
"message" : "The credit card number 4321-5678-9876-2345 belongs to user user@email.com (born on 01/02/2003) with SSN 123-12-1234" ,
"creditCardNumber" : "4321-5678-9876-2345" ,
"serviceName" : "loginService"
このログレコードには、いくつかの機密データが含まれています。理想的には、このようなログに仕上げることです。
"message" : "The credit card number 9aa9bc1528859aee1b1df75795f1ebd54beb2f0d26c8a1d4580a71a07189cdd5 belongs to user user@email.com (born on XXXXXXXXXX) with SSN 30e6897f76dc102e32ee1d781c43417d259e586eac15c963d75ab8b5187769da" ,
"creditCardNumber" : "9aa9bc1528859aee1b1df75795f1ebd54beb2f0d26c8a1d4580a71a07189cdd5" ,
"ssn" : "30e6897f76dc102e32ee1d781c43417d259e586eac15c963d75ab8b5187769da" ,
"serviceName" : "loginService"
例:基本的なプロセス この例で機密データを難読化するために使用する基本的なプロセスは次のとおりです。
1.適用すべきアクション あなたは、そのサービスから来るすべてのログに以下の難読化アクションを適用することを決定します。
HASH
message
およびcreditCardNumber
属性に存在するクレジットカード番号。MASK
message
属性に存在する誕生日。HASH
message
およびssn
属性に存在する社会保障番号。2.センシティブなデータをどのように表現するか 最初に行う必要があるのは、この機密情報を取得できるようにする難読化表現を定義することです。
ヒント 以下の例は、UI で直接使用する正規表現を示しています。 このドキュメントの後半では、 NerdGraph でこれらの正規表現のエスケープバージョンを使用する方法について説明します。
難読化表現
定義
クレジットカード番号
ハイフンで区切られた4桁のグループを4つ取り込む必要があります。
"name" : "Credit Card Number" ,
"regex" : "((?:(?:4d{3})|(?:5[1-5]d{2})|6(?:011|5[0-9]{2}))(?:-?|\040?)(?:d{4}(?:-?|\040?)){3}|(?:3[4,7]d{2})(?:-?|\040?)d{6}(?:-?|\040?)d{5})"
社会保障番号
ハイフンで区切られた3桁、2桁、4桁の3つのグループを捕捉する必要があります。
"name" : "Social Security Number" ,
"regex" : "(d{3}-d{2}-d{4})"
生年月日( loginService
固有)
この例では、生まれた日付はログインサービスの一部です。周囲の単語"(born on 01/02/2003)"
の日付情報に基づいて難読化する部分を定義します。
"name" : "Born date - loginService specific" ,
各難読化表現は、文字列から機密情報を取り出す方法を定義し(正規表現を使用)、後で簡単に識別できるように、いくつかのフレンドリーな名前に関連付けます。
難読化表現は再利用できます 。機密データを含む ログ 属性の名前の付け方にはまったく関係ありません。 インスタンスの場合、上記で定義した社会保障式は、 ssn
、 socialSecurityNumber
、またはsocSecNum
という名前のログ属性に適用できます。
また、ログ属性の形式に密接に結合された、再利用できない難読化表現( Born date (loginService specific)
など)を作成することもできます。 たとえば、 born on
とbefore
の後に続くものを使用できます。
ネストされた正規表現キャプチャグループはサポートされていません この機能の主な役割は、機密データをハッシュまたはマスクに簡単かつ効率的に置き換えることです。 キャプチャ グループ内で異なる一致をグループ化する必要がある場合は、ネストされたキャプチャ グループの作成を避けるために、非キャプチャ グループ構文(?:{EXPRESSION})
を使用することを忘れないでください。 たとえば、 (([A-Z]{12})|([a-z]{6}))
避けて、代わりに((?:[A-Z]{12})|((?:[a-z]{6}))
を使用します。
3.どのログがあなたのルールを使用するか 機密データをキャプチャする方法を定義したので、どのログを難読化する必要があるか(ログインサービスのもの)、そしてどのように難読化するか(定義した難読化アクションを使用)を指定する必要があります。これを実現するために、難読化ルールを定義します。
"name" : "Obfuscate Login Service Logs" ,
"filter" : "serviceName = 'loginService' AND department = 'sales'" ,
"attributes" : [ "message" , "creditCardNumber" ] ,
"expression" : { "name" : "Credit Card Number" } ,
"attributes" : [ "message" ] ,
"expression" : { "name" : "Born date - loginService specific" } ,
"attributes" : [ "message" , "ssn" ] ,
"expression" : { "name" : "Social Security Number" } ,
このルールは主に3つの要素で構成されています。
難読化ルールコンポーネント
説明
名前
この名前は、ルールの機能を簡単に識別するのに役立ちます。この例では、このルールは、ログインサービスからのログのさまざまな属性を難読化する方法を定義します。
フィルター
フィルタはNRQL形式を使用して、ログインサービスからのターゲットログを識別する方法をシステムに通知します。この例では、 serviceName = loginService
とdepartment = sales
のログをクエリします。
アクション
最後に、このルールは、フィルターに一致するログに適用する一連の難読化アクションを定義します。各アクションは以下を定義します:
属性の各セットから機密情報を抽出するために使用する難読化式を以前に作成したもの
このデータを難読化するために適用する難読化方法( HASH_SHA256
またはMASK
)
NerdGraph 経由で難読化ルールを定義する場合は、難読化表現の名前ではなく、そのid
を指定する必要があることに注意してください。 前の例を読みやすくするために、代わりに難読化表現の名前を使用しました。
4.他のルールでの表現の再利用 最後の例として、属性serviceName = checkoutService
とクレジットカード情報を含むccn
属性を持つ「CheckoutService」という名前の別のサービスからのログを難読化する必要があると想像してください。
"message" : "Order completed" ,
"ccn" : "4321-5678-9876-2345" ,
"serviceName" : "checkoutService"
このサービスからのログを難読化するには、これらの特定のログを対象とする別の難読化ルールを定義するだけでよく、以前に作成したCredit card number
難読化式を再利用するだけです。
"name" : "Obfuscate Checkout Service Logs" ,
"filter" : "serviceName = 'checkoutService' AND department = 'sales'" ,
"expression" : { "name" : "Credit Card Number" } ,
チェックリスト:ログを難読化する手順 ログを難読化するために
ログに表示される機密データのパターンを特定して、ログの形状を調べます。例えば:
すべてのログに機密情報が含まれていますか?それとも、もっと具体的に(サービスAや地域Bのログのみ)教えてください。 クレジットカード番号、運転免許証番号、国民ID、生体認証、その他の値など、どのような機密情報が含まれていますか? 機密データを抽出する方法を識別するための難読化式 を作成します。
ログのセットごとに難読化ルール を定義します。
NRQLを使ってどのように捕らえるかを定義する。 それぞれに適用する必要のある難読化アクションを定義します。自問してみてください:後でこの機密情報を使用してログを照会する必要がありますか( HASH
を使用することを検討してください)、またはログからこの情報を完全に削除する必要がありますか( MASK
を使用することを検討してください)? ヒント Logs obfuscation UI にはHashing tool が含まれており、既知の値からハッシュを見つけてコピーし、他の式やルールで使用することができます。
CPU制限 難読化には 1 分あたりの CPU 制限があります。 アカウントがこれらのリソース制限に達した場合、ログは期待どおりに難読化されません。 CPU 制限を確認するには、 Data management UI のシステムLimits ページ に移動します。
1 分あたりの難読化 CPU 制限を超え、ログを難読化またはハッシュ化できない場合、難読化ルールが適用された属性はdropped になり、属性が削除された理由を示すテキストに置き換えられます。 たとえば、難読化ルールがmessage
フィールドに適用され、1 分あたりの CPU 制限に達した場合、結果のログは次のようになります。
"message" : "<OBFUSCATION> The account is over its obfuscation per-minute limit, attribute dropped" ,
これは、PII やその他の機密データが誤って取り込まれるのを防ぐためです。
さらに、次の `NrIntegrationError' がアカウントにログ記録されます。
"limitName" : "Log API obfuscation per account per minute" ,
"message" : "You’ve exceeded our limit of per-account obfuscation time per-minute for the Log ingestion pipeline. Please reduce your usage or contact New Relic support." ,
"name" : "ObfuscationTimeLimitReached" ,
"newRelicFeature" : "Logs" ,
"rateLimitType" : "ObfuscationTimePerMinute" ,
"timestamp" : 1678819264283
難読化ルールがどの程度機能しているかを評価し、どのルールがスキップされているかを確認するには、 Logs Obfuscation > Health に移動します。 難読化ルールは CPU を大量に消費するため、これらのグラフは、リソース制限によって最も影響を受けるルールを判断するのに役立ちます。
難読化表現 New Relic UIを使用するか、GraphQL ExplorerであるNerdGraphを使用して、難読化式を作成、読み取り、更新、または削除できます。
one.newrelic.com > All capabilities > Logs > Obfuscation : まず 1 つ以上の難読化表現を作成し、次に難読化ルールを作成します。
難読化表現を作成する これらのオプションのいずれかを使用して、難読化式を作成します。
Using the logs UI:
one.newrelic.com > All capabilities > Logs に移動し、左側のナビゲーションからObfuscation を選択します。
Create regex をクリックします。
新しい難読化ルールの名前と、キャプチャしたい機密データに一致する正規表現を入力します。 RE2 構文 を使用します。
次の例は、クレジットカード番号にマッチする基本的な難読化表現を示しています。
Using NerdGraph:
logConfigurations
の下のlogConfigurationsCreateObfuscationExpression
ミューテーションを使用します。 GraphiQL のサンプルと、 api.newrelic.com/graphiql の関連ドキュメントを参照してください。
重要 NerdGraph で正規表現を使用する場合は、正規表現をエスケープする必要があります。 例えば: ((?:(?:4\\d{3})|(?:5[1-5]\\d{2})|6(?:011|5[0-9]{2}))(?:-?|\\040?)(?:\\d{4}(?:-?|\\040?)){3}|(?:3[4,7]\\d{2})(?:-?|\\040?)\\d{6}(?:-?|\\040?)\\d{5})
難読化表現を読み込む 難読化式を照会するには、これらのオプションのいずれかを使用します。
Using the logs UI:
one.newrelic.com > All capabilities > Logs
に移動し、左側のナビゲーションから
Obfuscation
を選択します。
利用可能なすべての難読化表現とその定義を表示するには、
Expressions
タブを選択します。
Using NerdGraph:
actor.account.logConfigurations
の下にあるobfuscationExpressions
フェッチャーを使用します。 GraphiQL のサンプルと、 api.newrelic.com/graphiql の関連ドキュメントを参照してください。
難読化表現を更新する 難読化表現を更新するには、これらのオプションのいずれかを使用します。
Using the logs UI:
one.newrelic.com > All capabilities > Logs に移動し、左側のナビゲーションからObfuscation を選択します。
Expressions タブを選択します。
編集したい難読表現の右側にある省略記号アイコン... をクリックし、 Edit をクリックします。
必要に応じてフィールドを変更し、 Update をクリックします。
Using NerdGraph:
logConfigurations
の下のlogConfigurationsUpdateObfuscationExpression
ミューテーションを使用します。 GraphiQL のサンプルと、 api.newrelic.com/graphiql の関連ドキュメントを参照してください。
重要 NerdGraph で正規表現を使用する場合は、正規表現をエスケープする必要があります。 例えば: ((?:(?:4\\d{3})|(?:5[1-5]\\d{2})|6(?:011|5[0-9]{2}))(?:-?|\\040?)(?:\\d{4}(?:-?|\\040?)){3}|(?:3[4,7]\\d{2})(?:-?|\\040?)\\d{6}(?:-?|\\040?)\\d{5})
難読化表現を更新する際に、すべてのフィールドを指定する必要はなく、id(必須)と修正したいフィールドのみを指定すればよい。
難読化表現の削除 重要 難読化式が難読化ルールによって現在使用されている場合、難読化式を削除することはできません。
難読化表現を削除するには、これらのオプションのいずれかを使用します。
Using the logs UI:
one.newrelic.com > All capabilities > Logs に移動し、左側のナビゲーションからObfuscation を選択します。
Expressions タブを選択します。
削除したい難読表現の右側にある省略記号アイコン... をクリックし、 Delete をクリックします。
Delete をクリックして、式を削除することを確認します。
Using NerdGraph:
logConfigurations
の下のlogConfigurationsDeleteObfuscationExpression
ミューテーションを使用します。 GraphiQL のサンプルと、 api.newrelic.com/graphiql の関連ドキュメントを参照してください。
変異は、削除される前の式のスナップショットを返します。
サンプル表現 以下に、最も一般的な機密データの種類の一部を難読化するためのサンプル正規表現式をいくつか示します。 難読化表現は、それらの表現が使用されるNew Relicアカウントごとに作成する必要があります。
ヒント 次の例は、UI で使用できる正規表現です。 これらを GraphQL で使用するには、この例 に示すようにエスケープする必要があります。
米国の社会保障番号 Expression:
( \d {3} [ - \s \. ] ? \d {2} [ - \s \. ] ? \d {4} )
クレジットカード番号 Expression:
( (?: (?: 4 \d {3} ) | (?: 5 [ 1 - 5 ] \d {2} ) | 6 (?: 011 | 5 [ 0 - 9 ] {2} ) ) (?: - ? | \040 ? ) (?: \d {4} (?: - ? | \040 ? ) ) {3} | (?: 3 [ 4,7 ] \d {2} ) (?: - ? | \040 ? ) \d {6} (?: - ? | \040 ? ) \d {5} )
米国の生年月日 Expression:
( (?: \d {2} ) ? \d \d (?: \\ ) ? (?: \/ ) ? \d \d (?: \\ ) ? (?: \/ ) ? \d {2} (?: \d {2} ) ? )
電子メールアドレス Expression:
( [ a - z A - Z 0 - 9 !#$'*+?^_`{|}~.- ] + (?: @ | %40 ) (?: [ a - z A - Z 0 - 9 - ] + \. ) + [ a - z A - Z 0 - 9 - ] + )
IPアドレス(IPv4) Expression:
^ ( [ 0 - 9 ] {1,3} ) \. ( [ 0 - 9 ] {1,3} ) \. ( [ 0 - 9 ] {1,3} ) \. ( [ 0 - 9 ] {1,3} ) $
米国の住所 Expression:
/ \d {1,} ( \s {1} \w {1,} ) ( \s {1}? \w {1,} ) /g
米国の電話番号 Expression:
( ^ [ \+ ] ? [ 1 ] ? [ \W ] ? [ ( ] ? [ 0 - 9 ] {3} [ ) ] ? [ - \s \. ] ? [ 0 - 9 ] {3} [ - \s \. ] ? [ 0 - 9 ] {4} )
英国国民保険番号 (NINO) Expression:
( [ a - z A - Z ] {2} [ - \s ] ? \d {2} [ - \s ] ? \d {2} [ - \s ] ? \d {2} [ - \s ] ? [ a - d A - D ] )
スペイン国民 ID (NIE/DNI/NIF) Expression:
( [ a - z A - Z ] ? [ - \s ] ? \d {7,8} [ - \s ] ? [ a - z A - Z ] )
インドのPAN ID Expression:
^ ( [ a - z A - Z ] ) {5} ( [ 0 - 9 ] ) {4} ( [ a - z A - Z ] ) {1}? $
インド AADHAAR ID Expression:
^ ( [ 2 - 9 ] {1} [ 0 - 9 ] {3} \s \d {4} \s \d {4} ) $
カナダの個人健康/社会保険番号 (PHIN/SIN) Expression:
( \d {3} [ - \s \. ] ? \d {3} [ - \s \. ] ? \d {3} )
難読化ルール New Relic UIを使用するか、GraphQL ExplorerであるNerdGraphを使用して、難読化ルールを作成、読み取り、更新、または削除できます。
難読化ルールの作成 難読化ルールを作成するには、これらのオプションのいずれかを使用します。
Using the logs UI:
one.newrelic.com > All capabilities > Logs に移動し、左側のナビゲーションからObfuscation を選択します。
Create obfuscation rule をクリックします。
新しい難読化ルールの名前と、難読化したいログのターゲットセットを捕捉するためのマッチング条件(NRQL形式)を入力します。
新しい actions
を追加して(最初のものは自動的に追加されます)、各属性セットをキャプチャする難読化式(正規表現)と、それらを MASK
または HASH
するかどうかを指定します。
カンマ区切りで複数の属性を指定することができる。 MASK
一致するすべての文字をX
esに置き換えます。 MASK
を使用すると、後で特定の難読化された値を照会できなくなります。HASH
機密データをSHA-256ハッシュ値に置き換えます。 HASH
を使用する場合、クリアテキスト値がわかっていれば、ハッシュツールを使用してそれらをクエリできます。ルールは次のようなものです。
難読化ルールを作成してアクティブ化するには、 Create rule クリックします。
Using NerdGraph:
logConfigurations
の下のlogConfigurationsCreateObfuscationRule
ミューテーションを使用します。 GraphiQL のサンプルと、 api.newrelic.com/graphiql の関連ドキュメントを参照してください。
難読化ルールを読む 難読化ルールを照会するには、これらのオプションのいずれかを使用します。
Using the logs UI:
one.newrelic.com > All capabilities > Logs に移動し、左側のナビゲーションからObfuscation を選択します。
使用可能なすべての難読化ルールとその定義を表示するには、 Rules タブ (デフォルト) を選択します。
Using NerdGraph:
actor.account.logConfigurations
の下にあるobfuscationRules
フェッチャーを使用します。 GraphiQL のサンプルとapi.newrelic.com/graphiql の関連ドキュメントを参照してください。
難読化ルールの更新 難読化ルールを更新するには、これらのオプションのいずれかを使用します。
Using the logs UI:
one.newrelic.com > All capabilities > Logs に移動し、左側のナビゲーションからObfuscation を選択します。
Rules タブを選択します(デフォルト)。
編集する難読化ルールの右側にある省略記号アイコン... をクリックし、 Edit をクリックします。
必要に応じてフィールドを変更し、 Update rule をクリックします。
Using NerdGraph:
logConfigurations
の下のlogConfigurationsUpdateObfuscationRule
ミューテーションを使用します。 GraphiQL のサンプルと、 api.newrelic.com/graphiql の関連ドキュメントを参照してください。
重要 特定の難読化アクションにリンクするには、難読化expressionId
を指定する必要があります。このIDを取得するには、[query the obfuscationRules
]](#rules-read)で説明されているように、 obfuscationRules
を使用できます。
難読化ルールを更新するときに、すべてのフィールドを指定する必要はありませんid
(必須)と変更するフィールドのみを指定する必要があります。 名前のみを更新 する例を次に示します。
難読化ルールの削除 難読化ルールを削除するには、これらのオプションのいずれかを使用します。
Using the logs UI:
one.newrelic.com > All capabilities > Logs に移動し、左側のナビゲーションからObfuscation を選択します。
Rules タブを選択します(デフォルト)。
削除する難読化ルールの右側にある省略記号アイコン... をクリックし、 Delete をクリックします。
Delete をクリックして、式を削除することを確認します。
Using NerdGraph:
logConfigurations
の下のlogConfigurationsDeleteObfuscationRule
ミューテーションを使用します。 GraphiQL のサンプルと、 api.newrelic.com/graphiql の関連ドキュメントを参照してください。
変異は、削除される前のルールのスナップショットを返します。