VPCフローログを Amazon Elasticsearch Service に取り込んで Kibana で分析する

# はじめに
VPCフローログ (VPC Flowlogs) はVPCを運用する上でシンプルで強力な情報です。
[VPCユーザーガイド - VPCフローログ](http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/flow-logs.html)より
>VPC フローログは、VPC のネットワークインターフェイスとの間で行き来する IP トラフィックに関する情報をキャプチャできるようにする機能です。フローログのデータは、Amazon CloudWatch Logs を使用して保存されます。フローログを作成すると、そのデータを Amazon CloudWatch Logs で表示し、取得できます。

この記事では、マネジメントコンソールとKibanaのUIを用いて[Amazon Elasticsearch Service](https://aws.amazon.com/jp/elasticsearch-service/)と[Kibana](https://www.elastic.co/jp/products/kibana)によるVPCフローログのシンプルな分析ができるまでの手順をご紹介します。コーディングは必要なく、30分もかからずに実施できます。

#VPCフローログの作成
まず、VPCフローログの格納先となるCloud Watch Logsのロググループを準備しましょう。
##ロググループの作成
CloudWatchサービスに移動し、左側のメニューからログを選択します。初めてだと次のような画面になっているので、「ロググループの作成」を選択します。既にロググループを作られているのであれば新たにもう1つ作成して下さい。

![スクリーンショット 2017-10-05 15.01.56.png](https://qiita-image-store.s3.amazonaws.com/0/55554/1587253b-c8fd-c655-2ee9-388659b75979.png)

ロググループ名の入力を求められるので「flowlogs/defaultvpc」など、わかりやすい名前を付けておきます。なお、VPC毎にロググループは分けることもできますし、同じロググループにまとめることもできます。[1秒間5回までのPutLogEventsスロットリング](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)があることを考えると、VPC毎にロググループを作成すべきでしょう。

##フローログの作成
VPCサービスのVPCメニューにおいて、フローログを取得したいVPCを選択して「フローログの作成」を実行します。

![スクリーンショット 2017-10-05 14.52.32.png](https://qiita-image-store.s3.amazonaws.com/0/55554/4bd9d276-aeb6-ef15-ece7-3854a1093ece.png)

フィルターではキャプチャしたい方向(すべてを選択すると送受信両方をキャプチャします)を選択します。送信先ロググループは先の手順で作成したロググループを選択します。また初めて作成する場合は、フローログのためのIAMロールを作成する必要がありますので、「アクセス権限の設定」というリンクをクリックします。
![スクリーンショット 2017-10-05 15.21.19.png](https://qiita-image-store.s3.amazonaws.com/0/55554/eb5f2ccd-b41e-2f46-1654-7cefe353ce3c.png)

すると次のような画面が表示されます。特に何も変えずに「許可」をクリックすることでフローログ作成用の「flowlogsRole」が作成されます。
![スクリーンショット 2017-10-05 15.24.30.png](https://qiita-image-store.s3.amazonaws.com/0/55554/960c3f01-6c9b-e61a-d7cf-77a09c05f8f2.png)

元の画面に戻ると、次のように「flowlogsRole」が選択できるようになっていますので選択し、「フローログの作成」をクリックします。
![スクリーンショット 2017-10-05 15.26.35.png](https://qiita-image-store.s3.amazonaws.com/0/55554/5b5871cf-af7f-9f8f-ceb1-8c188a453da8.png)

作成したフローログのステータスがアクティブになっていればOKです。
![VPC Management Console 2017-10-05 16-03-47.png](https://qiita-image-store.s3.amazonaws.com/0/55554/c571185b-c899-03a6-bbd1-4c4eab788fa8.png)

#Amazon Elasticsearch Serviceドメインの作成
Amazon Elasticsearch Serviceに移動し、「新しいドメインの作成」をクリックします。ドメイン名を入力し、「次へ」をクリックします(バージョンはそのままでOKです)。
![スクリーンショット 2017-10-05 16.10.30.png](https://qiita-image-store.s3.amazonaws.com/0/55554/e52070ec-dd25-bfb3-964b-4e4c8b35ff6c.png)

「クラスタの設定」画面では主に1インスタンスあたりのボリューム、インスタンスタイプ、そしてインスタンス数などを指定します。とりあえず試すのであればデフォルトのまま(m4.xlarge, EBS 10GB, 1台)で問題ありませんが、継続的に運用するのであれば、[こちらの記事](http://aws.typepad.com/sajp/2017/01/get-started-with-amazon-elasticsearch-service-how-many-data-instances-do-i-need.html)などを参考にサイズを算出して下さい。

「アクセスポリシーの設定」において、とりあえず試すのであれば「ドメインへのオープンアクセスを許可」を選択することができます。本来はIPアドレスなどでフィルタリングする必要があり、オープンアクセスが許可されたドメインにセキュアなデータはアップロードすべきではないことに注意して下さい。
![スクリーンショット 2017-10-05 16.26.55.png](https://qiita-image-store.s3.amazonaws.com/0/55554/e9456a9a-093a-10dc-0ddf-ece9ce6c6fae.png)

最後に確認を押せばドメインが作成開始されます。ステータスが「黄色(またはグリーン)」になるまで10分ほどかかりますので待ちます。

#CloudWatchログからAmazon ESへのストリーミング
CloudWatchサービスのログから、先に作成したロググループを選択し、アクションメニューから「Amazon Elasticsearch Serviceへのストリーミングの開始」を実行します。
![スクリーンショット 2017-10-05 16.33.25.png](https://qiita-image-store.s3.amazonaws.com/0/55554/df2069ae-0e68-a270-0663-8983fbe5558e.png)

Amazon ESクラスターで先ほど作成したESクラスターが選択可能になっていますので選択します(ESクラスターがまだ作成中であればキャンセルしてもう一度ストリーミングの開始をやり直します)。選択すると下段にLambda IAM実行ロールの選択が表示されますので、予め作成していなければ「新しいIAMロールの作成」を選択します。

![スクリーンショット 2017-10-05 16.47.16.png](https://qiita-image-store.s3.amazonaws.com/0/55554/b820d671-1ae3-9715-d23e-619b672d85e0.png)

表示されているロール名で特に問題なければ「許可」をクリックし、元の画面に戻って次の画面に進みます。
![スクリーンショット 2017-10-05 16.49.29.png](https://qiita-image-store.s3.amazonaws.com/0/55554/c6118d63-de61-e1b9-2728-572fe42d1284.png)

ログ形式は「Amazon VPC フローログ」を選択し、次の画面に進みます。
![スクリーンショット 2017-10-05 16.52.21.png](https://qiita-image-store.s3.amazonaws.com/0/55554/ac6995ca-98db-26db-2e76-f1e3170ca08e.png)

レビューの画面で確認して次の画面に進み、「ストリーミングの開始」をクリックすればESクラスタへのログ送信が開始されます。
![スクリーンショット 2017-10-05 16.55.22.png](https://qiita-image-store.s3.amazonaws.com/0/55554/a9fe2f66-910e-b442-6a2c-2dc55c2d84eb.png)
![スクリーンショット 2017-10-05 16.56.44.png](https://qiita-image-store.s3.amazonaws.com/0/55554/1a9225ed-9143-252d-6538-3c187e6c3e64.png)

#Kibanaでの可視化
取り込まれたログの索引名を確認します。Amazon Elasticsearch Serviceから作成したESドメインのインデックスを見ると、「cwl-日付」のようなインデックスが新たに作成されていることが確認できます。もし「.kibana」しか存在しなければ待ちます(念のため：通信が行われていないと当然フローログは生成されませんので注意して下さい)。
![Amazon Elasticsearch Service Management Console 2017-10-05 17-24-12.png](https://qiita-image-store.s3.amazonaws.com/0/55554/4dc1e7a5-8778-51e8-0533-0d8d8def1699.png)

上の画面にも表示されている「Kibana」のリンクをクリックします。Index Patternの設定画面となりますので、Index name or patternの欄に先ほど確認した「cwl-*」を入力し、Createをクリックします。
![スクリーンショット 2017-10-05 17.28.22.png](https://qiita-image-store.s3.amazonaws.com/0/55554/be6c29c9-2f55-ede3-65fc-cb52cdf59e39.png)

これでログを可視化することができるようになりました。左側のメニューのDiscoverからデータを見たり、Visualizeで色々なチャートを作成するなどを試してみて下さい！
![スクリーンショット 2017-10-05 17.31.28.png](https://qiita-image-store.s3.amazonaws.com/0/55554/cc85b888-11f7-8f7c-46a3-e845d6539d74.png)