👋

[Azure]高権限ユーザのサインインを検知する

2022/02/02に公開

はじめに

Azureに限らず、クラウドサービスを使うと、セキュリティ周りの設定については各所からかなり脅されます。
「初めにやるべきこと」みたいなワードでググると、あれをやれ、これをやらないと危険。そんな言葉が躍ります。
さて今日はそんな設定の中の一つ「高権限ユーザのサインインを検知する」をテーマに書いていきます。

横に目を向けると、AWSでは「ルートユーザが使われたら気づけるようにしましょう」ということで、古くはCloudTrail->CloudwatchLogs->アラームだったり、今ならEventBridgeやSNSを組み合わせて通知する方法をいろんな方が紹介してくれています。

Azureでも同じことをやった方がイイと思うのですが、初歩的過ぎて(?)こんな情報はあまり見当たりません。ということで今日はこのテーマです。

やること

Azure(というより、AzureAD)のサインインログから、特定のユーザーのものを検知して通知する一連の設定を記載していきます。

通知対象ユーザの選定

AzureにはAWSのように「ルートユーザ」という固定の高権限ユーザーが居ません。通知対象のユーザはまず検討する必要があります。
まずは最高権限を持っているユーザということで、

  • AzureAD:グローバル管理者
  • サブスクリプション:所有者
    のロールを割り当てているユーザーをそれぞれリストアップしてみましょう。

一般的には、「様々なリソースを作成できる権限」あるいは「この設定を変更するとセキュリティ的に危なくなる、というリソースを更新できる権限」などを持っているユーザー「高権限」と扱うことが多いと思います。あとは「権限設定を弄れるユーザ」も高権限とすることが多いですね。

環境構築

それでは、通知のための設定を作っていきます。

Log Analyticsワークスペースの作成

まず、サインインログを保管する箱を作ります。「Log Analytics」です。
サービス自体の詳細は公式ドキュメントへ。
https://docs.microsoft.com/ja-jp/azure/azure-monitor/logs/log-analytics-overview

特に難しい設定などありませんので、作成手順は省略します。

Azure ADからのログ出力設定

Azure ADのサインインログを、上記のLog Analyticsに出力する設定を行います。
Azure AD>監視>診断設定より、出力対象のログと出力先を設定して保存します。

対象ログ

「SigninLogs」が必須ですが、後々のことを考えて「AuditLogs」も指定します。

出力先

先ほど作成した、LogAnalyticsを指定するだけです。特に工夫するところはありません。
なお、今回のテーマとは関係なくないですが、この手のログはストレージアカウントにも出力して保管しておくことが一般的かと思います。

アラートの作成

事前確認

Log Analytics>ログ より、下記画面でクエリを試します。

クエリ文、検索期間をを入力し、「▷実行」ボタンを押してみます。

SigninLogs
| where UserPrincipalName == xxxxxx@xxxxxx.onmicrosoft.com"

正しくログ出力できていれば、画面下の「結果」ペインに対象のログが検出されます。

アラートルールの作成

検索条件に問題ないことを確認したら、「+新しいアラートルール」ボタンを押下します。

スコープや条件が設定された状態で、作成画面に遷移します。
画面の設定だと、
① 5分のログから、クエリに合致するログを集計(カウント)する
② ①が"ゼロよりも大きい場合"アラートする
③ 5分に1度評価する
というルールになっています。
チェック頻度により、Azureの利用料が変わってきますので、必要十分な頻度で設定しましょう。

アクションの作成

アラートが発生した場合に、どのような動作をさせるか設定することができます。
LogicAppなどを呼び出してカスタマイズされた動作をさせることも可能ですが、今回は「サインインを検知する」ということですので、メールで通知をするアクションを設定します。

はじめて設定する場合は「アクショングループの作成」から。過去に設定したことがある場合は「アクショングループの追加」から、通知先や通知方法の定義を設定します。(内容は簡単なので、割愛。)

入力が全て終わったら、「確認および作成」タブから保存します。

テスト

設定が終わったのでテストしてみます。先ほどクエリ文に記載したユーザーでサインインします。

しばらく待つと、azure-noreply@microsoft.comより、メールが通知されました。

なお、AzureADからログが診断設定経由でExportされる時間+アラート設定のクエリ頻度による時間で、それなりに通知まで時間がかかります。感覚的には、早ければ5分くらいですが、15分くらいかかる時もあります。
リアルタイム性をもって検知するというよりは、後からでも高権限ユーザを使われたことに気づけるという意味合いが強いですね。

おわりに

以上が「高権限アカウントのサインインを検知する」設定でした。
現在は、「MFAを設定していればアカウントが侵害されることはまずない」と言われており、「内部ユーザーの高権限使用はPIMで管理する」が一般的になっていていますので、なかなかこの「検知」の出番は減っているとは思います。とはいえクラウドは多層防御が基本になりますので、複数観点で守れるようにしておきましょう。

Discussion