AWS WAF の新しいコンソールエクスペリエンスのご紹介
更新されたエクスペリエンスを使用して、コンソールの任意の場所で AWS WAF 機能にアクセスできるようになりました。詳細については、「更新されたコンソールエクスペリエンスを使用する」を参照してください。
AWS WAF で CloudFront ディストリビューションを保護するための一般的なユースケース
以下の AWS WAF 機能は、すべての CloudFront ディストリビューションで同じように機能します。マルチテナントディストリビューションに関する考慮事項は、各機能シナリオの後に一覧表示されます。
CloudFront カスタムエラーページでの AWS WAF の使用
デフォルトでは、指定した条件に基づいて AWS WAF によってウェブリクエストがブロックされると、HTTP ステータスコード 403 (Forbidden) が CloudFront に返され、CloudFront はそのステータスコードをビューワーに返します。ビューワーには、次のような簡潔で特に書式設定されていないデフォルトメッセージが表示されます。
Forbidden: You don't have permission to access /myfilename.html on this server.
カスタムレスポンスを定義することにより、AWS WAF 保護パック (ウェブ ACL) ルールでこの動作をオーバーライドできます。AWS WAF ルールを使用したレスポンス動作のカスタマイズの詳細については、「Block アクションのカスタムレスポンスの送信」を参照してください。
注記
AWS WAF ルールを使用してカスタマイズした応答は、CloudFront カスタムエラーページで定義した応答の仕様よりも優先されます。
場合によってウェブサイトの他の部分と同じフォーマットを使用して、CloudFront を介してカスタムエラーメッセージを表示したい場合は、カスタムエラーメッセージを含むオブジェクト (HTML ファイルなど) をビューワーに返すように CloudFront を設定できます 。
注記
CloudFront は、オリジンによって返された HTTP ステータスコード 403 と、リクエストがブロックされたときに AWS WAF によって返された HTTP ステータスコード 403 とを区別できません。つまり、HTTP ステータスコード 403 のさまざまな原因に基づいて、異なるカスタムエラーページを返すことはできません。
CloudFront カスタムエラーページの詳細については、「Amazon CloudFront デベロッパーガイド」の「カスタムエラーレスポンスの生成」を参照してください。
マルチテナントディストリビューションのカスタムエラーページ
CloudFront マルチテナントディストリビューションでは、次の方法でカスタムエラーページを設定できます。
-
マルチテナントレベル - これらの設定は、マルチテナントディストリビューションテンプレートを使用するすべてのテナントディストリビューションに適用されます。
-
AWS WAF ルール経由 - 保護パック (ウェブ ACL) で定義されたカスタムレスポンスは、マルチテナントディストリビューションとテナントレベルのカスタムエラーページの両方よりも優先されます。
独自の HTTP サーバーで実行されているアプリケーションへの CloudFront での AWS WAF の使用
AWS WAF と CloudFront を使用すると、Amazon Elastic Compute Cloud (Amazon EC2) で実行されている Web サーバーであるか、個人的に管理している Web サーバーかにかかわらず、任意の HTTP Web サーバーで実行されているアプリケーションを保護できます。CloudFront と独自のウェブサーバー間、およびビューワーと CloudFront の間で HTTPS が必須になるように CloudFront を設定することもできます。
CloudFront と独自のウェブサーバー間での HTTPS の必須化
CloudFront と独自のウェブサーバー間で HTTPS を必須にするには、CloudFront カスタムオリジン機能を使用し、特定のオリジンの [Origin Protocol Policy] (オリジンプロトコルポリシー) および [Origin Domain Name] (オリジンドメイン名) の設定を構成します。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 経由で CloudFront ディストリビューションに接続できるようにすることもできます (例: https://www.mysite.com)。詳細については、「Amazon CloudFront デベロッパーガイド」の「代替ドメイン名とHTTPS を使用する」のトピックを参照してください。
マルチテナントディストリビューションの場合、HTTP メソッド設定は次の階層に従います。
-
テンプレートレベルの設定は、すべてのテナントディストリビューションで許可されるベースライン HTTP メソッドを定義します。
-
テナントディストリビューションは、これらの設定を次のようにオーバーライドできます。
-
マルチテナントディストリビューションよりも少ないメソッドを許可する (AWS WAF ルールを使用して追加のメソッドをブロックする)
-
マルチテナントディストリビューションがサポートするように設定されている場合、より多くのメソッドを許可する
-
-
マルチテナントディストリビューションレベルとテナントレベルの両方の AWS WAF ルールは、CloudFront 設定に関係なく HTTP メソッドをさらに制限できます。
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 がサポートするメソッドの組み合わせ (GET や HEAD など) を使用する場合は、他のメソッドを使用するリクエストをブロックするように AWS WAF を設定する必要はありません。CloudFront がサポートしないメソッドの組み合わせ (GET、HEAD、POST など) を使用する場合は、すべてのメソッドに応答するように CloudFront を設定してから、AWS WAF により他のメソッドを使用するリクエストをブロックできます。
が応答するメソッドの選択の詳細については、「Amazon CloudFront デベロッパーガイド」で「ウェブディストリビューションを作成または更新する場合に指定する値」トピックの「許可される HTTP メソッド」を参照してください。
HTTP メソッド設定がマルチテナントディストリビューションで許可されている
マルチテナントディストリビューションの場合、マルチテナントディストリビューションレベルで設定された HTTP メソッド設定は、デフォルトですべてのテナントディストリビューションに適用されます。テナントディストリビューションは、必要に応じてこれらの設定をオーバーライドできます。
-
CloudFront がサポートするメソッドの組み合わせ (
GETやHEADなど) を使用する場合は、他のメソッドを使用するリクエストをブロックするように AWS WAF を設定する必要はありません。 -
CloudFront がデフォルトではサポートしないメソッドの組み合わせ (
GET、HEAD、POSTなど) を使用する場合は、すべてのメソッドに応答するように CloudFront を設定してから、AWS WAF により他のメソッドを使用するリクエストをブロックできます。
マルチテナントディストリビューションにセキュリティヘッダーを実装する場合は、次の点を考慮してください。
-
テンプレートレベルのセキュリティヘッダーは、すべてのテナントディストリビューションでベースライン保護を提供します
-
テナントディストリビューションは次のことができます。
-
マルチテナントディストリビューションで定義されていない新しいセキュリティヘッダーを追加する
-
テナント固有のヘッダーの値を変更する
-
マルチテナントディストリビューションレベルで設定されたセキュリティヘッダーを削除またはオーバーライドすることはできません
-
-
すべてのテナントに適用する必要がある重要なセキュリティコントロールには、マルチテナントディストリビューションレベルのヘッダーを使用することを検討してください。
ログ記録に関する考慮事項
標準ディストリビューションとマルチテナントディストリビューションの両方が AWS WAF ログ記録をサポートしていますが、ログの構造と管理方法には重要な違いがあります。
| 標準ディストリビューション | マルチテナントディストリビューション |
|---|---|
| ディストリビューションごとに 1 つのログ設定 | テンプレートとテナントレベルのログ記録オプション |
| 標準ログフィールド | 追加のテナント識別子フィールド |
| ディストリビューションごとに 1 つの送信先 | マルチテナントディストリビューションとテナントログに可能な別々の送信先 |
その他のリソース
-
マルチテナントディストリビューションの詳細については、「Amazon CloudFront デベロッパーガイド」の「ディストリビューションの設定」を参照してください。
-
CloudFront での AWS WAF の使用の詳細については、「Amazon CloudFront デベロッパーガイド」の「AWS WAF 保護の使用」を参照してください。
-
AWS WAF ログの詳細については、「保護パック (ウェブ ACL) トラフィックのログフィールド」を参照してください。