AWS ChatBotでGuardDutyアラートをSlack通知

前回[AWS Chatbot(beta版)を使ってみた](https://qiita.com/fa60393/items/882dfacc6a2c9779103c)に引続き、AWS Chatbotを使ってみました。
今回はGuardDutyアラートのSlack通知を試してみます。

## GuardDutyとは
AWSリソースへの不正アクセスなどを自動検知するAWSサービスです。(https://aws.amazon.com/jp/guardduty/)
怪しいアクセスの内容、アクセス元IP、重大度(低・中・高)など詳細なアクセス履歴を収集してくれます。
ボタン１クリックで有効化できるのでおすすめです。
AWSコンソールからもアクセス履歴を見れますが、怪しいアクセス検知をタイムリーにSlack通知してくれるとより便利ですよね。今回はその通知を実装します。

## 大まかな流れ
不正アクセス検知からSlack通知までの流れは以下の通りです。
1. GuardDutyが不正アクセスを検知
2. GuardDutyからCloudWatchにイベント通知
3. イベント通知を受けて、CloudWatchからSNSトピックに連携
4. SNS通知を受けてChatBotがSlackへ通知

## 設定手順
### ■GuardDuty有効化
GuardDutyを有効化します。リージョン毎なので、利用したいリージョンで「GuardDutyの有効化」を押下ください。
![001.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174816/96adefd5-1d16-a9bc-b3a3-3909c332f1a3.png)

### ■SNS トピック作成
GuardDutyイベント通知用のトピックを作成します。
1. SNS(https://console.aws.amazon.com/sns) にアクセス
2. 「トピックの作成」押下
![003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174816/3337306d-b8ed-910e-5b03-6c436e154e43.png)
3. 名前：なんでもOK(ex.myTopicなど)
4. 他は変更せずに「トピックの作成」押下

### ■CloudWatch　イベント作成
GuardDutyイベントのルールを作成します。
GuardDutyからの通知を受けて、起動するSNSトピックを設定します。
1. CloudWatch(https://console.aws.amazon.com/cloudwatch) にアクセス
2. 「ルール」メニューより「ルールの作成」押下
![004.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174816/ad5e07c2-4e15-30de-225b-0efd18761d69.png)
3. 以下のように入力し、「設定の詳細」を押下(トピックは自分で作成したものを指定してください)
![005.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174816/709905cd-068c-e7fd-fc3f-1002efdc78d6.png)
4. 適当な名前を設定し、「ルールの更新」を押下
![006.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174816/a0839508-f063-8f06-290f-b2475283a568.png)


※補足
特定のGuardDuty重大度レベルだけ通知したい場合は以下のように設定。  
![007.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174816/41a186a8-6697-20cc-27b2-437b52766d58.png)
「カスタムイベントパターンの構築」を押下するとJSON入力欄が現れます。ここに以下コードを貼り付けてください。

```JSON
{
  "source": [
    "aws.guardduty"
  ],
  "detail-type": [
    "GuardDuty Finding"
  ],
  "detail": {
    "severity": [
      5,
      8
    ]
  }
}
```

severityが重大度を数値化したものです。値は0.0～9.0までです。(10.0もあるが現時点では未使用)
上の設定では、5(重大度：中)と8(重大度：高)の場合のみ通知するように設定しています。不必要に通知を増やしたくない場合はこのようにカスタマイズください。

### ■ChatBot　トピック設定
AWS ChatBotを設定します。
1. ChatBotコンソール(https://console.aws.amazon.com/chatbot/) を開く
2. 「Configure new client」を選択
3. Slackの連携ページが開くので、連携先Slackワークスペースを選択して「confirm」を選択
4. Slack Channel：連携したいChannelを選択
5. IAM permissions(RoleName)：適当なロール名を入力(なんでもOK)
6. SNS topics(SNS Region)：上で作成したSNSトピックがあるリージョン
7. SNS topics(SNS topics)：上で作成したSNSトピック
8. 「configure」を選択

### Slack通知を試す
GuardDutyではサンプル通知を送ることができます。
1. GuardDutyコンソール(https://console.aws.amazon.com/guardduty/) を開く
2. 「設定」押下
3. 「結果サンプルの作成」押下
![008.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174816/920f839b-f1e5-a7cb-ac61-bf80cac0eaa4.png)

上記設定が完了していれば、5分後にSlack通知が来るはずです。(GuardDutyからCloudWatchへの通知は5分毎)
ガンガン通知(30件くらい)が来ますが、びっくりしないでください^^

### 結果
このように緊急度レベルに応じて、色やアイコンを変えて通知してくれます。  
アラート内容も細かく記載があってよいですね！
![009.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/174816/2b7b70c1-077a-338c-e2ce-7fc8a24059cb.png)

## おわりに
AWS ChatBotは設定だけで簡単実装できて便利ですね。
ただカスタマイズ性は当然Lambda実装には劣ります。例えば「重大度9の場合は@channelメンションをつける」といったことまでは反映できないですね。(Lambdaで実装する場合⇒https://blog.manabusakai.com/2017/12/from-guardduty-to-slack/)
特別な見せ方を必要とせず、すぐ使えるようにしたい場合はAWS ChatBotは良いです。
まだβ版なので、今後機能拡張に期待ですね！