VisasQ Dev Blog

ビザスク開発ブログ

Auth0 と Mixpanel を連携して簡易エラー通知を実現する

こんにちは、ビザスク開発グループ クライアント開発チームの松下です。

直近で大きめのリニューアルプロジェクトを完遂し、その中で Auth0 と Mixpanel の連携について知見を得たのでブログ記事にしてみます。

Auth0 とは

認証プラットフォームの IDaaS です。

ビザスクでは認証基盤として Auth0 の導入を全社的に進めています。

Mixpanel とは

プロダクト内のユーザの行動が分析できる SaaS です。

こちらもビザスクでは広く活用されているツールになります。

やりたいこと

Auth0 には連続でログインに失敗したときにユーザをブロック状態にさせる Brute-Force Protection 機能があります。

Brute-force Protection

デフォルトでは 10 回連続でログインに失敗するとブロックされます。(もちろんこの機能をオフにすることもできます)

新しくリニューアルしたプロダクトのため、悪意のあるアクセスでなくても不慣れなユーザがパスワードの入力に連続で失敗し、ブロックされてしまう可能性が考えられます。

ブロックされるとユーザ自身でブロック解除するための確認メールが Auth0 から送信されますが、ブロックを検知したら社内の Slack に通知されるとユーザへのフォロー含めた運用に役立てられると考えました。

Auth0 のイベントログについて

Auth0 で発生したログデータはダッシュボードの Monitoring > Logs から確認できます。

Auth0 Logs

ひとつひとつのログは以下のように "type" を持っています。

{
  "date": "2023-10-13T02:08:33.137Z",
  "type": "limit_wc",
  "description": "User (*****@visasq.com) attempted 10 consecutive logins unsuccessfully. Brute force protection is enabled for this connection, further attempts are blocked from this IP address for this user.",
  ...略
}

この "type" は Log Event Type Code に一覧としてまとめられており、 limit_wc は ブロックされたときに発生するイベントであることがわかります。

An IP address is blocked because it reached the maximum failed login attempts into a single account.

このイベントを集計なり発生時に通知なりしてあげれば良さそうです。

Auth0 Log Streams について

Auth0 には Log を外部サービスに配信するための機能があります。それが Log Streams です。

Auth0 Log Streams

Amazon Event Bridge や Azure Event Grid と連携すれば、Auth0 のイベントログを自社のログ基盤ストレージに保存したり、特定のイベントをフィルタリングしたりカスタムロジックを実行したりと様々な活用法が考えられます。

今回やりたいことは特定のイベントが発生した際の Slack 通知です。

Log Streams には Custom Webhook による Slack 連携という選択肢もありますが、通知用の API を自作する必要があります。

なるべくコードを書かずに楽できないかと調べたところ、Mixpanel には異常値を伝えるためのカスタムアラート機能があり、Slack 通知も可能なのでそちらとの連携を試してみることにしました。

Auth0 と Mixpanel を連携する

Monitoring > Streams > Create Stream から Mixpanel を選択し、各項目を入力します。

Auth0 Mixpanel

Service Account は予め Mixpanel 側で発行しておきます。

Filter by Event Category では Mixpanel に流すイベントログをある程度フィルタリングすることができます。

内容保存後、Health が Active になれば連携がうまくいった証拠です。

Mixpanel 側の Events を確認すると、Auth0 のイベントログが流れていることがわかります。

Mixpanel Events

Mixpanel でアラート設定をおこなう

まずは Mixpanel でレポートを作成します。ユーザがブロックされると limit_wc イベントが発生するので、そちらをメトリクスに指定します。

Mixpanel Report

そこからアラートを以下のように作成します。

Mixpanel Custom Alert

1 件でも発生したら通知してほしいので、閾値is above 0 に、通知頻度は Hour(一時間おき)にしています。

via Slack から通知してほしい Slack チャンネルを選択します。(事前に Mixpanel と Slack の連携を許可しておく必要があります)

これで、イベントが発生して暫く経つと Slack に通知が飛ぶようになりました!

Slack 通知

終わりに

今回作成した通知はリアルタイム性はそれほどありませんが、要件的には十分でした。なによりコードを一切書かずに実現できたので大幅な工数削減になりました。

また、Mixpanel に Auth0 のイベントを流せたことによって、ユーザの行動分析にも活用できそうです。(本来の使い方はそっちですが...)

今回紹介した Auth0 や Mixpanel 以外にビザスクで利用しているツール / 技術スタックは 採用ページ のスライドにも紹介されています。

興味を持たれた方はぜひカジュアル面談でお話しましょう!