マスク ルール
マスク ルールとは、取り込み前にログの無関係な情報や機密情報を非表示にするタイプの処理ルールです。マスク ルールを作成すると、マスクする表現に何を選択したとしても、Sumo Logic に送信される前にマスク文字列に置換されます。マスク文字列を選択することも、デフォルトである "#" を使用することもできます。
取り込みボリュームは、マスク フィルタの適用後に計算されます。マスクによってログのサイズが小さくなった場合、取り込み制限で測定されるのは小さいほうのサイズです。マスクは、全体的な取り込みボリュームを小さくする方法として優れています。
たとえば、次のログでメール アドレス dan@demo.com
をマスクするとします。
2018-05-16 09:43:39,607 -0700 DEBUG [hostId=prod-cass-raw-8]
[module=RAW] [logger=scala.raw.InboundRawProtocolHandler] [auth=User:dan@demo.com] [remote_ip=98.248.40.103]
[web_session=19zefhqy...] [session=80F1BD83AEBDF4FB] [customer=0000000000000005] [call=InboundRawProtocol.getMessages]
次のフィルタ式を使用できます。
auth=User\:(.*\.com)\]\s
マスク文字列を AAA
にすると、次の結果になります。
2018-05-16 09:43:39,607 -0700 DEBUG [hostId=prod-cass-raw-8]
[module=RAW] [logger=scala.raw.InboundRawProtocolHandler] [auth=User:AAA] [remote_ip=98.248.40.103]
[web_session=19zefhqy...] [session=80F1BD83AEBDF4FB] [customer=0000000000000005] [call=InboundRawProtocol.getMessages]
ルール
-
マスクする表現は、正規表現でキャプチャ グループとして表現する必要があります。キャプチャ グループは、括弧
()
で囲むことにより識別されます。たとえば、次のメッセージがあるとします。
{
"reqHdr":{
"auth":"Basic ksoe9wudkej2lfj*jshd6sl.cmei=",
"cookie":"$Version=0; JSESSIONID=6C1BR5DAB897346B70FD2CA7SD4639.localhost_bc; $Path=/"
}}次のマスク表現を使用して auth パラメータのトークンをマスクします。
auth"\s*:\s*"Basic\s*([^"]+)"
-
必要以上にログの多くの箇所を一致させないでください。前の例では、次の表現は必要以上に一致するため使用しないでください。
(?s).*auth"\s*:\s*"Basic\s*([^"]+)".*(?s)
-
特定の値を検出するためにアンカーを使用できます。たとえば、ログですべてのユーザのメールを
User:(user@email.com)]
として識別できる場合、User:(.*)]
を使用してUser:
が先頭アンカー、]
が終了アンカーになるようにできます。キャプチャ グループ(.*)
はこれらのアンカーの間のすべてを照合し、マスクします。 -
複数のキャプチャ グループを指定できます。1 つのフィルタで複数のキャプチャ グループを指定した場合、それぞれの値が同じようにマスクされます。そのため、ユーザのメール アドレスと IP アドレスについて 1 つのフィルタを作成した場合、どちらも同じマスク文字列に置換されます。たとえば、上のログの例の場合、次の正規表現のフィルタには 2 つのキャプチャ グループがあります。1 つはメール アドレスで、もう 1 つはセッション ID です。
auth=User\:(.*\.com)\]\s.*\[session=(.*?)\]\s
-
各キャプチャ グループは各ログに存在するすべての出現を照合し、マスクします。
-
値ごとに異なるマスクを使用するには、値ごとに個別のマスクを作成する必要があります。たとえば、ユーザ メール文字列と異なる文字列で IP アドレスをマスクする場合は、表現
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\)]
で別のフィルタを作成し、USER_ADDRESS をマスク文字列として使用できます。 -
ログ行の全文に一致するキャプチャ グループがある正規表現を指定していないことを確認してください。指定していると、ログ行全体がマスクされます。
-
複数行で値をマスクする必要がある場合、単一行の修飾子 (?s) を使用します。例:
auth=User\:(.*(?s).*session=.*?)\]
- マスク文字列が元の文字列のサイズの 5 倍を超えるとサイズが調整されます。たとえば、マスク ルールによってサイズが 7 バイトから 38 バイトに増加した場合、メッセージの最後の 3 バイトが削除され 35 バイト (7 バイトの 5 倍) に調整されます。
例
社会保障番号のマスク
Sumo Logic では、マスク ルール内の正規表現を使用してログ メッセージの SSN をマスクできます。既知の文字列でマスクしたら、ログ内でその文字列の検索を実行し、SSN がログ ファイルで表示されている場合に検出できます。
次の正規表現は、ログ データを Sumo Logic に送信する前にマスク フィルタ内で SSN をマスクするために使用できます。
((?!219-09-9999|078-05-1120)(?!666|000|9\d{2})\d{3}-(?!00)\d{2}-(?!0{4})\d{4})
クレジット カード番号のマスク
マスク ルール内の正規表現を使用してログ メッセージのクレジット カード番号をマスクできます。既知の文字列でマスクしたら、ログ内でその文字列の検索を実行し、クレジット カード番号がログ ファイルで表示されている場合に検出できます。
次の正規表現は、マスク フィルタ内で American Express、Visa (16 桁のみ)、Master Card、Discover のクレジット カード番号をマスクするために使用できます。
((?:(?: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})
この正規表現は、番号にダッシュやスペースが含まれている場合にも、数字のみの場合にも対応しています。
サンプル:
- American Express: 3711-078176-01234 | 371107817601234 | 3711 078176 01234
- Visa: 4123-5123-6123-7123 | 4123512361237123 | 4123 5123 6123 7123
- Master Card: 5123-4123-6123-7123 | 5123412361237123 | 5123 4123 6123 7123
- Discover: 6011-0009-9013-9424 | 6500000000000002 | 6011 0009 9013 9424