こんばんは。torippy1024です。
今日は、基礎的な機能であるわりにあまり日の目を見ることがないワークフローアクションについて、実際の設定手順を試してみます。
ワークフローアクションとは
ワークフローアクションとは、外部システムとWebベースの連携をするための仕組みです。
特定のサーチ結果が得られたことをトリガーとして、フィールド値を含めたGETやPOSTなどのHTTPSリクエストを実行したり、別のサーチを実行できます。
https://help.splunk.com/en/splunk-enterprise/manage-knowledge-objects/knowledge-management-manual/10.4/workflow-actions/about-workflow-actions-in-splunk-web
https://docs.splunk.com/Splexicon:Workflowaction
具体的な例としては、通常とは異なるソースIPアドレスからアクセスがあった際に、そのIPアドレスに対してwhoisを実行してドメインや保有者情報を逆引きしたり、発生したエラーメッセージ使ったgoogle検索リンクを生成したりすることができます。
ワークフローアクションのタイプ
ワークフローアクションには、GET、POST、Searchの3つのタイプが存在しています。タイプは、それぞれのアクション内容を表しています。それぞれの違いは以下です。
| タイプ | 説明 |
|---|---|
| GET | GETリクエストのリンクを生成する。サーチ結果から特定のフィールド値を取り出し、その値を使ってGoogle検索をするなどのことができる。 |
| POST | POSTリクエストのリンクを生成する。サーチ結果から特定のフィールド値を取り出し、その値をリクエストボディに含めて外部システムのAPIを実行するなどのことができる。 |
| Search | Splunk上でサーチを生成する。特定のサーチ結果をベースに、二次サーチを実行するなどのことができる。 |
ワークフローアクションの注意点
ワークフローアクションの注意点は以下の通りです。
- ワークフローアクションは、自動実行する用途ではなく、Splunk Web上のサーチ結果画面から、マニュアルで別の画面に遷移するリンクを生成するための機能です。アラート発生などをトリガーとしてアクションを自動化したい阿合は、カスタムアラートアクション(https://help.splunk.com/en/splunk-cloud-platform/alert-and-respond/alerting-manual/10.5.2605/configure-alert-actions/set-up-alert-actions )を作成してください。
- ワークフローアクションで実行可能なことは、サーチ結果から特定のフィールドを取得して特定の外部URIにリンクしたり、内部で別のサーチを実行することです。外部の情報をとってきて内部のサーチ結果に反映させる機能ではありません。
- 外部に情報を送信することができるため、本番環境で動作させるときは、得られたフィールド値に機密情報が含まれていないかなどを十分確認してから設定・動作するようにしてください。
実際にやってみる
では、実際にワークフローアクションを定義してみます。
いつものチュートリアルデータをSplunkにアップロードし、設定(歯車アイコン)から「フィールド」-「ワークフローアクション」-「新しいワークフローアクション」を選択し、以下のように値を指定して「保存」を選択します。
| 項目 | 値 | 説明 |
|---|---|---|
| ラベル | whois \$clientip\$ | Splunk Web上での表示名。利用者が分かりやすい名称にすればよい。\$clientip\$と指定すると、clientipの具体的な値が展開され、"whois 91.205.189.15"などと表示される |
| 次のフィールドにのみ適用 | * | *でよい。特定のフィールド値をクリックしたときのみ、リンクを表示させたい場合に指定 |
| 次のイベントタイプにのみ適用 | (空白) | 特定のイベントタイプにのみ限定したい場合は指定 |
| アクションの表示先 | 両方 | Splunk Web上の表示先。両方を選択しておけばよい |
| アクションタイプ | リンク | GET/POSTの場合はリンク、Searchの場合はサーチを指定。今回はGETなのでリンク |
| URI | https://who.is/whois-ip/ip-address/$clientip$ | URI先を指定。フィールドを取得する場合は\$で囲むこと。今回はwhoisにclientipを問い合わせすることを想定 |
| リンクの表示先 | 新規ウインドウ | リンクをクリックしたときに既存ウインドウのままとするか、新規ウインドウを開くか。好みで決定 |
| リンク方法 | GET | 今回はGETを指定 |
※今回はアクションタイプをリンクにしています。アクションタイプをサーチにした場合は少し指定項目が異なることに注意してください。
ワークフローアクションを定義したら、以下のサーチを時間範囲を全期間にして実行します。
clientipというフィールドを含まれるイベントを複数権取得できればいいので、特に以下のサーチにこだわらなくてもかまいません。
index=* clientip=*
| head 5
サーチ結果が表示されたら、先頭イベントの「i」行をクリックしてイベントの詳細情報を表示し、「イベントアクション」をクリックしてみてください。新しく「whois \$clientip\$」と表示されることが分かります。
(こちらが、アクションの表示先で選択できる「イベントメニュー」の表示先となります)
実際にクリックすると、指定されたwhoisのURIにリンクされることが分かります。

また、イベント詳細画面のフィールドの「アクション」列をクリックすると、こちらにも新しく「whois \$clientip\$」と表示されています。
(こちらは、アクションの表示先で選択できる「フィールドメニュー」の表示先となります。また、今回は「次のフィールドにのみ適用」の値を*にしたために、どのフィールドのアクション列(例えばhostやsourceであっても)をクリックしても、「whois \$clientip\$」が表示されます。*でなく特定のフィールド(例えばclientipのみ)を指定することで、特定のフィールドのアクション列のみに表示を限定させることが可能です)
ちなみに、今回設定した内容は、workflow_actions.confというコンフィグファイルに定義されることになります。
以下のようなファイルとして出力されているので、興味があるかたは実際に出力されたコンフィグファイルも参照してみてください。(デフォルトであればetc/apps/search/local配下に出力されるはずです)
[whoisdomain]
display_location = both
fields = *
label = whois $clientip$
link.method = get
link.target = blank
link.uri = https://who.is/whois-ip/ip-address/$clientip$
type = link
参考資料
About workflow actions in Splunk Web
https://help.splunk.com/en/splunk-enterprise/manage-knowledge-objects/knowledge-management-manual/10.2/workflow-actions/about-workflow-actions-in-splunk-web
workflow_actions.conf
https://help.splunk.com/en/splunk-enterprise/administer/admin-manual/10.4/configuration-file-reference/10.4.0-configuration-file-reference/workflow_actions.conf


