ログがNewRelicに送信された後、難読化ルールを使用して、ログ内の機密情報を難読化してから、NewRelicデータベースであるNRDB に保存できます。
機密情報には、クレジットカード番号、社会保障番号、国民ID、または保存時に保護するために規制によって要求される可能性のあるその他のデータなど、個人を特定できる情報が含まれる場合があります。
機密情報に一致する正規表現を定義してから、そのデータを難読化するルールを作成できます。機密情報をマスクするかハッシュするかを選択できます。
ヒント 難読化には、1分あたりのCPU制限があります。アカウントがリソース制限に達した場合、ログは期待どおりに難読化されません。 CPU制限を簡単に確認するには、New Relic DataManagementUIのシステム制限 ページ に移動します。
定義 難読化ルール は、難読化アクションを適用するログを定義します。難読化ルールのアクション は、表示する属性、難読化するテキスト、および難読化する方法(マスキングまたはハッシュのいずれかによる)を定義します。難読化式 は、どのテキストを難読化するかを識別する正規表現と呼ばれます。マスキング は情報を完全に削除し、 X
文字に置き換えます。これが行われると、特定の値を検索することはできません。ハッシュ は情報を隠します。ハッシュツールを使用して機密値のハッシュを取得し、そのハッシュを含むログを検索できます。 難読化の仕組み 次の例に表示されているJSONオブジェクトは、難読化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
メッセージ
および creditCardNumber
属性に存在するクレジット カード番号です。MASK
メッセージ
属性に存在する生年月日です。message
およびHASH
属性に存在する社会保障番号をssn
します。2.センシティブなデータをどのように表現するか まず、この機密情報を取得するための難読化表現をいくつか定義する必要があります。
難読化表現
定義
クレジットカード番号
ハイフンで区切られた4桁のグループを4つ取り込む必要があります。
"name" : "Credit Card Number" ,
"regex" : "(d{4}-d{4}-d{4}-d{4})"
社会保障番号
ハイフンで区切られた3桁、2桁、4桁の3つのグループを捕捉する必要があります。
"name" : "Social Security Number" ,
"regex" : "(d{3}-d{2}-d{4})"
生まれた日 (loginService
specific)
この例では、誕生日はLoginサービスの一部である。 " (born on 01/02/2003)"
のように、周囲の単語の日付情報に基づいて難読化する部分を定義しています。
"name" : "Born date - loginService specific" ,
各難読化表現は、文字列から機密情報を取り出す方法を定義し(正規表現を使用)、後で簡単に識別できるように、いくつかのフレンドリーな名前に関連付けます。
難読化式は 再利用可能です。機密データを含むログ属性の命名方法に完全に依存しません。たとえば、上記で定義された社会保障式は、 ssn
、 socialSecurityNumber
、またはsocSecNum
という名前のログ属性に適用できます。
ただし、それでも、ログ属性の形式と緊密に結合された再利用不可能な難読化式( Born date (loginService specific)
の式など)を作成できます。たとえば、 born on
後とbefore
来るものは何でも使用できます。
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
)
GraphQL API 経由で難読化ルールを定義する場合、難読化式の名前ではなく id
を指定する必要があることに注意してください。前の例では読みやすくするために、難読化式の名前を代わりに使用しました。
4.他のルールでの表現の再利用 最後の例として、"Checkout Service" という名前の別のサービスから来るログを難読化する必要があるとします。 serviceName = checkoutService
という属性と、クレジットカード情報を含む ccn
という属性を持っているものです。
"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
の使用を検討)? 難読化表現 New Relic One UIを使用するか、GraphQL ExplorerであるNerdGraphを使用して、難読化式を作成、読み取り、更新、または削除できます。
難読化表現を作成する これらのオプションのいずれかを使用して、難読化式を作成します。
ログUIを使用する。
one.newrelic.com > Logs にアクセスし、左のナビから Obfuscation を選択します。
Create regex をクリックします。
新しい難読化ルールの名前と、キャプチャしたい機密データに一致する正規表現を入力します。 RE2 構文 を使用します。
次の例は、クレジットカード番号にマッチする基本的な難読化表現を示しています。
ナードグラフを使って
logConfigurationsCreateObfuscationExpression
mutator under logConfigurations
を使用します。GraphiQLの実装例と、 api.newrelic.com/graphiql にある関連ドキュメントを参照してください。
重要 正規表現
を NerdGraph 経由で導入する場合はエスケープする必要があります: (\d{4}-⑭{4}-⑯{4}-⑭{4})
難読化表現を読み込む 難読化式を照会するには、これらのオプションのいずれかを使用します。
ログUIを使用する。
one.newrelic.com > Logs にアクセスし、左のナビから Obfuscation を選択します。
Expressions タブを選択すると、利用可能なすべての難読化表現とその定義が表示されます。
ナードグラフを使って
obfuscationExpressions
fetcher under actor.account.logConfigurations
を使用します。 api.newrelic.com/graphiql にある関連ドキュメントと同様に GraphiQL で生成された例を参照してください。
難読化表現を更新する 難読化表現を更新するには、これらのオプションのいずれかを使用します。
ログUIを使用する。
one.newrelic.com > Logs にアクセスし、左のナビから Obfuscation を選択します。
Expressions タブを選択します。
編集したい難読化表現右側の3点メニュー ... をクリックし、 Edit をクリックします。
必要に応じてフィールドを修正し、 更新 をクリックします。
ナードグラフを使って
logConfigurationsUpdateObfuscationExpression
mutator under logConfigurations
を使用します。GraphiQLの実装例と、 api.newrelic.com/graphiql の関連ドキュメントを参照してください。
重要 正規表現
を NerdGraph 経由で導入する場合はエスケープする必要があります: (\d{4}-⑭{4}-⑯{4}-⑭{4})
難読化表現を更新する際に、すべてのフィールドを指定する必要はなく、id(必須)と修正したいフィールドのみを指定すればよい。
難読化表現の削除 重要 難読化式が難読化ルールによって現在使用されている場合、難読化式を削除することはできません。
難読化表現を削除するには、これらのオプションのいずれかを使用します。
ログUIを使用する。
one.newrelic.com > Logs にアクセスし、左のナビから Obfuscation を選択します。
Expressions タブを選択します。
削除したい難読化表現の右側の3点メニュー ... をクリックし、 削除 をクリックします。
Delete をクリックして、式を削除することを確認します。
ナードグラフを使って
logConfigurationsDeleteObfuscationExpression
mutator under logConfigurations
を使用します。GraphiQL の実装例と、関連ドキュメント api.newrelic.com/graphiql を参照してください。
変異は、削除される前の式のスナップショットを返します。
難読化ルール New Relic One UIを使用するか、GraphQL ExplorerであるNerdGraphを使用して、難読化ルールを作成、読み取り、更新、または削除できます。
難読化ルールの作成 難読化ルールを作成するには、これらのオプションのいずれかを使用します。
ログUIを使用する。
one.newrelic.com > Logs にアクセスし、左のナビから Obfuscation を選択します。難読化ルールの作成 をクリックします。新しい難読化ルールの名前と、難読化したいログのターゲットセットを捕捉するためのマッチング条件(NRQL形式)を入力します。 新しい アクション
を追加して(最初のものは自動的に追加されます)、各属性セットをキャプチャする難読化表現(regex)と、それらを MASK
または HASH
するかどうかを指定します。 Create rule をクリックし、難読化ルールを作成・有効化します。
ナードグラフを使って
logConfigurationsCreateObfuscationRule
mutator under logConfigurations
を使用します。GraphiQLの実装例と、関連ドキュメント api.newrelic.com/graphiql を参照してください。
重要 与えられた難読化アクションにリンクするために、難読化 expressionId
を指定する必要があります。 このidを取得するには、 obfuscationRules
にクエリーをかけます。
難読化ルールを読む 難読化ルールを照会するには、これらのオプションのいずれかを使用します。
ログUIを使用する。
one.newrelic.com > Logs にアクセスし、左のナビから Obfuscation を選択します。
Rules タブ(デフォルト)を選択すると、利用可能なすべての難読化ルールとその定義が表示されます。
ナードグラフを使って
obfuscationRules
fetcher under actor.account.logConfigurations
を使用します。GraphiQL の実装例と、関連ドキュメント api.newrelic.com/graphiql を参照してください。
難読化ルールの更新 難読化ルールを更新するには、これらのオプションのいずれかを使用します。
ログUIを使用する。
one.newrelic.com > Logs にアクセスし、左のナビから Obfuscation を選択します。
Rules タブを選択します(デフォルト)。
編集したい難読化ルールの右側にある3つの点のメニュー ... をクリックし、 Edit をクリックします。
必要に応じてフィールドを変更し、 ルールの更新 をクリックします。
ナードグラフを使って
logConfigurationsUpdateObfuscationRule
mutator under logConfigurations
を使用します。GraphiQLの実装例と、関連ドキュメント api.newrelic.com/graphiql を参照してください。
重要 与えられた難読化アクションにリンクするために、難読化 expressionId
を指定する必要があります。このidを取得するには、[query the obfuscationRules
]](#rules-read)で説明したように、 obfuscationRules
を使用することができます。
難読化ルールを更新する際、すべてのフィールドを指定する必要はなく、 id
(必須) と変更したいフィールドのみを指定します。以下は、 のみを更新する例で、 という名前です。
難読化ルールの削除 難読化ルールを削除するには、これらのオプションのいずれかを使用します。
ログUIを使用する。
one.newrelic.com > Logs にアクセスし、左のナビから Obfuscation を選択します。
Rules タブを選択します(デフォルト)。
削除したい難読化ルールの右側にある3つの点のメニュー ... をクリックし、 削除 ... をクリックします。
Delete をクリックして、式を削除することを確認します。
ナードグラフを使って
logConfigurationsDeleteObfuscationRule
mutator under logConfigurations
を使用してください。GraphiQLの実装例と、関連ドキュメント api.newrelic.com/graphiql を参照してください。
変異は、削除される前のルールのスナップショットを返します。