こんにちは、ビザスク開発グループ クライアント開発チームの松下です。
直近で大きめのリニューアルプロジェクトを完遂し、その中で Auth0 と Mixpanel の連携について知見を得たのでブログ記事にしてみます。
Auth0 とは
認証プラットフォームの IDaaS です。
ビザスクでは認証基盤として Auth0 の導入を全社的に進めています。
Mixpanel とは
プロダクト内のユーザの行動が分析できる SaaS です。
こちらもビザスクでは広く活用されているツールになります。
やりたいこと
Auth0 には連続でログインに失敗したときにユーザをブロック状態にさせる Brute-Force Protection 機能があります。
デフォルトでは 10 回連続でログインに失敗するとブロックされます。(もちろんこの機能をオフにすることもできます)
新しくリニューアルしたプロダクトのため、悪意のあるアクセスでなくても不慣れなユーザがパスワードの入力に連続で失敗し、ブロックされてしまう可能性が考えられます。
ブロックされるとユーザ自身でブロック解除するための確認メールが Auth0 から送信されますが、ブロックを検知したら社内の Slack に通知されるとユーザへのフォロー含めた運用に役立てられると考えました。
Auth0 のイベントログについて
Auth0 で発生したログデータはダッシュボードの Monitoring > 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 です。
Amazon Event Bridge や Azure Event Grid と連携すれば、Auth0 のイベントログを自社のログ基盤ストレージに保存したり、特定のイベントをフィルタリングしたりカスタムロジックを実行したりと様々な活用法が考えられます。
今回やりたいことは特定のイベントが発生した際の Slack 通知です。
Log Streams には Custom Webhook による Slack 連携という選択肢もありますが、通知用の API を自作する必要があります。
なるべくコードを書かずに楽できないかと調べたところ、Mixpanel には異常値を伝えるためのカスタムアラート機能があり、Slack 通知も可能なのでそちらとの連携を試してみることにしました。
Auth0 と Mixpanel を連携する
Monitoring > Streams > Create Stream
から Mixpanel を選択し、各項目を入力します。
Service Account は予め Mixpanel 側で発行しておきます。
Filter by Event Category では Mixpanel に流すイベントログをある程度フィルタリングすることができます。
内容保存後、Health が Active になれば連携がうまくいった証拠です。
Mixpanel 側の Events を確認すると、Auth0 のイベントログが流れていることがわかります。
Mixpanel でアラート設定をおこなう
まずは Mixpanel でレポートを作成します。ユーザがブロックされると limit_wc
イベントが発生するので、そちらをメトリクスに指定します。
そこからアラートを以下のように作成します。
1 件でも発生したら通知してほしいので、閾値は is above 0
に、通知頻度は Hour
(一時間おき)にしています。
via Slack から通知してほしい Slack チャンネルを選択します。(事前に Mixpanel と Slack の連携を許可しておく必要があります)
これで、イベントが発生して暫く経つと Slack に通知が飛ぶようになりました!
終わりに
今回作成した通知はリアルタイム性はそれほどありませんが、要件的には十分でした。なによりコードを一切書かずに実現できたので大幅な工数削減になりました。
また、Mixpanel に Auth0 のイベントを流せたことによって、ユーザの行動分析にも活用できそうです。(本来の使い方はそっちですが...)
今回紹介した Auth0 や Mixpanel 以外にビザスクで利用しているツール / 技術スタックは 採用ページ のスライドにも紹介されています。
興味を持たれた方はぜひカジュアル面談でお話しましょう!