VPC Flow LogsをすぐにAthenaでクエリできる。そんな機能が出ました
- What's New
- 公式ドキュメント
やってみよう
最初の状態
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バケットを1作っておきます。これは今回のAthena統合で使うCFnテンプレートやAthenaクエリ結果の保存先バケットとして使います
Athena統合
Athena統合スタート
- 対象のVPCにチェックを入れ
- 下部のタブで"フローログ"をクリック
- 作成したフローログ。ここでは"aes-siem-flowlogs"にチェックを入れ
- その少し右上の[アクション]をクリックし、[Athena統合を生成]をクリックする
Athena統合を生成画面
以下を入力し、右下の[Athena統合を生成]をクリック
- 「ロード頻度のパーティション」を指定。ここでは"毎日"を指定
- 「パーティションの開始日」「パーティションの終了日」を指定。ここでは画面の通りの日付を入力。これはAthenaが認識するパーティションになります。yyyy/MM/ddでパーティションが切られてるので、日付ごとにスキャン出来てコスパがいい形です。
- 「CloudFormationテンプレートS3バケット」を指定。ここでは事前に作成したS3バケットを指定します。
- 「クエリ結果S3バケット」を指定。ここでは事前に作成したS3バケットを指定します。
- プレフィックは必要に応じて入力してください。上記で指定したバケット配下のディレクトリになります。
VPCの画面に自動で戻る
VPCの画面に自動で戻ります。そしたら右上に[CloudFormationスタックの作成]ボタンが出てるのでそれをクリックする
CloudFormation実行
クリックするとCloudFormationの画面に遷移します
- 最初の画面はそのまま[次へ]
- 次の画面でスタック名を任意の名前入れて[次へ]。ここではtmp-vpcとしました。
- 次の画面はそのまま[次へ]
- 最後の画面は"AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。"にチェックを入れて、右下の[スタックの作成]をクリック
- 数分すると完了します。
完了したらAthenaを開く
Athenaを開いたら、先程のCloudFormationの実行で作成されたAthena ワークグループを選択します。(興味があればCloudFormationテンプレートも読んでみてください)
手順は、Athenaの画面から右上か真ん中の上部辺りの"ワークグループ"を選びます
長い名前のワークグループがあります。それが今回作成されたものです。それにチェック入れて、画面上部の[ワークグループを切り替える]をクリックします。2回くらい注意事項がポップアップしますが[次へ]などクリックして進めます
AthenaでVPC FlowLogsをクエリ
作成されたデータベースを選択し、該当のテーブル(多分1つしかないと思います)を対象にクエリを実行します。
画面では、対象のテーブル名の右横にある点々をクリックし、"テーブルのプレビュー"をクリックし、select...limit 10を実行しています。
定義済みクエリを実行
Athenaの画面の上の方にある"保存したクエリ"をクリックする
CloudFormationによって自動作成された定義済のクエリが出てきます。
対象のクエリをクリックすると、クエリが入力された状態でエディタの画面に遷移します。あとはクエリ実行するだけです
このクエリだと、トラフィックが多い送信元IPアドレスを、トラフィック量の多い順番で表示してます。
VpcFlowLogsTopTalkers –最も多くのトラフィックが記録された50個のIPアドレス。
このクエリだと、SGやNACLで拒否されたIPアドレスのリストを拒否された数でソートして表示しています。
VpcFlowLogsRejectedTraffic –セキュリティグループまたはネットワークACLに基づいて拒否されたトラフィック。
事前定義クエリはこんな感じです
- 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アドレスに対して記録されたトラフィック。