slackからphantomのplaybookを実行して、できるだけ忘年会を楽しむ

この記事はSplunk Advent Calendar 2019、10日目の記事です。

# はじめに
saeoshiです。今回はちょっとネタに走る記事で恐縮ですが、どうぞよろしくお願いします。

12月に入り、みなさん忘年会のシーズンですね。毎日忘年をし続けている方もいらっしゃるのでは
ないでしょうか。
さてさて年を忘れて、うまい酒と飯を食ってる時に限って、奴はやってくるのです。

**Ω「そうです。私がアラートです」**
**Ω「呼んだ？」**

**Aさん「PC開くのメンドクセ〜」**
**Bさん「電車の中でPCひらけない・・・」**

**Phantom「そんなあなたに朗報です。slackからplaybookを呼び出して実行しちゃいましょう」**
**A・B「な・・・なんだって・・・・」**

![gazou_0471.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/91df638b-1106-74bc-b257-6c5ddc4ce39c.jpeg)

#そもそもPhamtomって？
https://www.splunk.com/en_us/software/phantom.html

セキュリティ運用でのタスクの自動化と他製品と連携することによって運用の自動化を実現する製品です。
Security Orchestration and Automated Responseと呼ばれる新しいカテゴリの製品ですね。

**セキュリティだけじゃなくて、IT運用でも全然使えるんだよね**

例えばメールに含まれるIOCからIPアドレスをチェックして、Firewallルールの更新とか、ipのreputationの処理を行うみたいなことが簡単に実現できます。GUIを使って、処理をつなげていく感じでできるんだなぁ。

playbookのイメージはこんな感じ。

<img width="1039" alt="Screen Shot 2019-12-09 at 5.50.43 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/88d7171b-ea98-e6e9-1990-2086c2fcf854.jpeg">

あと、この個別の処理はAppと呼ばれる単位でいろんな製品で使えるコマンドがまとまってるんだよね。
AWSだとinstanceの起動・停止、autoscalingグループへのattachとかが簡単にできるようになってる。

<img width="1229" alt="Screen Shot 2019-12-09 at 5.52.43 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/099405ee-350d-fc63-8ffd-d39f1fd1f883.jpeg">


CiscoのASAだとipのblockとかvpnのsessiobn terminateとかできるんだよね。

<img width="1168" alt="Screen Shot 2019-12-09 at 5.53.03 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/16c0fff2-ec69-5d7c-a39a-e5c541bf80f6.jpeg">

こんなのがいっぱいある。

# Build Phantom Instance

さてさて、前置きは一旦おわりで、まずは、Market PlaceからAMIを使ってサクッと立ち上げましょう。

<img width="1653" alt="Screen Shot 2019-12-09 at 5.43.25 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/8fa3deca-43fd-9c37-a3ea-292b82119e7f.jpeg">

起動すると、playbookやら、appやらいろいろインストールされるので、少々待ちましょう。
ログインは下記でOK(IDPASSはデフォルトはadmin/INSTANCEIDです)

https://IPAddress

<img width="838" alt="Screen Shot 2019-12-09 at 5.59.35 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/3c7f69e6-2a48-ffcc-3b7b-99737975cb54.jpeg">

##SlackのAppとslack botの設定をする
ログイン後、DropdownメニューからAppを選択して、Slackを検索すると、Unconfigure appの箇所に出てくるので
New Configure Assetsを選択して、設定をするんだけど、公式ドキュメントに沿ってやるのが良き。

https://my.phantom.us/4.6/docs/app_reference/phantom_slack

流れとしては
1. SlackのApps作成
2. Bot Userの追加
3. Phantomでslack appのインストール
4. Phantomでユーザ2つ作成
5. Slack側にphatomのPost URLを設定

って感じです。

## Slack側からPhantomを呼びだす
設定がうまくいくと、こんな感じでbotを呼び出せます。

```bash
@phantom_apps get_container
```
<img width="1414" alt="Screen Shot 2019-12-09 at 6.11.08 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/cbac6dd8-aaba-1dad-bc97-97157f47f084.jpeg">

ちなみに、phantomはsplunkのsavedsearchとか、どこぞからのrestをeventとしてこんな感じに記録できるようになっています。

<img width="1422" alt="Screen Shot 2019-12-09 at 6.19.34 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/89897b9d-cc98-6175-cde8-26252d3e9d7f.jpeg">


イベントにドリルダウンすると、こんな感じで誰がいつどんなplaybookを実行したかの確認ができます。

<img width="1680" alt="Screen Shot 2019-12-09 at 6.17.16 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/92d48a92-bbf2-e1f5-949d-305214633b60.jpeg">

### イベントのリストを取ってみる
tagがslacktestで設定されてるイベントをとります。

```bash
@phantom_apps get_container --tag slacktest
```

<img width="974" alt="Screen Shot 2019-12-09 at 6.21.51 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/0502bc42-47d0-9913-197b-931e3b166984.jpeg">

###対象のイベントに対してPlaybookを実行する！
Event(ContainterID) 2095に対して、サンプルのplyabookを実行してみる！

```bash
@phantom_apps run_playbook --repo local advent_sample_playbook 2095 
```

<img width="1411" alt="Screen Shot 2019-12-09 at 6.32.12 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/72645492-7afb-ad85-e938-7db36dd48ba7.jpeg">


<img width="1677" alt="Screen Shot 2019-12-09 at 6.32.24 AM.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/9f74b03e-69d1-fb24-d2c8-1f58b2a7077d.jpeg">


##おわりに
ざざっと書いちゃいましたが、playbookは自社のapiとも連携できるとの、自分で書いたpythonコードも埋め込めるので、障害対応用に毎回おこなう処理をplaybook化してあげると、飲みの席にいつつ、一旦slackから呼び出したphantomで一時切り分けとか、障害対応もできると思います！

今年もお疲れ様でした！