はじめに
「Amazon CloudFront(以下、CloudFront)のリージョンブロックとAWS WAF(以下、WAF)のIP制限はどっちが先なの?」 つい最近、普段業務を行っている私の所属チームでこんな話題が上がりました。 今回はその際の内容を記事にしてみようと思います。
CloudFrontとWAFについて
昨今のAWSを利用したWebアプリケーションにおいて、 この2つのサービスはスタンダードな構成として広く利用されています。 結論に至る前に、それぞれのサービスについておさらいをしましょう。
Amazon CloudFront
AWSが提供するコンテンツ配信ネットワーク(CDN)サービスです。主に以下のような特徴があります。
- 低レイテンシー: 世界中に分散されたエッジロケーションを利用して、ユーザーに近い場所からコンテンツを配信することで、レイテンシーを低減します。
- 高可用性: 複数のエッジロケーションにコンテンツをキャッシュすることで、可用性を高めます。
- セキュリティ: AWS ShieldやAWS WAFと連携して、DDoS攻撃やその他の脅威からアプリケーションを保護します。
- スケーラビリティ: トラフィックの急増にも対応できるように設計されており、スケーラブルな配信が可能です。
AWS WAF(Web Application Firewall)
AWS WAF(Web Application Firewall)は、Webアプリケーションをさまざまな攻撃から保護するためのファイアウォールサービスです。主に以下のような特徴があります。
- カスタマイズ可能なルール: SQLインジェクションやクロスサイトスクリプティング(XSS)などの一般的な攻撃から保護するためのルールをカスタマイズできます。
- リアルタイムモニタリング: リアルタイムでトラフィックをモニタリングし、異常なパターンを検出してアラートを発行します。
- 統合: CloudFrontやApplication Load Balancer(ALB)と統合して、Webアプリケーション全体のセキュリティを強化します。
- 自動スケーリング: トラフィックの増減に応じて自動的にスケールし、常に最適なパフォーマンスを提供します。
結局どっちが先なの?
結論から言うと、「CloudFront」が先です。 リクエストを受け取るのはWAFではなく、CloudFrontになります。 CloudFrontにて特定のリージョンからのリクエストが最初にブロックされ、 その後にWAFで詳細なルールに基づいて追加のフィルタリングが行われます。 以下は具体的な流れです。
- リクエストはCloudFrontで受け取ります。
- リクエストがCloudFrontのエッジロケーションに到達すると、まずリージョンブロックの設定を確認します。
- リージョンブロックの設定に基づいて、特定のリージョンからのリクエストが拒否される場合、そのリクエストはここでブロックされます。
- リージョンブロックを通過したリクエストは、次にAWS WAFへ転送され処理されます。
- リクエストがリージョンブロックを通過すると、WAFのWeb ACLに基づいて追加のフィルタリングが行われます。
- WAFは、設定されたルールに基づいてリクエストを許可または拒否します。
最後に
私の身近で起きた出来事を記事にして紹介いたしました。 これらのサービスを長く利用してきましたが、改めて理解する良い機会になりました。 皆様の普段のエンジニアライフに少しでも参考になれば幸いです。