AWS CloudWatchと CloudWatch Logs(using VPC Flow)を Splunkに取り込んでみる


# はじめに

前回 [AWS Config / CloudTrailログをSplunkに取り込んでみました](https://qiita.com/maroon/private/7776539f79bcfc14a692)ので、今回はCloudWatchを取得したいと思います。さらに後半では VPC FlowLogを CloudWatch Logs経由で取り込んでみたいと思います。

(2021/5) SAI(Splunk App for Infrastructure) は、2021/4 にオンプレ版の[EOLがアナウンス](https://splunkbase.splunk.com/app/3975/)されたため、対象箇所の記事は削除しました。


# Splunkへの取り込み方

Splunk側からみたときの対象ログ・メトリックとしては CloudWatch と CloudWatch Logsになります。
- **CloudWatch** : CloudWatch用のInputがあります。
- **CloudWatch Logs** : Kinesis Firehoseが推奨となってます。

(*) Add-On for AWSを使ったログ別Splunkの推奨取得方法について (Best Practice Input Type参照)
https://docs.splunk.com/Documentation/AddOns/released/AWS/ConfigureInputs

Add-On for AWS以外にも **[Splunk Infrastructure Monitoring](https://www.splunk.com/ja_jp/software/infrastructure-monitoring.html)**を使って取得できますし、場合によってはそちらのソリューションの方が便利かもしれません。しかし今回は Add-On for AWSを利用してチャレンジしたいと思います。

# CloudWatchの取り込み

CloudWatchのメトリック情報は簡単に取得できます。


## AWS側設定

AWS側では以下の２点が必要です。
1. CloudWatchを取り込めるポリシーを付与したユーザー作成
2. CloudWatchの有効化

###1. CloudWatchを取り込めるポリシーを付与したユーザー作成

ユーザー作成とポリシー付与については以前の[記事](https://qiita.com/maroon/items/0cb042cc239b57e6d66d#3-iam%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E4%BD%9C%E6%88%90)をご覧ください。
ちなみに、全ての権限をセットする場合は[こちら](https://docs.splunk.com/Documentation/AddOns/released/AWS/Permissions)をご覧ください。


###2. CloudWatchの有効化

CloudWatchは基本モニタリング用のメトリックが**デフォルトで有効**になっておりますが、詳細モニタリングをしたい場合や、他のサービスモニタリングしたい場合は、個別に有効にする必要があります。

EC2の**詳細**モニタリングの有効化する場合は[こちら](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-cloudwatch-new.html)

## Splunk側の設定

Splunkに、[「Add-On for AWS」](https://splunkbase.splunk.com/app/1876/) をインストールします。(詳細は割愛）

### AWS アカウントの追加

AWSのポリシー設定をしたユーザーアカウントをこちらに追加します。詳細は[以前の記事](https://qiita.com/maroon/items/0cb042cc239b57e6d66d#splunk%E5%81%B4%E3%81%AE%E8%A8%AD%E5%AE%9A)をご覧ください。

### CloudWatch Input の追加 

[Add-on for AWS] - [Input] - [Create New Input]にて、CloudWatch を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/aa27301f-93f4-d873-16b4-0db8ffb7faa2.png)


CloudWatchの設定画面はこちらです。Accountを指定して、対象のリージョンを選択するだけ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/ae25b4d8-e5c5-1324-0e09-44a4d411b458.png)

取得できる Dimensionsや metricsについては、 (Edit in advanced mode)の箇所をクリックすると確認できます。また自分で追加も可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/51365add-6041-9ee3-26ee-2fd9ba8c2831.png)

取得したいリージョンを指定して、Splunk側のインデックスを選択すれば完了です。

このような感じに私の環境では 26個のメトリック名が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/fd776d45-5359-7bb1-d1bf-40d1a3620256.png)


もし[App for AWS](https://splunkbase.splunk.com/app/1274/)がインストールされていれば、こちらをセットアップすることで以下のようなダッシュボードを確認できます。
<font color="Red">(*) App for AWSは、2022/1 にEOLが予定されております。今後はITSIまたはIT Essential Workのご利用を検討する必要があります. </font>

[トポロジー]
対象のオブジェクトをクリックすると、使用率などのデータが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/65e77d01-caed-3c25-a401-aa7e6fe72b23.png)

基本的なCloudWatchデータ取り込みは以上です。こちらは非常に簡単ですね。



# CloudWatch Logs の取り込み

次にCloudWatch Logsを取り込んでみたいと思います。ただし CloudWatch Logsの前段にあるサービスを何にするかですが、OS内のログも CloudWatch Logs Agentを使って取り込めるようですし、CloudTrailなども CloudWatch Logsに取り込めるようです。また VPC FlowについてもCloudWatch Logsに取り込めるようでして、様々なログを集約する事が可能そうです。

今回はその一つである、VPC Flowログを CloudWatchに取り込んで、それを Splunkに取り込んでみたいと思います。

## ちなみに VPC Flowログとは

VPC フローログは、VPC のネットワークインターフェイスとの間で行き来する IP トラフィックに関する情報をキャプチャできるようにする機能です。 (by AWS Documents) 

そしてこのログをCloudWatch Logs または Amazon S3 に発行できます。とあります。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs.html

利用用途としては、トラフィックのモニタリングはもちろんのこと、通信が出来ないときにセキュリティグループの見直しだったり、トラフィックの方向を確認したりできます。

有効にしたとしても、既存のネットワークパフォーマンスには影響ありません。ただし課金対象になるので取りすぎには注意が必要です。https://aws.amazon.com/jp/cloudwatch/pricing/


## CloudWatch Log Groupの作成

Cloudwatch Logsでは、Log Groupを作成して、そこにログを溜めていきます。なのでまずは LogGroupを作っていきましょう。

[CloudWatch] - [CloudWatch Logs] - [Log Groups] に移動しロググループを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/7b077236-77f3-6e7a-637c-b3800b393ded.png)

ログ自体はSplunkにすぐに取り込まれる予定なので、保持期間を短くしておくといいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/fb950397-1352-46ff-e4ac-ee97e029d7a4.png)

## VPC Flow Log の有効化

次にVPC Flow Logを有効にします。

対象のVPCに移動し「フローログ」タブから「フローログの作成」で作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/dbcb155f-f3e5-a09b-83ff-b8753fa28dd7.png)

作成画面で、先ほど作成した CloudWatch の Log Groupを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/983d733d-d1e8-6164-a615-f707f1fc6895.png)

次に IAMロールを選択します。これは CloudWatch LogGoup にアクセスできる権限をもつIAMロールである必要があります。もし、ない場合は　「権限の設定」から作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/c8313fe6-9063-8a34-e9a3-91299fa85293.png)

必要なポリシーが付与されたロールが作成できます。　そのまま「許可」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/ad5740b7-d881-e723-ac38-6d6ba40d820c.png)

VPC Flowログの設定は以上です。

## AWSからVPCフローを確認してみよう。

それでは Splunkに取り込む前に、VPC Flowログを確認してみたいと思います。

[CloudWatch]-[CloudWatch Logs]-[Loggroups] - [(対象のロググループ)]

フローを確認するためには、ログストリームを作成する必要があります。「ログストリームを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/8248d942-bdb3-eb7f-d414-109326611eec.png)

LogInsightを使って、VPC Flowログを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/05fecc21-0e52-4af3-0bc5-9f2f2cd6264a.png)

もちろん単体であればこれで十分なのですが、複数のログをモニタリングしたり、他のログと相関分析するためにも Splunkに取り込んでおきたいと思います。

## Splunkに取り込む

こちらもすでに Add-On for AWS と App for AWSがインストール済み前提かつ AWSユーザーが登録済みという状態で進みます。

今回は Recommended マークがないですが、Pull型の取り込みである方を選択します。 KinesisによるPUSH型の取り込みは別途チャレンジしたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/67da7d5a-5376-2749-f089-3c294fcbe516.png)

必要な項目を入力します。Region毎に Inputを作成する必要があるのに注意。
また今回はPULL型の方式であり、600 sec の Pollingがデフォルトです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/aebee922-0294-59b8-cf90-a4bc9b08722e.png)

しばらくしてから、取り込めているか確認してみます。
いい感じですねー。Sourcetypeも用意されているので、フィールドもしっかりと抽出されております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/e0663c79-dd3e-e8c5-696f-3e72cc84ab55.png)


## App for AWSで確認してみる

最後に App for AWSのダッシュボードでどのように見えるかチェックしてみましょう！

####VPC Flow Logs - Traffic Analysis画面
トラフィック全体の状況が確認できます。送信元と送信先の割合やアクセスポートの割合など確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/25da3b47-1324-d360-7a0e-4f284ea14932.png)

####VPC Flow Logs - Security Analysis画面
今回のログは全て Accepted なのであまり見栄えがしませんが、Acceptと Reject の Trafficの状況が時系列と地図から確認できます。またソースIPアドレス毎の状況やポート毎の状況がモニタリングできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/c36dde10-1fd3-5cb6-9feb-beddc992f054.png)

###トポリジーView

トポロジーViewでは、対象のInstanceをマウスオーバーすると、Traffic Sizeが確認できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392303/e06f21b1-c272-f2a9-3352-e1681496bfda.png)


# まとめ

如何だったでしょうか？　CloudWatchを取り込めると AWSの稼働状況がより鮮明に確認できるようになりました。運用監視やトルブル時の切り分けや原因解析にも役立ちますし、セキュリティ観点でも役に立ちそうです。

ただしVPC FLowログについては、Kinesisを使った Push型の取り込みが推奨のようなので、今度そちらにもチャレンジしたいと思います。