APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

CloudFrontでWAF連携とログ出力

目次

はじめに

こんにちは、株式会社エーピーコミュニケーションズ クラウド事業部の松尾です。
コンテンツ配信サービス(CDN)のCloudFrontですが、ログ出力が1時間に数回だと知ってましたか?私は知りませんでした。てっきりログ出力はリアルタイムに行われるものと思っていましたが違ったようです。
リアルタイムに行うにはFirehoseを経由させることで可能になるとの情報を掴んだので検証してみようと思います。

docs.aws.amazon.com

ゴール

本記事でお伝えすることは次の内容です。

  • CloudFrontでのWAF設定
  • CloudFrontで標準ログをリアルタイムに取得する設定

前提

本検証はJP Contents HUBのCloudFrontハンズオン に沿った内容となっています。CloudFrontの構築までは完了した状態から始めていきます。

リソースの状態としては、CloudFront~ALB~EC2の経路でWebアプリケーションを表示することが出来ている状態。赤枠内のログ出力部分の動作を検証していきます。

上記CloudFrontハンズオンリンク内の構成図より

ログ保存用 Kinesis Firehose の作成

CloudFrontでWAFを有効にする前に、ログ保存用のFirehoseを作成していきます。 ソースは後ほどCloudFrontから設定するのでDirect PUT、送信先はS3とします。

Web ACLの作成

続いてWAFのWeb ACLを作成していきます。

ルールにはAdd rulesからCore rule setを追加。

他はデフォルト値で作成していきます。

Web ACLが作成された

AWS WAF のログ設定

作成したWeb ACLをCloudFrontディストリビューションで有効にしていきます。

ログ出力先に、作成したFirehoseのリソースを選択する。

ログ出力が有効になったことを確認。

ログ出力をするためにCloudFront経由のブラウザを3回ほど更新をかける。

このような画面で3回更新

AWS WAF ログの確認

S3バケットにログが書き込まれているので、「S3 Selectを使用したクエリ」でログを確認していきます。

入力形式と出力形式をJSONに設定。

「SQLクエリの実行」をクリックすると、クエリ結果としてログを取得することが出来ました!

まとめ

CloudFrontでリアルタイムにログを取得する方法を検証しました。今回の検証内容は一度のアクセス直後に確認しただけなのでリアルタイム感は小さかったですが、確かにアクセス直後にログを確認することが出来ました。 「S3 Selectを使用したクエリ」は手動のため大量のログには向かないとは思いますが、気軽に確認することはメリットとなっています。Athenaを使うと統計情報等をSQLを使用して取得できるのでこちらの方が汎用性はあるかもしれません。

おわりに

私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です! ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp