Amazon CloudFront 機能での AWS WAF の動作 - AWS WAF、AWS Firewall Manager、および AWS Shield アドバンスド

Amazon CloudFront 機能での AWS WAF の動作

ウェブ ACL を作成するときに、AWS WAF で検査する 1 つ以上の CloudFront ディストリビューションを指定できます。AWS WAF は、ウェブ ACL で指定した条件に基づいて、それらのディストリビューションに対するウェブリクエストを許可、ブロック、またはカウントし始めます。CloudFront には、AWS WAF の機能を強化するいくつかの機能が用意されています。この章では、CloudFront と AWS WAF がより効果的に連携するように CloudFront を設定できるいくつかの方法について説明します。

CloudFront カスタムエラーページでの AWS WAF の使用

AWS WAF は、指定した条件に基づいてウェブリクエストをブロックすると、CloudFront に HTTP ステータスコード 403 (Forbidden) を返します。次に、CloudFront はそのステータスコードをビューワーに返します。ビューワーには、以下のような簡潔で特に書式設定されていないデフォルトメッセージが表示されます。

Forbidden: You don't have permission to access /myfilename.html on this server.

デフォルトメッセージはなく、お客様のウェブサイトの他のページと同じ書式設定のカスタムエラーメッセージを表示することを希望する場合は、カスタムエラーメッセージを含むオブジェクト (HTML ファイルなど) をビューワーに返すように CloudFront を設定できます。

注記

CloudFront は、オリジンによって返された HTTP ステータスコード 403 と、リクエストがブロックされたときに AWS WAF によって返された HTTP ステータスコード 403 とを区別できません。つまり、HTTP ステータスコード 403 のさまざまな原因に基づいて、異なるカスタムエラーページを返すことはできません。

CloudFront のカスタムエラーページの詳細については、Amazon CloudFront 開発者ガイドの「エラーレスポンスのカスタマイズ」を参照してください。

CloudFront の地域制限下での AWS WAF の使用

Amazon CloudFront の地域制限 (地理的ブロッキング) 機能を使用すると、CloudFront ウェブディストリビューションを通じて配信しているコンテンツについて、特定地域のユーザーによるアクセスを回避できます。特定の国からのウェブリクエストをブロックし、その他の条件に基づいてもリクエストをブロックする場合は、AWS WAF と組み合わせて CloudFront の地域制限を使用できます。CloudFront は、CloudFront の地域制限拒否リストにある国からコンテンツにアクセスしようとしているかどうか、AWS WAF によってリクエストがブロックされているかどうかにかかわらず、ビューワーに同じ HTTP ステータスコード —HTTP 403 (Forbidden)— を返します。

注記

ウェブ ACL のウェブリクエストのサンプルで、リクエストの発生元の国の 2 文字の国コードを表示できます。詳細については、「ウェブリクエストのサンプルの表示」を参照してください。

CloudFront の地域制限の詳細については、Amazon CloudFront 開発者ガイドの「コンテンツの地理的ディストリビューションの制限」を参照してください。

独自の HTTP サーバーで実行されているアプリケーションへの CloudFront での AWS WAF の使用

AWS WAF と CloudFront を使用すると、Amazon Elastic Compute Cloud (Amazon EC2) で実行されている Web サーバーであるか、個人的に管理している Web サーバーかにかかわらず、任意の HTTP Web サーバーで実行されているアプリケーションを保護できます。CloudFront と独自の Web サーバー間、およびビューワーと CloudFront の間で HTTPS が必須になるように CloudFront を設定することもできます。

CloudFront と独自の Web サーバー間で HTTPS を必須にする

CloudFront と独自の Web サーバー間で HTTPS を必須にするには、CloudFront カスタムオリジン機能を使用し、特定のオリジンのオリジンプロトコルポリシーオリジンドメイン名の設定を構成します。CloudFront 設定では、オリジンからオブジェクトをフェッチするとき CloudFront で使用するポートとプロトコルとともに、サーバーの DNS 名を指定できます。また、カスタムオリジンサーバー上の SSL/TLS 証明書が、設定したオリジンドメイン名と一致することを確認する必要もあります。AWS の外部にある独自の HTTP ウェブサーバーを使用している場合、信頼されたサードパーティー認証機関 (CA) (Comodo、DigiCert、Symantec など) によって署名された証明書を使用する必要があります。CloudFront と独自のウェブサーバー間の通信で HTTPS を必須にする方法の詳細については、『Amazon CloudFront 開発者ガイド』の「CloudFront と使用するカスタムオリジン間の通信で HTTPS を必須にする」を参照してください。

ビューワーと CloudFront 間で HTTPS を必須にする

ビューワーと CloudFront 間で HTTPS を必須にするには、CloudFront ディストリビューションの 1 つ以上のキャッシュ動作のビューワープロトコルポリシーを変更します。ビューワーと CloudFront 間で HTTPS を使用する方法の詳細については、『Amazon CloudFront 開発者ガイド』の「ビューワーと CloudFront 間の通信で HTTPS を必須にする」を参照してください。また、独自の SSL 証明書を持参して、ビューワーが独自のドメイン名 (https://www.mysite.com など) を使用して HTTPS 経由で CloudFront ディストリビューションに接続できるようにすることもできます。詳細については、『Amazon CloudFront 開発者ガイド』の「代替ドメイン名と HTTPS の設定」を参照してください。

CloudFront が応答する HTTP メソッドの選択

Amazon CloudFront のウェブディストリビューションを作成するときは、CloudFront によって処理されてオリジンに転送される HTTP メソッドを選択します。以下のオプションから選択できます。

  • [GET, HEAD] – CloudFront を使用して、オリジンからのオブジェクトの取得またはオブジェクトヘッダーの取得のみを行うことができます。

  • [GET, HEAD, OPTIONS] – CloudFront を使用して、オリジンからのオブジェクトの取得、オブジェクトヘッダーの取得、またはオリジンサーバーがサポートするオプションのリスト取得のみを行うことができます。

  • [GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE] – CloudFront を使用して、オブジェクトの取得、追加、更新、削除、およびオブジェクトヘッダーの取得を行うことができます。また、ウェブフォームからのデータの送信など、その他の POST 操作も実行できます。

また、AWS WAF バイト一致ルールステートメントを使用して、HTTP メソッドに基づいてリクエストを許可またはブロックすることもできます(「文字列一致ルールステートメント」を参照)。CloudFront がサポートするメソッドの組み合わせ (GETHEAD など) を使用する場合は、他のメソッドを使用するリクエストをブロックするように AWS WAF を設定する必要はありません。CloudFront がサポートしないメソッドの組み合わせ (GETHEADPOST) を使用する場合は、すべてのメソッドに応答するように CloudFront を設定してから、AWS WAF により他のメソッドを使用するリクエストをブロックできます。

CloudFront が応答するメソッドの選択の詳細については、Amazon CloudFront 開発者ガイドで「ウェブディストリビューションを作成または更新する場合に指定する値」トピックの「許可される HTTP メソッド」を参照してください。