見出し画像

AzureADの障害と言われたらとりあえず叩くLogAnalyticsクエリ


結論

3日間以内でのログインに対する成功・失敗(担当アプリに限定してもよい)を1時間毎にグラフ化するクエリを常に懐に忍ばせています。
結構便利。
前提としてAzureADサインインログをLogAnalyticsに転送しておく必要があります。

▼こちらがその忍ばせているクエリ

SigninLogs
| where TimeGenerated > now(-3d)
| where AppDisplayName == "アプリ名" or AppDisplayName == "アプリ名"
|summarize ResultCount=count() by ResultType,bin(TimeGenerated, 1h)

上記を実行すると、以下のようなグラフを手に入れることができます。
0(成功)や0以外(失敗)のコードでカウントを集計し棒グラフにしています。

出力結果(グラフ)

これを見ることで、障害が起きているという怪情報が飛び交う今時点と、
昨日、一昨日の同じ時間帯と比較して認証の失敗が増えているか否か?
といった情報が確認できます。

何か特別なエラーコードが急増しているようであれば、それは何かが起こっているということ。
※エラーコードに関する情報はこちらにまとまっています。

※2023.03.02追記
検索もとにしているテーブルの「SignInLogs」は、「対話型サインインログ」です。
AzureAD上には非対話型のサインインログも出力されていて、そちらは「AADNonInteractiveUserSignInLogs」というテーブルで管理されています。
ユーザーに表示されずエラーになっている場合は、「AADNonInteractiveUserSignInLogs」にエラーが出力されています。

▼MSドキュメント
https://learn.microsoft.com/ja-jp/azure/azure-monitor/reference/tables/aadnoninteractiveusersigninlogs

自分が関わる環境は非対話型のサインインログはLogAnalyticsに取り込んでいないため、前述のクエリは使えず、GUIでぽちぽち見てみるくらいしかできないです。
こちらの非対話型のログは容量大きくて安易にLogAnalyticsに取り込めない・・(課金がかさみます)
※2023.03.02追記 ここまで

解説

難しい内容のクエリではないので少しだけ解説します。

そもそもLogAnalyticsとは何ぞや的な話は、ほかの皆さんがたくさん記事を上げられているので割愛します。

また、クエリのチートシート的な内容はこちらのサイトを参照しました。
感謝。

クエリ再掲

SigninLogs
| where TimeGenerated > now(-3d)
| where AppDisplayName == "アプリ名" or AppDisplayName == "アプリ名"
|summarize ResultCount=count() by ResultType,bin(TimeGenerated, 1h)

SigninLogs
→サインインログから抽出する

| where TimeGenerated > now(-3d)
→今から3日間以内に取り込まれたログを対象にする

| where AppDisplayName == "アプリ名" or AppDisplayName == "アプリ名"
→このアプリの表示名のログで

|summarize ResultCount=count() by ResultType,bin(TimeGenerated, 1h)
→ResultTypeの数を1時間ごとに集約して数を数え、ResultCountという項目にする

このクエリを使う理由

自分が担当するAzureADには、それなりのユーザーがいて、サインインログもそれなりの量が出力される。
普段から成功のログも、そして失敗の状態のログも出力されている。

そんな中AzureADの障害が発生し、
認証機能に影響がないか確認して!と言われたときに、
ログを眺めるだけでは、いつも通りの失敗ログ量なのか否か、もはや人の目では判別不可能。

幸いなことに、担当するAzureADではLogAnalyticsにログを転送しているため、通常のAzureADの管理画面よりも柔軟な抽出をすることができます。

そこで障害が起きているという怪情報が飛び交う今時点と、
昨日、一昨日の同じ時間帯と比較して認証の失敗が増えているか否か?
といった情報を確認できるようなクエリを整理、

上司:「またAzure障害だよ・・認証に影響がないか確認して!」
自分:「だめです、いつも出ているエラーとは異なるコードの認証エラーが多発してます」
とか
自分「大丈夫そうです、エラーは出てますが、いつもより極端に増加はしていないように見えます」

と回答ができるようになりました。

おまけ・備忘

ログをみると、「50140」のエラーコードが多く出力されていました。
このコードを調べてみると、以下の通りで、サインイン時によく出てくる「サインインしたままにする」ポップアップが出るときに当てはまる内容の模様。

AADSTS50140 KmsiInterrupt - ユーザーがサインインしたときの "サインインしたままにする" 割り込みによりエラーが発生しました。 これはログイン フローの予想される部分であり、以降のログインが容易になるように現在のブラウザーにサインインしたままにするかユーザーに確認しています

https://learn.microsoft.com/ja-jp/azure/active-directory/develop/reference-aadsts-error-codes

キャッシュを残さない設定になっていると、都度確認されるため、こんなに多くログとして出力されているのだろうか。

この記事が気に入ったらサポートをしてみませんか?