簡単に、VPC FlowLogsをAthenaでクエリ

### VPC Flow LogsをすぐにAthenaでクエリできる。そんな機能が出ました

* What's New

https://aws.amazon.com/jp/about-aws/whats-new/2021/04/amazon-vpc-flow-logs-announces-out-of-box-integration-with-amazon-athena/

* 公式ドキュメント

https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html

# やってみよう

## 最初の状態

### VPC Flow LogsをS3に出力する設定がされてる状態とします。手順は以下にあるのでご参照ください

* 公式(ちょっとこまかい)
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs-s3.html

* クラメソさんブログ
https://dev.classmethod.jp/articles/vpcflowlogs_to_s3/

### 任意のS3バケット作成

S3バケットを１作っておきます。これは今回のAthena統合で使うCFnテンプレートやAthenaクエリ結果の保存先バケットとして使います

## Athena統合

### Athena統合スタート

* 対象のVPCにチェックを入れ
* 下部のタブで"フローログ"をクリック
* 作成したフローログ。ここでは"aes-siem-flowlogs"にチェックを入れ
* その少し右上の[アクション]をクリックし、[Athena統合を生成]をクリックする

![スクリーンショット 0003-04-16 10.49.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/e8fc36f2-a023-71a0-5698-82ffe9661164.png)

### Athena統合を生成画面

以下を入力し、右下の[Athena統合を生成]をクリック

* 「ロード頻度のパーティション」を指定。ここでは"毎日"を指定
* 「パーティションの開始日」「パーティションの終了日」を指定。ここでは画面の通りの日付を入力。これはAthenaが認識するパーティションになります。yyyy/MM/ddでパーティションが切られてるので、日付ごとにスキャン出来てコスパがいい形です。
* 「CloudFormationテンプレートS3バケット」を指定。ここでは事前に作成したS3バケットを指定します。
* 「クエリ結果S3バケット」を指定。ここでは事前に作成したS3バケットを指定します。
* プレフィックは必要に応じて入力してください。上記で指定したバケット配下のディレクトリになります。

![スクリーンショット 0003-04-16 10.54.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/12b43d7c-d641-5268-8a17-7e38883a33f7.png)

### VPCの画面に自動で戻る

VPCの画面に自動で戻ります。そしたら右上に[CloudFormationスタックの作成]ボタンが出てるのでそれをクリックする

![スクリーンショット 0003-04-16 11.01.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/2f90af93-6416-c9ec-8198-9dfe5c08b59e.png)

### CloudFormation実行

クリックするとCloudFormationの画面に遷移します

* 最初の画面はそのまま[次へ]
* 次の画面でスタック名を任意の名前入れて[次へ]。ここではtmp-vpcとしました。
* 次の画面はそのまま[次へ]
* 最後の画面は"AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。"にチェックを入れて、右下の[スタックの作成]をクリック
* 数分すると完了します。

![スクリーンショット 0003-04-16 11.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/a3bf7033-90a4-60e2-b368-e077903cc1cf.png)

### 完了したらAthenaを開く

Athenaを開いたら、先程のCloudFormationの実行で作成されたAthena ワークグループを選択します。(興味があればCloudFormationテンプレートも読んでみてください)
手順は、Athenaの画面から右上か真ん中の上部辺りの"ワークグループ"を選びます

![スクリーンショット 0003-04-16 11.07.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/b4a51399-75b5-773d-c676-5cb6be2f471f.png)

長い名前のワークグループがあります。それが今回作成されたものです。それにチェック入れて、画面上部の[ワークグループを切り替える]をクリックします。2回くらい注意事項がポップアップしますが[次へ]などクリックして進めます

![スクリーンショット 0003-04-16 11.09.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/bf9dbd00-5c7a-6648-694c-311800c91e2f.png)

### AthenaでVPC FlowLogsをクエリ

作成されたデータベースを選択し、該当のテーブル(多分1つしかないと思います)を対象にクエリを実行します。
画面では、対象のテーブル名の右横にある点々をクリックし、"テーブルのプレビュー"をクリックし、select...limit 10を実行しています。

![スクリーンショット 0003-04-16 11.47.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/39fbd0ed-7f73-1090-de02-c5e4bd64b745.png)


### 定義済みクエリを実行

Athenaの画面の上の方にある"保存したクエリ"をクリックする
CloudFormationによって自動作成された定義済のクエリが出てきます。
対象のクエリをクリックすると、クエリが入力された状態でエディタの画面に遷移します。あとはクエリ実行するだけです

![スクリーンショット 0003-04-16 11.31.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/be1f072d-785f-d2de-194a-004b4fcb1da7.png)

このクエリだと、トラフィックが多い送信元IPアドレスを、トラフィック量の多い順番で表示してます。
VpcFlowLogsTopTalkers –最も多くのトラフィックが記録された50個のIPアドレス。

![スクリーンショット 0003-04-16 11.38.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/785505fe-3479-227b-88a6-1cbeca028bed.png)

このクエリだと、SGやNACLで拒否されたIPアドレスのリストを拒否された数でソートして表示しています。
VpcFlowLogsRejectedTraffic –セキュリティグループまたはネットワークACLに基づいて拒否されたトラフィック。

![スクリーンショット 0003-04-16 11.43.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/e96b2fe3-0aeb-d4fc-6409-12eebda16a27.png)


#### 事前定義クエリはこんな感じです

https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html#predefined-queries

* VpcFlowLogsAcceptedTraffic –セキュリティグループとネットワークACLに基づいて許可されたTCP接続。
* VpcFlowLogsAdminPortTraffic –管理Webアプリポートに記録されたトラフィック。
* VpcFlowLogsIPv4Traffic –記録されたIPv4トラフィックの合計バイト数。
* VpcFlowLogsIPv6Traffic –記録されたIPv6トラフィックの合計バイト数。
* VpcFlowLogsRejectedTCPTraffic –セキュリティグループまたはネットワークACLに基づいて拒否されたTCP接続。
* VpcFlowLogsRejectedTraffic –セキュリティグループまたはネットワークACLに基づいて拒否されたトラフィック。
* VpcFlowLogsSshRdpTraffic –SSHおよびRDPトラフィック。
* VpcFlowLogsTopTalkers –最も多くのトラフィックが記録された50個のIPアドレス。
* VpcFlowLogsTopTalkersPacketLevel –最も多くのトラフィックが記録された50個のパケットレベルのIPアドレス。
* VpcFlowLogsTopTalkingInstances –トラフィックが最も多く記録された50個のインスタンスのID。
* VpcFlowLogsTopTalkingSubnets –最も多くのトラフィックが記録された50個のサブネットのID。
* VpcFlowLogsTopTCPTraffic –送信元IPアドレスに対して記録されたすべてのTCPトラフィック。
* VpcFlowLogsTotalBytesTransferred –最も多くのバイトが記録された50ペアの送信元IPアドレスと宛先IPアドレス。
* VpcFlowLogsTotalBytesTransferredPacketLevel –最も多くのバイトが記録されたパケットレベルの送信元IPアドレスと宛先IPアドレスの50ペア。
* VpcFlowLogsTrafficFrmSrcAddr –特定の送信元IPアドレスに対して記録されたトラフィック。
* VpcFlowLogsTrafficToDstAddr –特定の宛先IPアドレスに対して記録されたトラフィック。