AWS WAF 対応の Application Load Balancer と AWS Global Accelerator を使用して、リクエストメソッドが POST の場合、またはユーザーエージェントのヘッダー値が curl/7.79 と一致する場合、アプリケーションへのリクエストをブロックしたいと考えています。
簡単な説明
AWS WAF とグローバルアクセラレータを備えたアプリケーションロードバランサーを使用して、レイヤー 7 HTTP メソッドとヘッダーへのアクセスをブロックできます。このアーキテクチャでは、AWS WAF はアプリケーションロードバランサーでウェブアクセスコントロールリスト (ウェブ ACL) ルールを使用します。ロードバランサーはグローバルアクセラレータのエンドポイントになります。
**注:**AWS グローバルアクセラレータ自体は AWS WAF をサポートしていません。
ロードバランサーに関連付けられたウェブ ACL ルールは、受信トラフィックを評価し、ルール準拠のリクエストのみをエンドポイントに転送します。
解決方法
ウェブ ACL ルールにより、保護対象リソースへのすべての HTTP (S) ウェブリクエストをきめ細かく制御することができます。ルールを使用して、ユニフォームリソース識別子 (URI)、クエリ文字列、HTTP メソッド、ヘッダーキーなどの 1 つ以上のリクエスト属性と一致する文字列または正規表現を設定します。
前提条件
ルールベースのウェブ ACL の作成
次の 3 ステップのプロセスを使用して、ルールベースのウェブ ACL を作成します。詳細については、「バケットの作成」を参照してください。
ウェブ ACL の作成
- AWS WAF コンソールに移動してウェブ ACL を作成します。
- [ウェブ ACL の作成] を選択します。
- ウェブ ACL に名前を付けます。アプリケーションロードバランサーのリージョンを選択します。
- アプリケーション負荷分散をウェブ ACL に関連付けます。
- [次へ] を選択します。
ウェブ ACL にカスタムルールを追加
続けて以下のように設定してください。
- [ルールを追加] を選択します。ドロップダウンから**[自分のルールとルールグループを追加]** を選択します。
- ルールビルダーで、ルールを追加します。
- ルールに名前を付けます (たとえば、\ _User-Agent\ _with\ _POSTを拒否する)。
- 「タイプ」 で「標準ルール」を選択します。
ルールの一致条件を設定します
残りのステップを完了してください。
-
少なくとも 1 つのステートメント (OR) に一致するものを選択してください。
-
ステートメント 1 では、次のように記入してください。
**検査:**シングルヘッダー
**ヘッダーフィールド名:**ユーザーエージェント
**マッチタイプ:**文字列と完全に一致します
**一致する文字列:**curl/7.79.0
ステートメント 2 では、次のように記入してください。
**検査:**HTTP メソッド
**マッチタイプ:**文字列と完全に一致します
**一致する文字列:**ポスト
-
アクションをブロックを選択します。
ユーザーエージェントのヘッダー値を使用して結果をテストします
GET リクエストメソッドを使用して、グローバルアクセラレータの URL とユーザーエージェントヘッダー値 ** curl/7.79.0,**を使用してアプリケーションにアクセスします。
curl http://<your Global Accelerator URL> -v -H "User-Agent:curl/7.79.0"
> GET / HTTP/1.1
> Host: <your Global Accelerator DNS>
> User-Agent:curl/7.79.0
< HTTP/1.1 403 Forbidden
< Server: awselb/2.0
<
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>
注: <your Global Accelerator URL> グローバルアクセラレータの URL を入力してください。お使いの DNS で <your Global Accelerator DNS> 置き換えられます。
AWS WAF がリクエストをブロックし、Application Load Balancer が 403 Forbidden メッセージで応答したことに注意してください。
POST リクエストで結果をテストする
POST リクエストメソッドを使用して、グローバルアクセラレータの URL とユーザーエージェントヘッダー値 curl/7.79.1 を使用してアプリケーションにアクセスします。
curl -X POST http://<your Global Accelerator URL> --user "test-user:test-password" -v
> POST / HTTP/1.1
> Host: <your Global Accelerator DNS>
> Authorization: Basic dGVzdC11c2VyOnRlc3QtcGFzc3dvcmQ=
> User-Agent: curl/7.79.1
>
< HTTP/1.1 403 Forbidden
< Server: awselb/2.0
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>
注: <your Global Accelerator URL> グローバルアクセラレータの URL を入力してください。お使いの DNS で <your Global Accelerator DNS> 置き換えられます。
AWS WAF がリクエストをブロックし、Application Load Balancer が 403 Forbidden メッセージで応答したことに注意してください。