このトピックでは、詳細EPLルールで使用するようNetWitness Suiteに用意されているアノテーションについて説明します。
@RSAAlertアノテーション
@RSAAlertアノテーションは、EPLステートメントをアラート通知生成用に指定するために使用されます。ルール ビルダのユーザ インタフェースのアラート通知抑制機能と連携するように設計されています。
@RSAAlertアノテーションは、アラートの通知を使用する場合に役立ちます。特に、アラートをトリガーしたユーザごとに1件の通知を送信するため、複数の通知をフィルタしたい場合などに便利です。
たとえば、ログイン失敗のアラート通知を生成するとします。次のステートメントを追加できます。
@RSAAlert select * from event(msg_id=“login_fail")
上記のステートメントでは、5件のアラート通知が生成されます。
しかし、ユーザ名ごとに1件のアラートを生成するようにステートメントを変更するとします。identifier属性を使用できます。たとえば、@RSAAlert(identifier={”username”}) SELECT* FROM Event(msg_id=”login_fail”)というステートメントは、「bob」の最初のアラートに1件の通知を生成し、「alice」の最初のアラートに1件の通知を生成します。「bob」と「alice」のそれ以降のアラートは無視されます。
identifierに変数を追加することにより、さらにユーザを特定することができます。たとえば、@RSAAlert(identifier={”username”, "src_ip"}) SELECT* FROM Event(msg_id=”login_fail”)というステートメントは、ユーザとIPアドレスでユーザを特定しています。この場合、ユーザ名とIPアドレスの組み合わせごとに通知が生成されます(1.2.3.4の「alice」に1件のアラート、6.7.8.9の「alice」に別のアラート、1.2.3.4の「bob」に1件のアラート)。
Identifierとアラート通知抑制を使用するには:
@RSAAlertアノテーションは、ルール ビルダのユーザ インタフェースのアラート通知抑制機能と連携するように設計されています。これを行うには、次の手順を実行します。
- ルール ビルダのユーザ インタフェースでルールを作成し、通知の設定でアラート抑制機能を選択します。
-
ルール ビルダのルールのコードを、新しい詳細ルールにコピーします。
-
詳細ルールに、上記で説明したようにIndetifier属性を追加し、保存します。
-
元のルール ビルダのルールを削除します。
@RSAPersistアノテーション
@RSAPersistアノテーションは、名前付きウィンドウを永続的なESA管理対象ウィンドウに設定するために使用します。名前付きウィンドウをESA管理対象ウィンドウに設定すると、ESAは、ウィンドウの内容を定期的にディスクに書き込み、ウィンドウがアンデプロイ後に再デプロイされると、内容をリストアします。モジュールがアンデプロイされ、ウィンドウが削除される直前にシステムによりスナップショットが作成されます。逆に、モジュールを再デプロイされた直後にスナップショットからウィンドウの内容がリストアされます。これにより、モジュールの状態が変わった場合や、ESAサービスがダウンした場合に、ウィンドウの内容が失われなくなります。
たとえば、IPアドレスと割り当て先のホスト名のマッピングを保持する名前付きのウィンドウ、DHCPTracker について考えてみます。@RSAPersistアノテーションを使用して、次のようにステートメントを記述することができます。
@RSAPersist
create window DHCPTracker.std:unique(ip_src) as (ip_src string, alias_host string);
insert into DHCPTracker select IP as ip_src, HostName as alias_host from DHCPAssignment(ID=32);
注:すべてのウィンドウの定義が保存に適しているわけではありません。@RSAPersist アノテーションは、慎重に使用する必要があります。ウィンドウに時限レコードが含まれている場合や、ウィンドウが時間基準の制約に基づいている場合、復元されたスナップショットによってウィンドウが正しい状態にリストアされない可能性が高くなります。また、ウィンドウ定義を変更すると、スナップショットが無効になり、ウィンドウが空白の状態にリセットされます。ウィンドウ定義の変更が競合するかどうかを確認するためのセマンティック解析は一切行われません。モジュールの他の部分(つまり、ウィンドウを定義する特定のCREATE WINDOWコール以外の場所)が変更されても、スナップショットが無効にならない点に注意してください。
@UsesEnrichment(10.6.1.1以降)
@UsesEnrichmentは、詳細EPLルールでエンリッチメントを参照するために使用できます。エンリッチメントをESAと同期させるためには、EPLルールのすべてのエンリッチメント依存関係を@UsesEnrichmentアノテーションで参照する必要があります。
@UsesEnrichmentアノテーションは次の形式で記述します。
@UsesEnrichment(name= '<enrichment_name>')
たとえば、次のEPLは「Whitelist」エンリッチメントを参照しています。
@UsesEnrichment(name = 'Whitelist')
@RSAAlert
SELECT * FROM Event(ip_src NOT IN (SELECT ip_address FROM Whitelist))
@Name
@Nameは、ESA詳細ルールでステートメント名を定義します。ESAアラートのステートメント名を動的に生成するために使用されます。アラートをトリガーしたステートメントのみのステートメント名が表示されます。このアノテーションには、中括弧で囲んだメタ キーを記述できます。
@Nameアノテーションは次の形式で記述します。
@Name("<static_part_of_statement_name> {meta_key1} {meta_key2}…")
たとえば、次のEPLは値が動的に生成されるメタ キーip_srcとuser_nameを参照します。
@Name(“Login Event to {ip_src} by {user_name}”)
注:ステートメント名を動的に生成する場合、ステートメントには任意の数のメタ キーを指定できます。
個々のメタ キーの長さは64文字に制限されており、それ以降は値がトランケートされ、「…」が追加されます。
動的に生成するステートメント名の長さは128文字に制限されており、それ以降の値はトランケートされ、「…」が追加されます。トランケートされた後のすべての値は、静的な値として扱われます。