【Amazon Elasticsearch Service】VPC FlowlogsのRejectをアラート検知、Slack通知してみました

記事タイトルとURLをコピーする

こんにちは、技術3課の城です。
先日、Amazon Elasticsearch Service(以降、AES)にVPC Flowlogsのデータを投入するという内容のブログ記事を書きました。
今回はこのAESを用いてアラート機能を用いて時間当たりのリジェクトの異常発生を検知、Slack投稿する、というのをやってみたいと思います。

1.前提条件

AESにVPC Flowlogsのデータが投入できていること

2.SlackのIncomming Webhookの用意

こちらの当社ブログの「PowerShellがSlackに投稿するための準備」の内容を実施します。

3.Destinationの追加

Destinationは通知先の設定となります。
用意されている送り先としてはSlack、Amazon SNS、Amazon Chime、Custom Webhookとなります。
今回はSlackを利用します。

Kibanaにブラウザでアクセスし、左側サイドバーの[Alerting]⇒上部タブの[Destinations]⇒[Add Destination]と順にクリックします。

[Name]、[Type]、[WebhookURL]を入力し、[Create]をクリックします。

4.Monitorの作成

Monitorはモニタリングの間隔、対象期間やどういう条件のログを検出するか、といった設定を行います。

左側サイドバーの[Alerting]⇒上部タブの[Monitors]⇒[Create Monitor]と順にクリックします。

下記内容を設定します。

【Configure Monitor】

設定項目 内容
Monitor Name 任意の値
Schedule 今回はリジェクトを一定期間ごとに閾値を越えているかどうか確認したいので、[By interval][Every 15Minutes]としています。
Monitor State Disable monitor(無効)のオンオフなので、デフォルトのままオフとしています。

【Define Monitor】

設定項目 内容
How do you qant to define the monitor 今回はクエリを記載したいので、[Define using extraction queey]を選択します。
Index 対象はVPC Flowlogsのインデックスなので、[vpc-flowlogs-*]としています。
Time field @timestamp
Define extraction query 後述

Define extraction queryについては、具体的には下記のように記載しました。
VPC外(!dstaddr:"10.200.0.0/16")に対するアウトバウンド通信で、REJECT(action.keyword:"REJECT")のログを検出したいという意図のクエリとなります。

{
    "size": 0,
    "query": {
        "bool": {
            "must": [
                {
                    "query_string": {
                        "query": "action.keyword:\"REJECT\" AND !dstaddr:\"10.200.0.0/16\"",
                        "analyze_wildcard": true,
                        "default_field": "*"
                    }
                },
                {
                    "range": {
                        "@timestamp": {
                            "from": "now-15m",
                            "to": "now",
                            "format": "epoch_millis"
                        }
                    }
                }
            ]
        }
    }
}

画面は↓の感じです。

こちらは参考とさせていただいた下記のQiita記事に記載のように、DiscoveryなどでGUIでクエリをかけて、[Inspect]からRequestの内容をみると作成しやすいかと思います。
https://qiita.com/hssh2_bin/items/06550d437ceb095a139c

設定したら、[Create]をクリックします。

5.Triggerの作成

Triggerの作成画面に遷移しますので、設定していきます。
下記の画像のように設定していきますが、デフォルトのメッセージにDashboardのURLを追加してみました。

設定内容を記載したら、[Create]をクリックします。
こちらで設定は終わりです。

6.確認

試しにセキュリティグループのアウトバウンドルールを削除して、アラート発報するかテストしてみるとうまくいきました。

こんな感じのアラートメッセージが送られてきます。
※時間はUTCで表示されます。

用意していたダッシュボードにアクセスし、時間を合わせてみると、いろいろリジェクトされていたことが分かります。

7.おわりに

クエリを良い具合に考えれば、色々とうまく使えそうな機能だなと思いました。
ただ最近思うのは、AESにVPC Flowlogsを集約しての運用は環境が大きくなればなるほどデータ量も大きくなり、クエリやデータ収集自体での負荷が高いものとなります。
コストをかけてスペックをガンガン上げられる場合はいいかもしれませんが、安定運用するためにはデータをフィルタするなど、用途を限定的にして使えるとよいのかなと感じました。

どなたかの助けになれば幸いです。

参考資料

https://qiita.com/hssh2_bin/items/06550d437ceb095a139c

城 航太 (記事一覧)

営業部カスタマーサクセス課・課長

AWSへの移行、AWSアカウントセキュリティ、ネットワーク広く浅くといった感じです。最近はAmazon WorkSpacesやAmazon AppStream2.0が好きです。APN Ambassador 2019,2020