Microsoft Sentinel の Watchlist (ウォッチリスト) を Logic Apps から作成 (Blob SAS URL 利用)

# 本記事について

Microsoft Sentinel には、Watchlist (ウォッチリスト) という機能があります。これは、CSV ファイルを取りこんで、クエリ時のサイドテーブルとして利用できるようにするものです。

Azure Portal から CSV ファイルをアップロードすることもできますが、Watchlist のもとになるインベントリ情報などが定期的に更新される場合、この Watchlist 作成を自動化したいケースもあるかと思います。その際、Logic Apps を使うことで、Watchlist の作成や更新、削除を自動化することができます。

また、Logic Apps のコネクターを使う場合、① レコード単位で行う方法と ② Blob の SAS URL を使って、Watchlist を CSV ファイル丸ごと適用する方法、の２つのやり方があります。前者は公式のブログ記事があるため、本記事では②の Blob SAS URL を使う方法を見ていきます。

https://techcommunity.microsoft.com/t5/security-compliance-and-identity/sentinel-watchlist-automation-using-logic-apps/ba-p/3718753

# 方法とサンプルの Logic Apps

今回は、下記の Logic Apps コネクター - **ウォッチリスト - 大規模なウォッチリストを SaS URI を使用して作成する** - を利用します。

https://learn.microsoft.com/ja-jp/connectors/azuresentinel/#%E3%82%A6%E3%82%A9%E3%83%83%E3%83%81%E3%83%AA%E3%82%B9%E3%83%88---%E5%A4%A7%E8%A6%8F%E6%A8%A1%E3%81%AA%E3%82%A6%E3%82%A9%E3%83%83%E3%83%81%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92-sas-uri-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B

また、シンプルなワークフローとして、CSV ファイルが Blob Storage にアップロードされると、ワークフローがトリガーされ、その CSV ファイルからウォッチリストが作成されるを考えます。

:::note warn
注意：

下記の公式ドキュメントにもあるように、既存のウォッチリストと同名でウォッチリストを作成した場合、既存のウォッチリストに存在し、新規の CSV には含まれていないアイテムは、そのまま残ることになります。

https://learn.microsoft.com/ja-jp/azure/sentinel/watchlists-manage#bulk-update-a-watchlist

そのため、インベントリ管理上、アイテムの削除が頻繁に起こるような場合などは、ウォッチリストを一旦削除してから作成するという形で対応できます。
:::

まず、Blob ストレージのトリガーを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/d334d412-17c6-43b9-ac75-c2c123fb9321.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/84b8efb1-46a0-8724-fe93-dbd28a28b428.png)

次に、そのファイルに対する SAS を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/5b02a050-ace3-c890-da0e-4f4a6e2d9247.png)

そして、ウォッチリスト作成のコネクターで利用する変数を、変数の初期化のコネクターで定義しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/a7ccc98f-faf8-d8a6-f03c-01659a3c3097.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/9c316c68-86da-ca95-b712-381a47042e5c.png)


特に、ウォッチリスト作成のコネクターには、JSON で下記のデータを渡す必要があります。

```json
{
  "displayName": "<ウォッチリスト名>",
  "description": "<descirptionに入れたい文字列>",
  "source": "Remote Storage",
  "itemsSearchKey": "<検索キーの値>",
  "sasUri": "<SAS URL の値>",
  "numberOfLinesToSkip": 0,
  "contentType": "text/csv"
}
```

`source` と `contentType` の値は、このままの値を使います。`numberOfLinesToSkip` は CSV の１行目がヘッダー、２行目以降がデータという形の場合は0を入れます。`displayName`・`description` と `sasUri` は上記では、それぞれ前のコネクターで生成された値を渡しています。

そして、**ウォッチリスト - 大規模なウォッチリストを SaS URI を使用して作成する** のコネクターを配置します。Logic Apps のマネージド ID を有効化し、Sentinel ワークスペースの操作の権限を予め付与しておきます。そして、そのマネージド ID で接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/f13b4cfb-0baa-dc27-384d-fccb0a69f7d3.png)

そして、対象のワークスペースのサブスクリプションID, リソースグループ名、ワークスペースIDを入れます。ウォッチリストのエイリアスに先に定義したウォッチリスト名、フィールドにウォッチリストのパラメータ (JSON 形式) をそれぞれ入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/3662641e-728e-6b3f-7fda-c7ff41dbeea3.png)

準備はこれで完了です。

次に実際にこのワークフローを動かしてみます。対象の Blob Storage のコンテナーに、CSV ファイルをアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/e2988eed-b7f7-45e1-fe2f-83fbcc6fd0f4.png)

ワークフローがちゃんと動くと、Sentinel ワークスペース側にウォッチリストが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/0f42e897-62a3-56e1-561d-837f519ea160.png)

当たり前ですが、ログ検索もできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/3d3d5c60-09fd-be68-f78c-0568ee46ede0.png)

Logic Apps を使った、CSV ファイルから一括でウォッチリストを作成する手順のご紹介は以上になります。

# 最後に

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