0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElasticのアラートのレスポンスをSlackとTinesで自動化する方法(2)

Posted at

はじめに

本ブログではElasticのアラートをTinesのワークフローに連携し、ユーザーにSlackで通知、さらにはSlackからのユーザーレスポンスを受け取ってその後の処理も自動化する方法を紹介します。

まだ読んでいない方は第一回の記事からご覧ください。

第二回では、Tinesのワークフローを完成させていきます。

SlackとTinesの連携の手順はTinesのブログを参考にしています。

Slackアプリのセットアップ

https://api.slack.com/apps の自分のアカウントのアプリのリスト画面に行き、Create New Appを押します。
image.png

From scratchを選択します。
image.png

App Nameとworkspaceを設定します。
image.png

Slack: Slash Commandsの作成

Tinesのブログの手順に沿って、Slash Commands/analyzedomainというコマンドを作りましょう。以下、作った結果の画面です。
image.png

Request URLには、Tinesのreceieve commandsアクションに設定されているWebhook URLを設定することで、このコマンドでそのアクションをトリガーできます。
image.png

このコマンド/analyzedomain tines.ioをSlackから実行すると、Tinesのワークフローreceive commandsからワークフローがこのように実行されます。
image.png

最後のHTTP RequestでSlackにメッセージを送るところでイベントが終わっていますが、これは次の手順で示す設定が必要なためです。

Slack: OAuth & Permissions

上で作成したSlackアプリのメニューのOAuth & Permissionsに行き、OAuthを設定します。以下のようにBot TokenとUser TokenのScopesが分かれているので、それぞれにchat:writeの権限を設定します。(Bot Tokenだけでも動くかもしれません)
image.png

上の方にあるBot User OAuth Tokenのキーをコピーしましょう。次のステップで使います。

Tines: Slackに投稿するCredentialsの作成

TinesのCredentialsに行き、+NewでSlackを選択します。
image.png

ここでは、今回はUse my own Slack appを選択します。
image.png

さきほどのBot User OAuth Tokenのキーを入力します。
image.png

作成後、Credentialsの名前をSlackからslack_chatbotに変更します。以下の図のように、Tinesのストーリーがこの名前で参照するようになっているためです。
image.png

image.png

Slack: 投稿先チャンネルにアプリを追加

投稿先のチャンネルをここでは新たに作成します。そしてそのチャンネルの設定のインテグレーションからアプリを追加するで、今回のSlackアプリを追加しましょう。これをしないと、Tinesからのメッセージがこのチャンネルに届きません。
image.png

Slack: 投稿先チャンネルからSlackコマンドを再度テスト

投稿先のSlack#elastic-alertsチャンネルからコマンド/analyzedomain tines.ioを実行すると、今度はボタン入りメッセージが返ってきました。どちらかのボタンを押してみましょう。
image.png
(もしメッセージが返ってこない場合、Tinesのフローは、コマンド実行元のSlackチャンネルにこのメッセージを通知するので、そのチャンネルにインテグレーションでアプリを追加していたかを確認しましょう。)

このように、押されたボタンの反応がTinesに伝えられていることがわかります。
image.png

Tines: Elastic アラートの接続

この後のステップでElasticからTinesに送るアラートはこのようなデータです。これを受け取れるようにTinesを設定します。
image.png

以下のようにTrigger if Analyze Domainからextract domainsへの接続を消して、第1回で作成していたAlerts from Elasticから接続します。また、extract domainsPathalerts_from_elastic.body.context.alerts[0].url.domainとして、Elasticのアラートの中のフィールドの値をドメイン値として使うように変更します。
image.png

アラートの内容を元に通知先Slackチャンネルを設定

現在の設定だと、通知先のSlackチャンネルは、Slashコマンド実行元のチャンネルが使われるようになっているので、ここではElasticアラートの内容に応じてチャンネルを変更できるようにします。

新しくEvent Transformアクションをドロップし、以下の図のようにbuild resultsSend Rich Slack Responseの間に挿入します。
image.png

ModeをMessage onlyにして、Plain Codeとして以下を入力します。Elasticのアラートルール名に応じてチャンネル名を変更しています。

{
  "channel_id": "<%if alerts_from_elastic.body.alertName = \"External Alerts\"%>elastic-alerts<%else%>general<%endif%>"
}

そしてSend Rich Slack Responseのchannelの値を<<set_target_slack_channel.channel_id>>に変更し、上の値を参照するようにします。
image.png

Elastic アラートへの返しの接続

以下のように第1回で作成したclose Elastic Security alertに対して、trigger to whitelistから接続を作ります。close Elastic Security alertの中のsignal_idsの設定を前回のダミーのIDからalerts_from_elastic.body.context.alerts[0]._idに変更し、トリガーとなったアラートのステータスを変えるように変更します。
image.png

最後!Elastic Securityアラートを発行させてテスト。

Elastic SecurityのRulesより、以下のExternal AlertsをInstallし、Enableにしてください。
image.png

KibanaのConsoleから以下のようにPOSTコマンドを実行します。タイムスタンプの時刻は現在時刻に変更してください。
image.png

External Alertsのアラートルールがこのイベントをトリガーにアラートを作成します。ルールは5分おきに実行されるので、最大5分待つ必要があります。
image.png

ワークフローが全てうまくいけば、#elastic-alertsチャンネルにメッセージが届きます。
image.png

whitelistボタンを押すと、自動的にアラートがAcknowlegedのステータスに変わりました!
image.png

おわり

TinesとSlackを使うと、Elasticのアラートをしかるべきユーザーに通知し、またそのユーザーがSlackにレスポンスを返すだけで、アラートの自動クローズなどの自動化を実装することができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?