システムのレジリエンスを強化

New Relic Logs のログ難読化ルールを適用すると、特定の種類の情報が New Relic に保存されないようマスキングまたはハッシュ化することができます。

概要としましては、難読化したい文字列を正規表現を用いて抽出しマスキングまたはハッシュ化をおこないます。では日本語の文字列を難読化する場合には、どのように設定すれば良いでしょうか。

ここでは日本語の文字列を難読化する設定例について、ご紹介したいと思います。なお、ログ難読化の一般的な解説や設定方法は割愛いたしますので、必要に応じて事前にこちらのドキュメントをご確認ください。

日本語文字列の抽出条件を設定

さきほど触れました通り、文字列の抽出には正規表現を利用します。正確には Re2構文 を利用します。みなさまが普段している表現方法とは異なる場合がありますので、こちらのドキュメント を参考に設定を進めましょう。

最も簡単な設定方法は、Unicode character class として定義されているものを用いる方法です。例えば日本語関連としては以下が挙げられます。

Unicode character class name 内容
Unicode character class name{Hiragana} 内容ひらがなを抽出
Unicode character class name{Katakana} 内容カタカナを抽出
Unicode character class name{Han} 内容漢字を抽出

では抽出条件を設定してみましょう。設定場所は New Relic UI の左ペインから Logs -> Obfuscation を選択し、画面内の Expression タブをクリックし、Create expression ボタンをクリックします。

create-expression

たとえば "ひらがな" を抽出したい場合は、さきほどの Unicode character class name を利用して以下のように設定します。expression name は任意に設定いただいて大丈夫です。(カタカナや漢字の場合は、Regex 値を置き換えて設定してみてください)

create hiragana expression

ひらがな、カタカナ、漢字をすべて抽出対象とする場合は、以下のように設定します。

create expression

これで抽出条件の設定は完了しました。

次に難読化ルールを作成します。ここではログの中にあるすべての平仮名を "X" に置き換える難読化設定をおこないます。Create obfuscation rule ボタンをクリックします。

create rule

次に難読化ルールを設定します。以下の項目にそれぞれ設定をおこないます。

Rule name 任意のルール名を入力
Matching criteria 難読化対象のログを絞り込む条件を NRQL 形式で記載
(例では infrastructure agent が収集したログを対象)
Attributes 上記で絞り込んだログのうち、どの属性情報 (attribute) に含まれるログを対象とするか記載
(例では Linux OS の /var/log/messages を想定して2つ設定)
Select expression さきほど設定した抽出条件を選択
Select obfuscation method Mask または Hash を選択

実際の設定例は以下のようになります。

create rule

これでルールの設定は完了です。

では難読化をテストしてみましょう。今回は Linux OS の /var/log/messages に出力される日本語文字列が難読化されるかテストしてみたいと思います。Linux のターミナル上から以下のコマンドを実行し、/var/log/messages にテスト対象の文字を含んだログを追記します。

$ logger "kokokaraログ難読化テストですkokomade"

それでは New Relic に保存後のログがどのようになっているか確認してみましょう。Logs -> All logs より、さきほど logger コマンドで書き込んだログを検索してみます。すると書き込んだ文字のうち、ひらがなの部分が X に置き換わっていることが確認できます。

obfuscation test

もし特定の日本語文字列をピンポイントで難読化したい場合、抽出条件に該当文字列を設定することが可能です。ただし、この方法はパターンマッチとは異なり難読化対象の文字列(機密情報)をダイレクトに New Relic 上にルールとして保存することになりますので、セキュリティ面の問題から利用しないようご注意ください。

またすべての日本語を難読化してしまうとログ調査に支障が出るケースの場合、難読化したい情報が独立した Attributes に格納されるようログを Parsing することで、" 該当 Attributes 内のすべての日本語を難読化する " という設定により安全性と利便性の両立が叶う場合があります。

数字やアルファベットなどによる規則性のある文字列を正規表現で抽出することに比べると日本語を柔軟に抽出することは難しいですが、該当 Attributes 内の「ひらがな」「カタカナ」「漢字」を対象とする場合は簡単な設定で難読化することが可能です。ぜひご活用ください。