New Relic OneでAuth0テナントからのデータを可視化するダッシュボードを作り終わった

2020.11.17

以前、Auth0のログをAmazon EventBrigde経由でNew Relicに送信するというブログを書きました。

上記ブログではログインに成功したログのみをNew Relicに送信していましたが、今回は全てのイベントを送信し、グラフなどで可視化するダッシュボードを作ることにチャレンジしてみます。

現在Auth0ではDatadogとSplunkで脅威検出の視覚化と監視ができるインテグレーションを提供しているようです。

Datadogと同じようなダッシュボードを作っていきます。

やってみる

前提

  • Auth0のStreamsの設定済み
  • AWS EventBrigdeの設定済み

前述のブログの環境を少し変更します。

AWS EventBrigdeでイベントパターンを修正

全てのイベントを対象にします。

Auth0ダッシュボードのEventBrigde設定のEvent Source Nameをコピーして、イベントパターンのsourceに指定します。 これで全てのAuth0イベントがEventBrigde経由でNew Relic Logsに流れます。

{
  "source": [
    "aws.partner/auth0.com/****"
  ]
}

New Relicでダッシュボードを作成する

New Relic(one.newrelic.com)にログインし、DashboardsページのCreate a Dashboarをクリックして作成します。

任意の名前を入力して作成すると、上記の様に空っぽのダッシュボードが作成されます。

New Relicでダッシュボードにグラフを追加

New Relic Logsをクエリしてグラフを作っていきます。

Add a new chart, Add a chartをクリックします。

Data typeEventsにし、View a chart widhでどこからデータを取得するか決定していきます。

もしくは、NRQLというクエリ言語を用いて作成することも可能です。 今回はこれを使っていきます。

ログイン成功

テナントの成功したログインイベントの数を表示します。

グラフの名前、Chart TypeをLineにし、 NRQLクエリを以下のように記述し、Runボタンを押すとグラフが表示されます。

SELECT count(data.type) FROM Log FACET `data.type` 
WHERE data.type in ('s','scoa','sens') 
LIMIT 10 SINCE 3600 seconds ago 
TIMESERIES 5 minute

data.typeというプロパティにイベントタイプの種類が格納されているので、ログイン成功時のタイプに絞って件数を取得します。

Auth0のドキュメントのログイベントタイプコードから、ログイン成功イベントのタイプを探します。

このグラフでは、

  • s: ログイン成功
  • scoa: クロスオリジン認証の成功
  • sens: ネイティブソーシャルログインの成功

に絞っています。

Saveボタンを押すとダッシュボードに追加されます。

他のイベントを視覚化する場合、同じことを繰り返していきます。

ログイン失敗

テナントの失敗したログインイベントの数を表示します。ログイン失敗の急増は、異常なトラフィックのシグナルである可能性があります。

NRQL

SELECT count(data.type) FROM Log FACET `data.type` 
WHERE data.type in ('fu','fp') 
LIMIT 10 SINCE 3600 seconds ago 
TIMESERIES 5 minute

IPアドレスによるログインの失敗

地理位置情報ごとのテナントの失敗したログインイベントの数を表示します。特定の地域での予期しないトラフィックの急増は、異常なトラフィックのシグナルである可能性があります。

NRQL

SELECT count(data.type) FROM Log FACET data.ip
WHERE data.type in ('fu','fp') 
LIMIT 10 SINCE 3600 seconds ago 
TIMESERIES 5 minute

トラフィックを送信する一意のIPの数

トラフィックを送信するIPの数は、地理位置情報によって予測可能なトラフィックパターンに従う必要があります。スパイクは、プロモーションキャンペーンによる追加のトラフィックを表す可能性がありますが、スパイクは異常なトラフィックの兆候である可能性もあります。

NRQL

SELECT count(data.ip) FROM Log FACET data.ip
WHERE data.type in ('s' , 'scoa' , 'sens' , 'fp' , 'fu') 
LIMIT 10 SINCE 3600 seconds ago 
TIMESERIES 5 minute

障害のある上位5つのIP

単一のIPからの多数の障害は、ログインフローの異常なトラフィックを示す可能性があります。

NRQL

SELECT count(data.ip) FROM Log FACET data.ip
WHERE data.type in ('fp' , 'fu') 
LIMIT 5 SINCE 3600 seconds ago

アカウント作成イベント

テナントの作成されたアカウント作成イベントの数を表示します。

NRQL

SELECT count(data.ip) FROM Log FACET data.type
WHERE data.type in ('ss','fs') 
SINCE 3600 seconds ago TIMESERIES 1 minute

ユーザーエージェント別のアカウント作成イベント

特定のユーザーエージェント(safari,chorome,firefox,botなど)からのトラフィックの急増は、異常なトラフィックの診断に役立ちます。

NRQL

SELECT count(data.user_agent) FROM Log FACET data.user_agent
WHERE data.type in ('ss','fs') 
LIMIT 10 SINCE 3600 seconds ago TIMESERIES 1 minute

アカウントが作成されたIP

単一のIPから作成された多数のアカウントは、ログインフローへの攻撃を示す可能性があります。

NRQL

SELECT count(data.ip) FROM Log FACET data.ip
WHERE data.type in ('ss') 
LIMIT 10 SINCE 3600 seconds ago TIMESERIES 1 minute

異常検出イベント

Auth0の異常検出機能によってトリガーされるイベント

  • limit_wc: ブロックされたIPアドレス(単一のアカウントが失敗)
  • limit_mu: ブロックされたIPアドレス(複数のアカウントが失敗)
  • pwd_leak: パスワード違反が検出

NRQL

SELECT count(data.ip) FROM Log FACET data.type
WHERE data.type in ('limit_wc','limit_mu','pwd_leak') 
LIMIT 10 SINCE 3600 seconds ago TIMESERIES 1 minute

異常検出イベントを伴うIP

最も異常なトラフィックをトリガーするIPアドレス。限られた数のIPからの異常検出イベントの急増は、攻撃の兆候となる可能性があります。

NRQL

SELECT count(data.ip) FROM Log FACET data.type
WHERE data.type in ('limit_wc','limit_mu','pwd_leak') 
LIMIT 10 SINCE 3600 seconds ago TIMESERIES 1 minute

サンプルダッシュボードの確認

ダッシュボードをPDFでエクスポートしたものを以下のURLで確認できます。

https://gorgon.nr-assets.net/image/4f8a86f3-a689-40cc-ac8c-06a150fb7ad6?format=pdf

今回できなかったこと

Datadogでは地理位置情報(国、地域など)でデータをグラフ化できていましたが、New Relicでそのような情報を出す方法がわからなかったのでIPアドレス別で出しました。

最後に

Auth0のログをNew Relic Logsに送信し、そのデータを元に可視化してみました。 Auth0とNew Relicを使っているかたはクエリを変更するなどを試し、データの可視化を行ってみてください。

Auth0公式で対応してくれたらいいのにというのは内緒です。