BreakGlassアカウントによるサインインをメールで通知

皆さんこんにちは。国井です。
先日、お客さんに「BreakGlassアカウントって普段使わないから、もしサインインがあったらわかるようにしたいです」とご意見をいただきました。
そりゃそうだよなと思い、BreakGlassアカウントでAzure ADにサインインしたらアラートのメールが送信されるような仕組みを作ってみることにしました。

BreakGlassアカウントとは
マイクロソフトの公式ドキュメントで「緊急アクセス用管理者アカウント」と紹介されているアカウントで、普段使っている管理者アカウントが使えなくなった時のために予備で用意しておくアカウントのことです。
このアカウントには多要素認証や条件付きアクセスをいっさい設定しないという実装をするため、めちゃ長いパスワードを設定しましょう!というベストプラクティスがあるのですが、それでも不正アクセスは怖いですよね。
だからサインインがあったらメールで通知するように設定したいのです。

実装のアイデア

BreakGlassアカウントでサインインがあったらサインインログに記録されるので、
ログを監視して該当のサインインがあったら管理者にメールを送信という設定をすればよい、というのは誰でも思い浮かぶところだと思います。
しかし、サインインログをMicrosoft Graphで収集し、そこにクエリを実行をして.. というのを定期的に実行するにはハードルが高いのです。
そこで私はLog Analytics(Azure Monitorって言うのが正解?いまだに2つの違いがよくわからない..)を利用することにしました。

ライセンス

サインインログをLog Analyticsで収集する場合、
サインインログをLog Analyticsに転送するためのライセンスとしてAzure AD Premium P1
Log Analyticsにログを保存できるようにするためのライセンスとしてMicrosoft Azure
がそれぞれ必要になります。
うちの会社の場合、小さな会社過ぎて参考にならないかもですが、10名程度のユーザーがサインインする会社で90日ログを保存して50MB程度の保存量でした。

サインインログをLog Analyticsに転送

過去にLog Analyticsにサインインログを転送する方法については解説していますので、こちらを参考にしてください。

BreakGlassアカウントでサインインしたら.. というクエリを作成

AzureポータルからLog Analyticsにアクセスし、[ログ]という項目をクリックすると、
クエリの実行画面に移動できます。Log AnalyticsのクエリはKusto (KQL) と呼ばれるクエリ言語を採用していて、BreakGlassアカウントのサインインをクエリで引っ張ってくる場合、こんな感じに書きます。

SigninLogs
| where Identity contains “breakglass”

ちなみにbreakglassって書いてある部分がユーザー名です。ユーザー名はUPNではなく表示名で書いてください。さらに、このクエリから結果の表示を絞り、サインイン日時、ユーザー名、結果、サインインアプリの4種類だけが表示されるようにカスタマイズしました。

SigninLogs
| where Identity contains “breakglass”
| project TimeGenerated, Identity, ResultType, AppDisplayName

これを実行した結果がこちら。

image

過去のサインインが表示されていることがわかりますね。

アラートの作成

最後にBreakGlassアカウントでサインインがあったら管理者にメールを送信というアラートを作ります。アラートは上の画面にある[新しいアラートルール]と書かれているところをクリックすると作れます。
作成画面を見てみましょう。
まずは[条件]項目。ダミーの条件が入れてあるのでリンクをクリックして..

image

シグナルロジックというのを作成します。
ここでは、アラートロジックに結果の数が1以上だったらという条件を入れます。
次に評価基準では期間1分、頻度1分と設定し、1分ごとに過去1分ぶんのクエリを実行するという基準を定義しました。設定できたら完了をクリックして元の画面に戻りましょう。

image

次に[アクショングループ]項目をクリックして、設定します。

image

ここではアクショングループというのを作るのですが、具体的には送信先となるメールアドレスを定義します。アクショングループの作成をクリックして、以下の画面ショットを参考にメールアドレスを登録しましょう。

image

image

image

image

設定が完了したら、再びアラートルールの作成画面に戻ってきて、あとはメールの件名とアラートルールそのものの名前を適当につけておきます。

image

これで完成です。
では実際にBreakGlassアカウントでサインインしてみましょう。
サインインを行うと、およそ1分ぐらいの後にメールが届くことが確認できます。

image

View 4 resultsって書いてありますけど、この下の画面(画面からは切れて見えないですが)に
クエリの実行結果がそのまま参照できます。

Azure Sentinelでも同じことできますよね?

って思った方は流石です!
ただLog Analyticsに比べるとログそのものが出力されるまでのタイムラグが大きく、即時性という点ではLog Analyticsに軍配が上がるように感じました。やっぱりSentinelだと経由するポイントが多くなる分だけタイムラグが大きくなってしまうのでしょうね。