Azure MonitorでAzure ADを監視

皆さんこんにちは。国井です。

最近、Azure ADのトレーニングの中でログについてご質問をいただくことが多くなってきました。
Azure ADのログはPremiumの契約を結ばないと見られないことや、Premiumの契約があったとしても30日までしか保存されないなど、いろいろ課題があったりします。そこで、マイクロソフトでは次の方法でログのエクスポートをサポートしています。

1.CSVファイルにエクスポートしてローカル?に保存
2.Azure Storageにエクスポートして保存
3.Azure Monitorにエクスポートして参照できるように設定
4.Azure Sentinelにエクスポートして参照できるように設定

この4つのうち、2から4についてはMicrosoft Azureのテナント契約が必要になるので、クラウド上で完結するようにログを残しておきたい、有効活用したいということになれば、おのずとAzureテナントが必要になります。
ただ、Azureは従量課金制で基本料金がない上に、今回使うAzure Monitorの場合は、うちの会社のケースで言うと、ひとり当たり月1円程度のコストなので、取るに足らないものだと思っています。

話をもとに戻しますが、Azureのサービスを利用する2から4のうち、2は保存したデータを参照しずらい、4は(執筆時点では)まだプレビューなので価格がわからない、ということなので、ここでは3のAzure Monitorを使った方法を紹介します。

Azure ADとAzure Monitorの連携

Azure管理ポータル画面のAzure ADから[サインイン]ログを開いて[データ設定のエクスポート]をクリックします。診断設定画面が表示されたら、[診断設定を追加する]をクリックしてAzureとの連携を行います。

image

このとき、注意したいことが2つ。
Azure ADとAzureの連携設定は、Azure ADディレクトリのユーザー全員がPremiumユーザーであること、そしてAzureのテナントはAzure ADユーザーによって取得されたテナントを持っていることが前提になります。
もし、この時点でAzureテナントを持っていない場合は、画面にAzureテナントの取得を促す画面が出てくるので、その指示に従って取得しておいてください。

以上の条件をクリアしていると、こんな感じでAzureとの連携設定画面が登場します。

image

このとき、
[ストレージアカウントへのアーカイブ]を選択すれば、Azure Storageへのエクスポート
[イベントハブへのストリーム]を選択すれば、Azure Sentinelへのエクスポート
[Log Analytics]を選択すれば、Azure Monitorへのエクスポート
になります。
これらは排他的なものではないので、複数のサービスを同時に使うことも可能です。
また、画面下のところでは、AuditLogsとSigninLogsがありますが、サインインのログを収集する場合であればSigninLogsにチェックをつけておいてください。

では今回は、[Log Analytics]と[SigninLogs]にチェックをつけて先へ進めます。
と、言いたいのですが、Log Analyticsを利用する場合、Log Analyticsワークスペースを先に作成しておく必要があります。
Azure管理ポータル画面で、事前にLog Analyticsワークスペースを作成しておいてください。
image

[保存]をクリックすれば、設定は出来上がりです。しばらくすると、Azure Monitorにログがエクスポートされ、クエリを実行できるようになります。

Azure MonitorでのAzure ADログへのクエリ

ここからはAzure Monitorのブレードにアクセスして操作します。
前に作成しtらLog Analyticsワークスペースにアクセスし、ブレードから[ログ]をクリックします。
すると、Microsoft Defender ATPでもお世話になったクエリ画面が出てきます。

image

条件を設定せずに、すべてのログを参照したいときは「search *」と書いて実行してください。

【クエリ例】7日以内のサインインログを表示

サインインログを指定した検索は1行目にSigninLogsと書き、2行目以降にwhereなどの条件を入力します。

SigninLogs
| where CreatedDateTime >= ago(7d)

image

【クエリ例】特定のアプリにアクセスしたログを表示

アプリへのアクセスはAppDisplayNameで指定します。ちなみに、AppDisplayName以外に利用可能な項目(スキーマ)は画面左側のSigninLogsを展開すれば確認できます。

SigninLogs
| where AppDisplayName == "Office 365 Exchange Online"

image

【クエリ例】アクセスしたアプリを回数順に表示

summarize句を使えば、アプリの名前をアクセス回数にして集約できます。それをsort by句で降順表示します。

SigninLogs
| summarize signInCount = count() by AppDisplayName
| sort by signInCount desc

image

ちなみに最終行に「| render barchart」の文字列を追加すれば棒グラフにできます。

image

今回は省略しますが、ログ画面の右上にある[新しいアラートルール]をクリックすると、
あらかじめ指定したクエリに合致するログが生成されると、自動的に管理者にメールを送るなどのアラート設定もできるようになっています。

ここまで簡単にログに対するクエリの実行方法を紹介しましたが、こんなクエリが欲しいなどのご意見があれば一緒に考えてみたいと思っています。