Logstash で Azure Sentinel (Azure Log Analytics) にデータを格納する


本記事について

Azure Sentinel は Microsoft Azure の一サービスで、SIEM や SOAR の機能をマネージドサービスとして利用することができます。Azure Sentinel には様々なコネクターやサーバー用のエージェントが用意されており、大半のログソースから簡単にデータを取得できます。

一方で、コネクターがない際やログ格納の前にフィルタリングやエンリッチメントを行いたい際には、Logstash を活用することができます。本記事では、こちらの公式ドキュメントを基に、実際にログを格納していきます。

準備

Logstash 用のサーバーの作成

今回は Azure IaaS 上の仮想マシンを利用します。Ubuntu OS で一台 Linux のマシンを使います。

Logstash のインストール

まず、Javaのバージョンを確認し、openjdk8をインストール・バージョン変更します。

sudo apt install openjdk-8-jdk

次に、LogStash のインストールを行います。

Log Analytics 用の出力プラグインが、Logstash のバージョン7以上しか対応していないため、必ず7以上が入るように設定します。

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Logstash をインストールします。

sudo apt update
sudo apt install logstash

Logstash のプラグインのインストール

logstash のインストール先のディレクトリに移動し、Log Analytics (Sentinel) 用の出力プラグインである、microsoft-logstash-output-azure-loganalytics をインストールします。

cd /usr/share/logstash/bin
sudo ./logstash-plugin install microsoft-logstash-output-azure-loganalytics

これにて準備は完了です。

ログの格納と検索

ログの格納

今回は下記のようなCSVファイルで試してみます。これをログを格納するディレクトリに置きます。
(今回は、/home/yoshiakioi/logを使います。)

signin.csv
"TimeGenerated [UTC]",Identity,Location,AppDisplayName,ClientAppUsed
"6/16/2021, 1:12:53.754 PM","Traveler Account",RU,"Microsoft Azure PowerShell","Mobile Apps and Desktop clients"
"6/16/2021, 1:12:53.301 PM","Traveler Account",RU,"Microsoft Azure PowerShell","Mobile Apps and Desktop clients"
"6/16/2021, 1:10:47.192 PM","Gershon Local",IL,"Azure Advanced Threat Protection",Browser
"6/16/2021, 1:10:05.376 PM","Anand Kumar",IN,"Azure Portal",Browser
"6/16/2021, 1:08:29.846 PM","Arseny Vasilev",RU,"Azure Portal",Browser
"6/16/2021, 1:08:10.688 PM","Arseny Vasilev",RU,"Azure Portal",Browser
"6/16/2021, 1:07:40.785 PM","Arseny Vasilev",RU,"Azure Portal",Browser
"6/16/2021, 1:07:34.655 PM","Gopakumar G",IN,"Azure Portal",Browser
"6/16/2021, 1:03:14.627 PM","Arseny Vasilev",RU,"Azure Portal",Browser
"6/16/2021, 1:02:18.634 PM","Arseny Vasilev",RU,"Azure Portal",Browser

次にコンフィグファイルを用意します。your workspace id と your workspace key にはそれぞれ、Log Analytics ワークスペースの ID とキーを入れてください。

singin.conf
input {
    file {
        path => ["/home/yoshiakioi/log/*.csv"]
        sincedb_path => "/home/yoshiakioi/log/sincedb"
        start_position => "beginning"
        codec => plain { 
            charset => "UTF-8"
        }
    }
}
filter {
    csv {
        columns => ["TimeGenerated", "Identity", "Location","AppDisplayName", "ClientAppUsed"]
        skip_header => true
    }
}
output {
    microsoft-logstash-output-azure-loganalytics {
        workspace_id => "<your workspace id>" # <your workspace id>
        workspace_key => "<your workspace key>" # <your workspace key>
        custom_log_table_name => "LogStash_Signin_Test"
    }
}

そして、このコンフィグファイルを使って、Logstashを起動します。

sudo /usr/share/logstash/bin/logstash -f /home/yoshiakioi/signin.conf

以上で、Linux マシン側の作業は終了です。

ログの検索

Logstashの起動後数分待つと、Log Analytics ワークスペースのカスタムログに指定されたテーブル名のスキーマが新たに追加されます。Logstash の Log Analytics のプラグインは内部的には Azure Monitor Data Collector APIを利用しています。そのため、事前に Log Analytics ワークスペース側でスキーマなどの設定を行うことなく、自動的にカスタムログとしてテーブルが作成されます。

上記のcsvフィルターを使うことによって、Location_s や Identity_s といったカラムにそれぞれの値が分配され、検索できます。

以上で、本記事の検証作業は終了です。

補足:Log Analytics のカスタムで取り込む手法のまとめ

Sentinel へデータをカスタムで取り込む手法には、それぞれ利点と欠点があります。ケースに合わせて最適な選択が行えるよう、簡単に利点・欠点をまとめてみます。

Log Analytics Agent - カスタムログ

Log Analytics エージェントには、テキストログの取り込みを行うカスタムログという機能があります。

利点

  • GUI で簡単にログ形式の設定が可能
  • エージェントのサポートもマイクロソフトから提供

欠点

  • 形式の指定を満たさないものは取れない
  • フィルタリングやエンリッチメント機能が無い
  • 大量のログを捌くのが苦手

Logstash

利点

  • フィルタリングやエンリッチメント機能がある
  • 既存で Logstash を利用している場合は、そのまま Sentinel を利用できる

欠点

  • マイクロソフトのサポートは、出力プラグインのみ
  • Logstash 用の VM のコストや運用負荷が発生

Azure Monitor Data Collector API

Azure Monitor Data Collector APIはデータを格納するための Rest APIです。

利点

  • 柔軟に取り込みがカスタマイズできる
  • Logic Apps などのワークフローに組み込める

欠点

  • PowerShell や Python などの知識が必要
  • Rest API の実行間隔や一時ストレージなどの設計が必要
  • Logic Apps を使う場合は、基盤側の制約がある(最大サイズ、コネクターの実行回数など)

最後に

Logstash を利用した格納は、多少の構築や運用負荷が発生するものの、柔軟に Azure Sentinel に取り込みを行いたい際には有力な選択肢になるかと思います。本稿がその一助となれば幸いです。

*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。