Log Analytics / Microsoft Sentinel のログを永年保存する！

## １、はじめに
企業ポリシーやコンプライアンスなどにより、ログの長期保存が要件になることがよくあります。今回は Log Analytics や Microsoft Sentinel に集約したログを Azure Data Explorer にエクスポートして永年保存する方法をご紹介します。

## ２、Log Analytics ワークスペース
Log Analytics ワークスペースでは、最長7年間のログ保持が可能です。しかし、KQL にて分析できる分析ログの保持期間は最長2年間 (730日) までとなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/678bf873-0d94-b436-8dda-cec179845362.png)

Log Analytics ワークスペースは、分析ログとアーカイブログの合計で最大7年間のログ保持が可能です。2年以上ログを Log Analytics ワークスペースに保持したい場合は、アーカイブログを活用してログを保持します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/c1f7c33f-7050-55a8-7809-039d2d493621.png)

分析ログ、アーカイブログの設定方法はこちらのドキュメントを参照してください。
* [データ保持とアーカイブの各ポリシーを Azure Monitor ログで構成する](https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/data-retention-archive?tabs=portal-1%2Cportal-2)

例えば、下記 **Azure アクティビティログ** の設定では、[対話型の保持] を 90日、[保持期間の合計] を 7 年とすることで、[分析ログ] が90日、[アーカイブログ] を2466 日保持することができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/b97d9529-f8cf-47ce-10c4-5abee43f7e4c.png)

しかし、7年以上ログを保持したい場合や、730日以降のログも KQL で分析したい場合、Log Analytics ワークスペースだけでは要件を満たすことができません。KQL で分析できるログを永年保持したい場合は Azure Data Explorer にログを保持することで、その要件を満たすことができます。

## ３、Azure Data Explorer とは
* [Azure Data Explorerとは](https://learn.microsoft.com/ja-jp/azure/data-explorer/data-explorer-overview)
Azure Data Explorer は、大量のデータをほぼリアルタイムで簡単に分析できるようにする、フルマネージドかつハイパフォーマンスなビッグデータ分析プラットフォームです。Log Analytics ワークスペースと同じように KQL によるログ分析が可能なため、Microsoft Sentinel で利用している Hunting クエリもそのまま実行することができます。

## ４、構成方法
Log Analytics のデータエクスポート機能を利用し、イベントハブ経由で Azure Data Explorer にログをエクスポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/60bb745c-f43a-2501-482c-53677af0ccb3.png)

Log Analytics のデータエクスポートは、ワークスペースへの書き込みと並列でストレージアカウントやイベントハブにデータをエクスポートする機能です。データはフィルターなしでエクスポートされるため、データ改ざんが起きる心配もありません。
* [Azure Monitor の Log Analytics ワークスペース データ エクスポート](https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/logs-data-export?tabs=portal)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/2a90f2f1-7704-355d-4ea2-1c3d0710a151.png)

## ５、セットアップ
それでは、Log Analytics ワークスペースのログを ADX (Azure Data Explorer) にエクスポートしてみましょう！
こちらがセットアップ全体の流れです。(Log Analytics ワークスペースは作成済み)
1. ADX を作成
1. Event Hubs の作成
1. Log Analytics のデータエクスポート設定
1. ADX でテーブル作成とテーブルマッピング
1. ADX でデータ接続設定

### 5.1 ADX の作成
Azure Portal から ADX を作成してください。
コンピューティングのワークロードは、運用環境に応じてサイズを選択してください。仮想マシンのスペックにより KQL 実行のパフォーマンスに影響があります。要件に応じて可用性やスケールの設定をしてください。
今回は検証用途のため、**[開発/テスト]** を選択します。
+ [Azure Data Explorer クラスターの SKU を選択する](https://learn.microsoft.com/ja-jp/azure/data-explorer/manage-cluster-choose-sku?WT.mc_id=Portal-Microsoft_Azure_Kusto)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/18d8269b-4e0b-c907-90ac-78b3d5ce24a6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/2069145c-cb5e-6d86-368e-3c0cf5a91e07.png)

次に ADX にデータベースを作成します。作成して ADX にアクセスし、データベースを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/99f52fd5-552f-66e9-6fb0-e54913f5667b.png)

**保持期間(日数)** で **日数無期限の保持期間** を有効にすることで、KQL 分析可能なログを永年保管することが可能です。パラーメーターの詳細はドキュメントをご確認ください。
* [https://learn.microsoft.com/ja-jp/azure/data-explorer/create-cluster-database-portal](https://learn.microsoft.com/ja-jp/azure/data-explorer/create-cluster-database-portal)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/200a38c9-0b92-1eea-cc5b-1d831d3e2e4e.png)


### 5.2 Event Hubs の作成
次に Event Hub を作成します。
Event Hubs の価格設定によりメッセージの保持期間などが異なりますので、要件に合わせて選択してください。
今回は検証用途のため、**[Basic]** 価格を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/ef5a1bd6-10ff-977d-79f9-dfc4142f7424.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/365a5eb8-9e4d-f340-3870-e40f064c7c87.png)

### 5.3 Log Analytics データエクスポートの設定
Log Analytics のデータエクスポートは、ストレージアカウントと Event Hub にログを転送することができる機能です。
+ [Azure Monitor の Log Analytics ワークスペース データ エクスポート](https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/logs-data-export?tabs=portal)

Log Analytics ワークスペースのすべてのテーブルはサポートされておらず、こちらの一覧に記載のテーブルのみをエクスポートできる点にご注意ください。現時点ではサポートされていなくても、将来的にサポート対象になった時点で、テーブルのデータをエクスポートすることができるようになります。
+ [サポート対象外、サポート対象のテーブル](https://learn.microsoft.com/ja-jp/azure/azure-monitor/logs/logs-data-export?tabs=portal#unsupported-tables)

作成済みの Log Analytics ワークスペースから、**データエクスポート** を選択して、新しいエクスポートルールを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/fcef9a7c-72b0-237a-b863-9bb51c7eec54.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/9c99f599-e5d8-94d0-0b86-a1736d119229.png)

ここでエクスポートするテーブルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/fe33557f-d42f-c55a-01fe-1ebcc53c3582.png)

ここでエクスポート先として **イベントハブ** を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/48f7365e-3160-4d86-8e88-cb984949c34f.png)

すべてのパラメーターを設定したら、エクスポートルールを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/b3fc51a6-07e1-0855-a8db-bb5bb614edcf.png)

### 5.4 ADX でテーブルの作成とテーブルマッピング
Log Analytics からデータをインポートするテーブルを ADX に作成します。ADX にテーブル作成とテーブルマッピングを実施するクエリを生成する Powershell スクリプトが提供されているため、そのスクリプトを利用します。
+ [Create-TableInADX.ps1](https://github.com/javiersoriano/sentinel-scripts/blob/main/ADX/Create-TableInADX.ps1)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/4986e305-41a3-4afd-e6f7-f99d9eb484a5.png)

Raw データで表示し、右クリックから ps1 ファイルをダウンロードするのが簡単です。
+ [Raw-Create-TableInADX.ps1](https://raw.githubusercontent.com/javiersoriano/sentinel-scripts/main/ADX/Create-TableInADX.ps1)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/6f090070-ac49-94d6-9a74-e78c011875d6.png)

このスクリプトでは、下記のパラメーターの入力が求められるので、事前に確認しておくとよいです。
* テーブル名
* Workspace ID

Workspace ID は Log Analytics ワークスペースのエージェント管理から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/bd5d340c-a112-5840-f4c9-604b3f5f57c5.png)

準備ができらた Cloud Shell や ローカルPC でダウンロードしたファイルを実行します。
パラメーターを入力すると、緑色で表示された文字が ADX にテーブル作成、テーブルマッピングするクエリです。コピーしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/01e6e3d3-c172-bd32-ec5e-0370efb4cf4e.png)

次に、ADX に作成したデータベースに移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/da9cc949-6eba-351a-c12c-a88a38c117a1.png)

クエリを選択して、対象のデータベースをターゲットにコピーしたクエリを1つずつ実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/37635e4c-c3b7-24e7-a0eb-0d28f7ab820e.png)

そうすることで、選択したデータベースに2つのテーブルが作成され、スキーマも構成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/4d78d1c2-8c19-1048-b1b2-213ebc076a18.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/00a7558b-9a59-bed2-8052-54afe84075fa.png)

エクスポートするテーブルごとにスクリプトを実行して、ADX にテーブルを作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/ba7ca8dc-0eac-f6aa-219c-c2dc6d1fa705.png)

### 5.5 ADX でデータ接続設定
最後に Event Hub から ADX にデータを取り込み設定をすれば完了です。

ADX のデータベースから **データ接続** を選択し、**データ接続の追加** をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/e4dfdfab-f28c-c245-e49e-082c9c4b721e.png)

データ接続のパラーメーターを下記のように入力して作成します。イベントハブはデータエクスポートルールを設定した際に作成されたものを利用します。本環境の例だと **am-securityevent** がデータエクスポートルール作成した際に作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/4d5fa220-cb8d-74d2-407c-e5ae435a4eda.png)

これで設定は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/e5937236-08ce-9ba3-ee6e-9cb12d863b4f.png)

複数のテーブルをエクスポートした場合は、同様に **データ接続** を作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/56ae0f8c-c5aa-0540-7d51-7b04e3aaeb0f.png)

## ６、Azure Data Explorer からクエリの実行
ADX から先ほど作成したテーブルに対してクエリを実行することで、Log Analytics のテーブルを検索する方法と同様に同じクエリでログ分析を実施することができます。

* ADX のテーブルを検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/4fb350bc-a745-a891-a4d4-4c96a65ffb8c.png)

* Log Analytics ワークスペースのテーブルを検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981190/bf1e3eb9-9001-d76b-ab98-12b239e36c6d.png)

## ７、まとめ
Log Analytics にまとめたログを ADX にエクスポートすることで、永久的に KQL によるログ分析を実現することができます。
Sentinel 利用時に無償で保持できる90日までのログを保管し、ADX に KQL 分析できるログを永年保管することで、Sentinel のデータ保持料金を抑えつつ、永年保管したログを KQL で分析することができるようになります。
ご要件に合わせて、最適なログ保持環境を準備してください！