*2023年3月時点において
こちらの記事で紹介している LogStash のプラグインは Log Analytics Data Collector API を利用したレガシー版です。
今後は現時点でパブリックプレビューとなっている、DCR ベース版が主流になっていくと思われます。
DCR ベース版では、DCR によってデータのエンリッチやフィルタリングができ、かつ既存のテーブル (Syslog, WindowsEvent, CommonSecurityLog など) へのログ格納も可能になっています。
本記事について
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を使います。)
"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 とキーを入れてください。
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 で簡単にログ形式の設定が可能
- エージェントのサポートもマイクロソフトから提供
欠点
- 形式の指定を満たさないものは取れない
- フィルタリングやエンリッチメント機能が無い
- 大量のログを捌くのが苦手
DCR ベースのテキストログ
2022年にリリースされた DCR ベースのテキストログについては下記にて解説しております。DCR をベースにしておりスケーラビリティなどが改善されています。
利点
- 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 を使う場合は、基盤側の制約がある(最大サイズ、コネクターの実行回数など)
Log Ingest API
2023年3月現在 Data Collector API のアップグレード版である Log Ingest API も利用できるようになっています。詳細は下記をご参照ください。
利点
- 柔軟に取り込みがカスタマイズできる
欠点
- PowerShell や Python などの知識が必要
- Rest API の実行間隔や一時ストレージなどの設計が必要
最後に
Logstash を利用した格納は、多少の構築や運用負荷が発生するものの、柔軟に Azure Sentinel に取り込みを行いたい際には有力な選択肢になるかと思います。本稿がその一助となれば幸いです。
*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。