目次
はじめに
こんにちは、株式会社エーピーコミュニケーションズ クラウド事業部の松尾です。
コンテンツ配信サービス(CDN)のCloudFrontですが、ログ出力が1時間に数回だと知ってましたか?私は知りませんでした。てっきりログ出力はリアルタイムに行われるものと思っていましたが違ったようです。
リアルタイムに行うにはFirehoseを経由させることで可能になるとの情報を掴んだので検証してみようと思います。
ゴール
本記事でお伝えすることは次の内容です。
- CloudFrontでのWAF設定
- CloudFrontで標準ログをリアルタイムに取得する設定
前提
本検証はJP Contents HUBのCloudFrontハンズオン に沿った内容となっています。CloudFrontの構築までは完了した状態から始めていきます。
リソースの状態としては、CloudFront~ALB~EC2の経路でWebアプリケーションを表示することが出来ている状態。赤枠内のログ出力部分の動作を検証していきます。
ログ保存用 Kinesis Firehose の作成
CloudFrontでWAFを有効にする前に、ログ保存用のFirehoseを作成していきます。 ソースは後ほどCloudFrontから設定するのでDirect PUT、送信先はS3とします。
Web ACLの作成
続いてWAFのWeb ACLを作成していきます。
ルールにはAdd rulesからCore rule setを追加。
他はデフォルト値で作成していきます。
AWS WAF のログ設定
作成したWeb ACLをCloudFrontディストリビューションで有効にしていきます。
ログ出力先に、作成したFirehoseのリソースを選択する。
ログ出力が有効になったことを確認。
ログ出力をするためにCloudFront経由のブラウザを3回ほど更新をかける。
AWS WAF ログの確認
S3バケットにログが書き込まれているので、「S3 Selectを使用したクエリ」でログを確認していきます。
入力形式と出力形式をJSONに設定。
「SQLクエリの実行」をクリックすると、クエリ結果としてログを取得することが出来ました!
まとめ
CloudFrontでリアルタイムにログを取得する方法を検証しました。今回の検証内容は一度のアクセス直後に確認しただけなのでリアルタイム感は小さかったですが、確かにアクセス直後にログを確認することが出来ました。 「S3 Selectを使用したクエリ」は手動のため大量のログには向かないとは思いますが、気軽に確認することはメリットとなっています。Athenaを使うと統計情報等をSQLを使用して取得できるのでこちらの方が汎用性はあるかもしれません。
おわりに
私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
また、一緒に働いていただける仲間も募集中です! ご興味持っていただけましたらぜひお声がけください。