このブログの内容
本ブログではElasticのアラートをTinesのワークフローに連携し、ユーザーにSlackで通知、さらにはSlackからのユーザーレスポンスを受け取ってその後の処理も自動化する方法を紹介します。
この使い方はElastic社の社内セキュリティチームで実践していて、こちらのDistributed alerting with the Elastic Stackのブログに詳しく紹介されています。
従業員に関連したセキュリティイベントが検知されたら、Elastic -> Tines -> Slackというフローでその従業員に以下のような通知が届きます。
引用:Elasticのブログより
このSlack通知にYes, Noのボタンがついており、従業員のレスポンスをまたTinesで受け取り、 Yes(問題なし)であれば自動でElasticのアラートをクローズし、No(問題あり)であればSOCチームにSlack通知する、といった自動化がされています。
本ブログではこの仕組みの簡単なサンプルを作る方法を紹介します。
利用するもの
今回の手順は全て無料で実施することができます。3つのツールを使います。
1. Elastic Security Serverless(14日間のフリートリアルなら無料)
2. Tinesの無料版 (Community Edition)
https://www.tines.com/ の右上のSign Upより無料アカウントを作成します。
3. Slackのフリープラン版
手順概要
Tines->Slackに関する部分のサンプルは、以下のTines社のブログの内容で大体カバーされているので、この手順も使っていきます。
https://www.tines.com/blog/chatbots-for-security-and-it-teams-part-3-creating-a-slack-chatbot
これに、Elastic -> Tinesと、Tines -> Elasticの連携を追加すれば今回の簡単なサンプルのフローが完成します。
実施手順
Tinesストーリーのインポート
ブログに紹介されている以下のTinesストーリーのExportをダウンロードし、自分のTinesアカウントにインポートします。
https://github.com/tines/stories/blob/main/blog/slack-chatbot.json
インポート後、手でアクションのボックスを綺麗に並べると下のようになります。ここはTines -> Slackのフローの部分です。
ElasticとTinesのコネクターの設定
Elasticからのリクエストを受け取るTinesのWebhookアクションの作成
Tinesストーリーに新しいWebhookアクションをドロップし、名前を「Alerts from Elastic」などとします。
Tines側のAPIキーの作成
TinesのSettings > API Keysに行きます。
API Key typeはどれでもいいですが、今回はPersonalにします。
ElasticでのTinesコネクターの作成
Stack Management > ConnectorsでTinesコネクターを作成します。
以下のように自分のTinsのドメインのURLと、自分のEメールアドレス、さきほど作成したAPI token secretを入力します。
正しく認証情報を入力できていれば、次の画面でTines StoryとWebhook actionを選択できるようになります。このような感じでテストしてみましょう。
Tinesで1つのEventが表示されるので、クリックし、Elasticからのイベントを受け取っていることを確認できます。
TinesからElasticのSecurity AlertエンドポイントへアクセスするHTTPリクエストアクションの作成
Elasticで、Stack Management > API KeysよりAPIキーを作成します。
表示されるAPIキーをコピーしてください。
Tinesに行き、新しいHTTP Requestアクションをドロップし、Elasticに対するリクエストの設定を行います。
URL欄には以下のElastic Security Alertエンドポイントのステータス変更のURLを設定します。
<自分のkibana endpoint>/api/detection_engine/signals/status
リクエストボディのPlain codeには、以下を入力します。いまはダミーのアラートIDでテストします。
{
"signal_ids": [
"dummy-id"
],
"status": "acknowledged"
}
さらに、以下の2つのHeadersを追加します。
- kbn-xsrf: true
- Authorization: (ApiKeyの後に空白入れて、その後ろにさきほどElastic側で作成したAPIキーの値をセット)
TinesアクションのRunでテストし、以下のようにレスポンス200となっていればOKです。
おわり
1回目の記事では、Elastic -> Tines, Tines -> Elasticの連携部分をセットアップしました。2回目では、これらをTines->Slackのフローに接続して、Elasticチケットの自動クローズ処理を完成させます。