
Alert Manager Enterpriseを使って、Splunkのイベント管理をスマートに
皆さんこんにちは
若者に色々役に立つかもしれない情報をたまに呟いているおじさんです。
今年に入ってからSplunkを触る機会が増えているのですが、その中で出会ったAlert Manager EnterpriseというAppについて書いています。
Splunkで収集されたログから何か特定の条件でイベントを抽出し、それを運用していくSOC(Security Operation Center)などでは、どのイベントが対応済みで、どのイベントが仕掛かり中なのかを管理していく必要があります。また、同時多発したイベントの場合対応するオペレーターがたくさんいれば問題ありませんが、人数が限られる場合優先順位付けを行う必要があります。そのようなイベントの管理を効率化するためのAppがAlertManagerEnterpriseになります。
Splunkは最近Ciscoに買収されたSIEMベンダーですが、長年業界のトップとして君臨していたSplunkは、イベント情報の収集と相関分析を行う基盤システムとして非常に柔軟性が高く、あらゆるデータを取り込むことができるSIEMインフラであると言えます。そして取り込んだイベントを有効に活用するためにAppと呼ばれるイベントの可視化UIをパッケージ化した仕組みを持っており、第三者による開発やベンダー開発のApp、もちろんSplunk開発のAppなど様々な拡張機能パッケージが用意されています。
今回、触ることになったAlertManagerEnterprise(以降AME)は、元々AlertManagerとしてAppが公開されていましたが、その制作者が起業し、ベンダーサポートアリのAppに移行したタイミングで名称が変化したようです。
インストール
インストールや設定方法に関しては、以下のサイトに情報があります。
1.Appのダウンロード
まずAMEのAppをダウンロードします。
ダウンロード元は、splunkbase.splunk.comのサイトになります。このサイトでAppをダウンロードするにはあらかじめユーザ登録(無償)を行う必要があります。splunkbaseの右上のログインボタンからログインページに移動して、「Need to sign up for a Splunk account?」から必要事項を入力してアカウント作成します。
Business Email
Password
First Name
Last Name
Job Title
Phone Number
Company
Country
Zip/Postal Code
Terms&Conditionsへの同意
※全項目を埋める必要があります
アカウントを作成してログインを行ったら、検索画面で「Alert Manager Enterprise」で検索すると該当するAppのページが見つかりますので、そのページに移動します。

ログインを行っているとDownloadのアイコンが出てきます。(ログインしていない場合は、ログインしてダウンロードのアイコンに代わっています)

使用許諾に同意してダウンロードを行います。

ダウンロードファイルは「alert-manager-enterprise_201.tgz」のようなファイル名で保存されます。末尾はバージョンを表しており、現在note執筆時点では最新バーションが2.0.1なので201になっているようです。
2.AMEのインストール
ファイルダウンロードが終わったらAppのインストールを行います。
Appのインストールは権限の問題があるので必ずAdmin権限を持つアカウントでログインして行ってください。
Splunkへログインし、「App>App管理」へ移動します。
(SplunkはUIのロケールを日本語にもできるので、日本語のUIでの操作、ナビゲーションを前提として以下記述します)
右上の「ファイルからAppをインストール」をクリックし、先ほどダウンロードしたファイルを選択し「アップロード」ボタンをクリックします。
以下のチェックボックスにチェックを入れてインストールすると、古いバージョンのAppを上書きインストールする形になります。
▢ Appをアップグレードします。これを選択すると、すでに存在するAppが上書きされます。
後は自動的にインストールファイルがアップロードされて、インストールが終了すると、Splunkのサービスの再起動を促されますので、指示通り再起動します。インストール後の画面で再起動ボタンを押してもいいのですが、システムリソースが足りなかったからか、私の環境では不安定(AMEのアイコンがきちんと表示されない不具合が出たりした)だったので、個人的には、インストール後の画面ではなく、「設定>サーバコントロール」にある「Splunkの再起動」のボタンをクリックする形で操作すると、安定してインストールが完了できました。
3.AMEの初期設定前の準備
AMEの初期設定の中で利用するパラメータがあるので、予めそのパラメータを準備しておきましょう。
AMEは生成したイベントをSplunk内のインデックス(ame_default)に格納します。その場合にシングル構成のSplunk出会った場合、自分自身に対してローカル通信を行いHEC(HTTP Event Collector)の機能を使ってイベントを送信しています。このHECの機能を使うために、3つの要素が必要になります。
1.HECホストのFQDN(ホスト名)
デフォルトでは、localhostの値が入っていてそれでも動くかもしれませんが、AME初期設定ではきちんとFQDNを入力した方が良いと思いますので、予めSplunkが構築されたホストのFQDNを調べておきます
2.AMEのイベントを保存するためのインデックスの作成
「設定>インデックス」へ移動し、「新規インデックス」をクリック
インデックス名に「ame_default」を入力して後はデフォルトのまま「保存」をクリック
(Appの項目にAMEが選択されていますが、AMEインストール前だとSearch&Reportingになっています。僕の検証環境ではApp欄にSearch&Reportingが選択された状態でインデックスを作っていますが、正常に動作するので、ここの意味合いが良く分かりません。どなたかご存じでしょうか?)
3.HECトークン
HECを使ってイベント送信するためにトークンが必要になるので、予めAMEで使用するトークンを作成しておきます。
「設定>データ入力」へ移動し、「HTTPイベントコレクター」をクリックします。
右上の「グローバル設定」をクリックし、「全トークン」が有効になっていることを確認し「保存」します。
次に「新規トークン」をクリックしてAMEのためのトークンを作成します。
分かりやすい任意の名前を入力し「次へ」をクリック
何もせずデフォルトのまま「確認」をクリック
最後に確認して「実行」をクリックしてトークンを生成します。
下記の画面のトークン値をコピーしておきます。後でAMEの初期設定で使用します。この画面を消してしまっても「設定>HTTPイベントコレクター」の画面で再度確認できます。

4.AMEの初期設定
Splunkの再起動後にログインするとAppの中にAlertManagerEnterpriseが出来上がっていますので、AMEのページに移動します。
初期設定を行う前だと必ず設定画面に誘導され、設定が終了するまではどの機能も使えないようになっています。
マニュアルで移動する場合は、「Administration>セットアップ」に移動します。(部分的に日本語に翻訳されてしまうところがなんとも手作り感を感じます)
初期設定は2つの段階があります。1つ目はMainSetupで2つ目はUpdateになります。(2つのタブが用意されているので、まずはMain側、その後はUpdateのタブに移って操作します)
MainSetup
以下のように必要項目を入力します。
先ほど作成したインデックス、事前に調べておいたホストのFQDN、先ほど生成したトークン値を入力して「Complete」ボタンをクリックします。

次に、Updateのタブへ移動し、「Execute」のボタンをクリックします。

以上で、セットアップ完了です。
2.0から追加されたステータス確認の機能を使って正常に動作していることを確認します。
「Adminiatration>Health>健全性チェック」に移動して、「HEC healthy」と薄いグリーンに表示されていれば、正常に動作しています。「Send Test Event」をクリックして、「Response:Success」が表示されれば、正常にHEC経由でイベントをame_defaultのインデックスに格納できていることが分かります。

AMEの利用
AMEは予め定義された条件をTemplateとして保有し、Splunkのアラートの機能でこのTemplateを呼び出すことで、優先順位付けや緊急度などもあらかじめTemplate内で設定した条件に基づいてイベントを発生させ、そのイベントを管理するという流れになります。
従って、AMEを運用可能な状態にするには2つの設定が必要になります。
1.Templateの設定
前述したように、Splunkのアラートによってトリガされるイベントは以下の条件が追加され、分類されます。
Name:任意のTemplate名
Templateの条件に従って追加パラメータを加えます。
Impact:影響度(Low Mid High)
Urgency:緊急度(Low Mid High)
Assignee:イベント生成時に誰にアサインするか
Status:イベント管理における初期のイベントステータス
Time to auto resolve:自動的にイベントクローズする時間
Tags:イベント解析でよく利用する外部リンク
NotableFields:特定フィールドデータをAMEのイベントで表示
Append alert:同一条件のイベントをまとめる
Notify append:同一条件のイベントをまとめて通知

Templateは実際は複数作成するので、名前から中の設定要素が分かるように命名規則を作ると良いと思います。例えば、ImpactとUrgencyがそれぞれHighだった場合、それが分かる名前(I-H U-Hのような記号化するのも良いかもしれません)を付けておくと2のアラートで指定する場合に効率的に選択ができます。
2.Splunkのアラートの設定
ログを検索するSPLとTemplateを紐づけるための設定
保存したアラートの中で生成するイベントの名称も定義します。
AME2.0からApp内にサーチ機能が追加されたので、毎回Splunkのサーチ機能に移動しなくて良くなっています。
上の方にあるサーチタブをクリックして移動します。

ここで、Splunkでイベントを生成するためのSPLを構築します。
SPLを構築したら、その条件でアラートを作成します。
「名前を付けて保存」から「アラート」を選択します。

タイトルに任意のアラート名を入力
アラートタイプをリアルタイム
アクション追加で「CreateAME Event」を選択します。
アラートタイプをリアルタイムで利用することはサポートされていますが、ログデータが膨大になる環境ではSplunkのパフォーマンスに影響が出ますので、負荷を減らす場合はcronでの設定が良いようです。

Titleには、AME内に生成されるイベントの名称を定義できます。$result.field$のような動的変数も使用することができるようですが、イマイチどこのデータを持ってきているのかが分かりません。(ご存じの方いらっしゃいますか)
Alert Templateには先ほど作成したAMEのTemplateを選びます。
これで、作成したアラートのSPLの条件に合致したイベントがAMEのTemplateの条件に従ってイベント化されます。

イベントの運用
Templateとアラートの設定が終わるとようやくAME内に優先順位付けされた形でイベントが表示され始めます。

イベントを展開して、中を見ると各イベントの詳細がDataタブで見ることができます。

もし何か特定のシステム(例えば、EDR製品)のログだった場合、Templateの中のTagsの項目にEDR製品のWebUIのリンクを組み込んでおくことで、ワンクリックで、対象の製品のUIを開くこともできます。
AMEの画面で5色に色分けされ優先順位付けされたイベントの数が表示されていますが、ここでcriticalに分類されるイベントはどんなものか気になる方がいると思います。以下に、Priority(優先順位)がcriticalになる場合の条件が記載されています。基本はImpactとUrgencyの掛け合わせによってPriorityが決まります。また、運用中にUrgencyを変化させることができるのですが、Impactは最初に割り当てられた値から変更できないので、優先順位がcriticalにできるのはImpactがHighの物だけになります。
各イベントのステータス変更やUrgency(緊急度)または、生のSPL検索結果を見たい場合などは、各イベントの右側になる3つの点から行うことができます。

Edit Tags:イベントに追加されているTagを編集
Notifications:AME内で設定されている通知機能を実行する
Urgency:緊急度を変更する
Delete:イベントを削除
ActionFiles:イベントのフィールド情報を表示
Drilldown:生のSPLの検索結果を見る(別のウィンドウが開きます)