Microsoft Sentinel で可用性ゾーンを利用するため専用クラスター構成する
はじめに
Microsoft Sentinel のログの可用性について
Microsoft Sentinelが保存される Log Analytics Workspace については、一部リージョンを除き、デフォルトでは可用性ゾーンが適応されておりません。ただし、専用クラスター(Dedecated Cluster)を利用することで、東日本リージョンに関してはデータの回復性について可用性ゾーンを利用することが可能です。
Azure Monitor 専用クラスター
Log Analytics Workspace を Azure Monitor 専用クラスターにリンクすることで、可用性ゾーンやカスタマー マネージド キーといった高度な機能や、高いクエリ使用率を実現可能。もともとは専用クラスターの作成には最低 500 GB/day のインジェストのコミットメントが必要でしたが、2024年2月に最低コミットメントが 100 GB/day になり、利用のハードルが下がりました。
専用クラスターの作成
いくつか公開情報に沿って専用クラスターの作成を行う際に困った点、躓きやすい点があったので纏めておきます。
API でしか作成できない。
専用クラスターの最低コミットメントのログ量が引き下げられたことで、利用しやすくなったと思い検証をしてみようと思ったところ、先ずは専用クラスターのリソースを作る必要がありますが、現時点では 100 GB のコミットメント レベルの環境は Azure REST API でしか作成できません[1]
折角 100 GB に最低コミットメント レベルが下がったのに構成するのがやや面倒くさいと思う人が出てくるかなと思ったので、 Postman Collection を作りました。こちらの公開情報の手順に記載のある、「専用クラスターの作成」、「クラスターのプロビジョニング状態を確認する」、「ワークスペースをクラスターにリンクする」、「ワークスペースのリンク状態を確認する」、「クラスターを削除する」等の API リクエストを簡単に投げれるようにコレクションにしております。以下から Fork して使ってください。簡単な使い方はおまけで記載します。
ドキュメントの API バージョンが間違っている。
こちらの公開情報の手順の REST API の例ではパラメーターが "api-version=2021-06-01" となっておりますが、このまま100 GB の専用クラスターの作成の API を実行すると以下のエラーが返ってくると思います。[2]100 GB で作成するときは REST API を使って専用クラスターを作成しろと書いているのに 100 GB で作れない・・・
{
"error": {
"code": "InvalidInput",
"message": "CapacityReservationLevel must be an allowed value: [GB500,T1,T2,T5]. Operation Id: 'ed0110b012e5b17debb84dd517476a6d'",
"target": "sku.capacity"
}
}
パラメーターで新しい API バージョンの "api-version=2022-10-01" を指定することで正しく作成できました。
更に、専用クラスターの作成後に Sentinel のワークスペースとの紐づけ(リンク)を行うのですが、こちらの API バージョンも "2020-08-01" にしなければいけなさそうです。参考リファレンス
公開情報の例に関しては Github より Issue を上げたので、そのうち修正されると思います。
時間がかかる
公開情報にも書いてありますが、専用クラスターの作成はかなり時間がかかることがあります。(数時間かかるケースも)
課金自体は専用クラスターの作成が完了した後からのようですが、こまめに Cluster Get を行い、"provisioningState" の 値が "Succeed" になっているか確認をしましょう。
おまけ
API 呼び出し用アプリの登録(簡易版)
Microsoft Entra の管理画面から [アプリの登録] > [新規登録] を行い、アプリを登録しましょう。
作成したアプリのページで [証明書とシークレット]のページに行き。クライアント シークレット タブで、[新しいクライアント シークレット]を作成します。クライアント シークレットは作成時にしか表示されないので、この後 Postman のパラメーターに設定するために控えておきましょう。
作成したアプリに専用クラスターの作成に必要な Azure ロールを付与します。
サブスクリプションやリソース グループなどで、ロールを付与したい単位で[アクセス制御(IAM)]から[ロールの割り当ての追加]を行って権限を付与してください。今回の専用クラスターの作成に関連した権限であれば、「Log Analytics 共同管理者」があれば十分なはずです。
Postman の使い方(簡易版)
こちらのリンクで表示された Collections から Fork したいものを選択し、"Create a fork" を選択します。
好きな Fork Label をつけて自身のワークスペースに Fork してください。
Fork した Collection を選択し、 Variables タブを選択します。
Variables の Current Value に以下に値を入れます。
Variable | Current Value |
---|---|
clientId | Entra に登録したアプリのクライアント ID |
clientSecret | Entra に登録したアプリのクライアント シークレット |
tenantId | Entra に登録したアプリが存在するテナントのテナント ID |
subscriptionId | 対象のサブスクリプション ID (トークン取得のスクリプト上必要) |
subscription-id | 専用クラスターを作成する対象のサブスクリプション ID |
resource-group-name | 専用クラスターを作成する対象のリソース グループ名 |
cluster-name | 作成する専用クラスターの名前 |
workspace-name | 作成する専用クラスターにリンクさせる Sentinel(Log Analytics) ワークスペース |
Current Value に値を入れた後に右上の Save ボタンを押すのを忘れずに。
その後は呼び出したい API をコレクション内から指定し、"Send" を実行してください。 PUT / PATCH リクエストの際は Body できちんと要件に合わせたパラメーターを指定しましょう。
なお、本コレクションは以下の Postman の Azure REST API 向けの Collection を Fork して作成しておりますので、詳細は以下もご参照ください。
Discussion