演習 - ログ データから情報を抽出するための基本的な Azure Monitor ログ クエリを作成する

完了

現在、オペレーション チームには、問題を効果的に診断および解決するための、システム動作に関する十分な情報がありません。 この問題に対処するために、チームでは会社の Azure サービスを使用して Azure Monitor ワークスペースを構成しました。 Kusto クエリを実行してシステムの状態を取得し、発生する可能性のある問題の原因の特定を試みます。

特に、チームは、システムに侵入しようとした可能性のある試みがないか確認するために、セキュリティ イベントを監視することに関心があります。 攻撃者がシステムで実行されているアプリケーションの操作を試みる可能性があるため、チームではアプリケーション データを収集し、さらに分析する必要もあります。 攻撃者は、システムを構成するコンピューターの停止を試みる可能性があります。そのため、チームはマシンの停止と再起動の方法とタイミングを確認したいと考えています。

この演習では、テーブル、ログ、およびクエリにサンプル データが含まれているデモ プロジェクトに対して Azure ログ クエリを実行する方法を練習します。

ログ データから情報を抽出するための基本的な Azure Monitor ログ クエリを作成する

[Azure Demo Logs](Azure デモ ログ) ペインを使用して、クエリの記述方法を練習しましょう。 デモ プロジェクト ワークスペースには、サンプル データがあらかじめ設定されています。 Azure では、KQL (Kusto クエリ言語) と呼ばれる言語でデータを視覚化するオプションを使用して、SQL のような最適化されたクエリを提供しています。

  1. ログ デモ環境を開きます。 左上隅の [新しいクエリ 1] の下に、クエリのワークスペース (またはスコープ) を示す [デモ] があります。 このペインの左側には、いくつかのタブ ([テーブル][クエリ][関数]) があります。 右側には、クエリを作成または編集するためのするスクラッチパッドがあります。

  2. [新しいクエリ 1] タブで、スクラッチパッドの最初の行に基本的なクエリを入力します。 このクエリでは、最新の 10 個のセキュリティ イベントについて詳細を取得します。

    SecurityEvent
        | take 10
    
  3. コマンド バーで [実行] を選びます。クエリが実行されて結果が表示されます。 詳細については、[結果] ペインの各行を展開してください。

  4. クエリにフィルターを追加して、データを時間で並べ替えます。

    SecurityEvent
        | top 10 by TimeGenerated
    
  5. フィルター句と時間の範囲を追加します。 次のクエリを実行して、30 分以上経過し、レベルが 10 以上のレコードをフェッチします。

    SecurityEvent
        | where TimeGenerated < ago(30m)
        | where toint(Level) >= 10
    
  6. 次のクエリを実行して、AppEvents テーブルで、過去 24 時間に呼び出された Clicked Schedule Button イベントのレコードを検索します。

    AppEvents 
        | where TimeGenerated > ago(24h)
        | where Name == "Clicked Schedule Button"
    
  7. 次のクエリを実行して、過去 3 週間に、毎週ハートビート イベントを生成したさまざまなコンピューターの数を表示します。 結果が横棒グラフとして表示されます。

    Heartbeat
        | where TimeGenerated >= startofweek(ago(21d))
        | summarize dcount(Computer) by endofweek(TimeGenerated) | render barchart kind=default
    

定義済みの Azure ログ クエリを使用してログ データから情報を抽出する

運用チームは、クエリを最初から作成するだけでなく、リソースの正常性、可用性、使用状況、パフォーマンスに関する一般的な質問に答える、Azure ログの定義済みクエリを利用することもできます。

  1. コマンド バーで [時間の範囲] パラメーターを使用して、カスタム範囲を設定します。 1 月から今日までの範囲となるように、月、年、および日を選択します。 任意のクエリに対して、カスタム時間を設定して適用することができます。

  2. 左側のツール バーで、[クエリ] を選択します。 左側のメニューのドロップダウン リストで、"カテゴリ"、"クエリの種類"、"リソースの種類"、"ソリューション"、"トピック" ごとにグループ化されたサンプル クエリのリストを確認できます。

    作業ウィンドウ内の [クエリ] タブの [グループ化] ドロップダウン オプションのスクリーンショット。

  3. ドロップダウン リストから [カテゴリ] を選択し、次に [IT と管理ツール] を選択します。

  4. 検索ボックスに、「コンピューター間で明らかに欠落している更新プログラム」と入力します。 左側のペインでクエリをダブルクリックし、次に [実行] を選択します。 [ログ] ペインが再び表示され、ワークスペースにログを送信している仮想マシンから欠落している Windows 更新プログラムの一覧がクエリにより返されます。

    Note

    この同じクエリを [ログ] ペインから実行することもできます。 左側のペインで [クエリ] タブを選んでから、[グループ化] ドロップダウン リストで [カテゴリ] を選びます。 次に、一覧を下にスクロールし、[IT と管理ツール] を展開して、[コンピューターのインストールされていない個別の更新プログラム] をダブルクリックしてください。 [実行] を選択して、クエリを実行します。 左側のペインで定義済みのクエリを選択すると、そのクエリ コードが、スクラッチパッド内に存在するクエリに追加されます。 実行する新しいクエリを開いたり、追加したりする場合は、その前に必ずスクラッチパッドをクリアしてください。

  5. 左側のペインで、検索ボックスをクリアします。 [クエリ] を選択してから、[グループ化] ドロップダウン リストで [カテゴリ] を選択します。 [Azure Monitor] を展開し、[今日のコンピューターの可用性] をダブルクリックします。 [実行] を選択します。 このクエリを実行すると、前日 1 時間ごとにログをワークスペースに送信した一意の IP アドレスの数を示す時系列グラフが作成されます。

  6. [グループ化] ドロップダウン リストで [トピック] を選び、下にスクロールして [関数アプリ] を展開してから、[Show application logs from Function Apps] (関数アプリからアプリケーション ログを表示する) をダブルクリックします。 [実行] を選択します。 このクエリからは、アプリケーション ログの一覧 (時間順に並べ替えられ、最新のログが最初に表示される) が返されます。

ここで使用した Kusto クエリから、特定の時間枠、イベント レベル、またはイベント ログの種類をクエリのターゲットに設定するのが簡単であることがわかります。 セキュリティ チームは、簡単にハートビートを調べ、サーバーがいつ使用できなくなったかを特定できます。これは、サービス拒否攻撃を示している可能性があります。 サーバーが使用不能になる時間をチームが見つけた場合、セキュリティ ログでその時間辺りのイベントのクエリを実行して、中断の原因が攻撃かどうかを診断することができます。 さらに、事前定義されたクエリにより、VM の可用性を評価したり、欠落している Windows 更新プログラムを特定したり、ファイアウォール ログを確認したりすることで、目的の VM を対象として拒否されたネットワーク フローを表示することもできます。