WAFとは Web Application Firewall のことを言います。主に SQLインジェクション や クロスサイトスクリプティング など、アプリケーション層の脆弱性を突く攻撃を防ぎます。一般的な企業は WordPress などを利用して企業サイトを構築しています。その後企業が成長するにつれて WordPress では企業サイトの要件などが満たせなくなると、WordPress を止めてオリジナルのサイトに移行していきます。
しかしこれがセキュリティホールとなり、 SQLインジェクション や クロスサイトスクリプティング などで顧客情報がごっそりと漏洩することがあります。サイトをインターネットに公開すると定期的に攻撃が来るものと思わなければいけません。
AWSで企業サイトを構築している場合はAWS WAFを利用することができます。今回はこの AWS WAF について解説したいと思います。
目次
AWSはどのリソースタイプに設定できるか
AWS WAFはAWSのリソースに設定(統合)できます。まずはどのリソースタイプに設定できるか確認します。以下のリソースで、当たり前ですがインターネットにさらされるリソースタイプです。S3バケットもインターネットに晒されますが、基本的にS3バケットをインターネットに公開する際は CloudFront を経由する前提だと思うので S3 単体では WAF を適用できないようです。
- CloudFront
- API Gateway
- ALB(Application Load Balancer)
- AppSync GraphQL API
- Cognito
- App Runner
- Verified Access インスタンス
- Amplify
保護パックとは
AWS WAFを開始する際に「保護パック(ウェブ ACL)を作成」ボタンが表示されます。

保護パックとは何でしょうか。カッコ書きでウェブ ACLと記載があるので従来の WebACL と考えて良さそうです。私もいつの間にか「保護パック」の文言に変わっていたので何だろうと思いました。今後はWeb ACLではなく 保護パック で行くようです。ここら辺の構成を躊躇なく?変更もしくは更新するところはさすがAWSといったところです。
しかし実際現場では「保護パック」という呼び方はあまり浸透していないので従来通りWebACLと呼んだ方が伝わりそうです。そのうち「保護パック」という用語もさらっと消えそうな予感も。
保護パック で、保護されたリソース(CloudFrontなど)が応答するすべての HTTP(S) ウェブリクエストをきめ細かく制御できます。
すべての HTTP(S) ウェブリクエストをきめ細かく制御できるとは?
「保護パック で、保護されたリソース(CloudFrontなど)が応答するすべての HTTP(S) ウェブリクエストをきめ細かく制御できます。」とあります。
すべての HTTP(S)メソッド/Path/Query/Cookie/Headers/Body/JSON Body/サイズなどでしょうか。とりあえず全部ということですね。全部のウェブリクエストをきめ細かく制御できるということで以下の制御が可能です。
ちなみにウェブリクエストとは、Wegブラウザ(Google Chromeなど)がWebサーバーに対して、Webページやデータなどの情報を要求することです。ウェブリクエストを送るとWebサーバーがWebページやデータを返してくれます。
この全てのウェブリクエストに対して、許可したりブロックしたり、様々なルールを組み合わせて制御することができます。組み合わせでかなり複雑な制御ができます。シンプルな制御はAWS管理画面上からGUIで可能ですが、複雑な制御になるとJSONで記載してコピペすることになります。
WAF WebACL の作成手順
保護パック(Web ACL)を作成する際にアプリカテゴリを選択します。

以下のカテゴリがあります。
- コンテンツ及び公開システム
- e コマースおよび取引プラットフォーム
- エンタープライズおよびビジネスアプリケーション
- API および統合サービス
- メディアおよびファイル処理
- その他
どれを選択しても後から自由に変更できます。最初の選択で固定されるわけではありません。
ちなみに選択する目途や観点としては以下のようになっています。
■コンテンツ及び公開システム
静的/動的サイトなど広く一般公開するWeb。例: 企業サイトなど。
■e コマースおよび取引プラットフォーム
決済・カート・会員画面など個人情報の入力が多く攻撃のターゲットにされやすいサイト。
例: EC、クレジット決済、会員登録/ログインなど。
フォーム/クッキー/クエリなどを重点的に構成されている。
■エンタープライズおよびビジネスアプリケーション
社内向け・業務SaaSなど。
■API および統合サービス
APIエンドポイント中心。
■メディアおよびファイル処理
画像/動画/ファイルのアップロード・変換・配信が中心。
例: 画像アップロード、動画アップロードなど。
■その他
上記に当てはまらない、もしくは自分で一から組みたい場合。
アプリケーションフォーカス
アプリケーションフォーカスは以下の3つが選択できます。特に要件がなければ「APIとウェブの両方」を選択します。

「保護するリソースを選択」で「リソースを追加」ボタンをクリックします。

「CloudFront リソースまたは Amplify リソースを追加」を選択します。

初期の保護を選択します。以下の3つのルールから選択できます。
- お客様のために推奨されるルール
- 重要ルール
- AWS WAF が提供するすべての保護から独自のパックを構築

デフォルトのルールアクションを選択します。いきなり WAF でブロックするのではなく、まずは Count で WAF ルールの挙動を確認する場合は、「すべてを Count アクションに設定」を選択します。本番環境の場合は、まずは Count アクションから動作確認をした方が良いと思います。
- Count アクションと Block アクションに推奨のデフォルトを使用する
- すべてを Count アクションに設定

デフォルトで「レート制限」の設定が入っています。下図のような設計ですが、特に極端な設定ではないのでこのままで良いと思います。

ブロックしたい IP アドレスを設定します。

ブロックしたい国を選択します。下図はデフォルトでブロックされている国です。確かに国家としてクラッキングをしていそうな国々ですね。

最後にログを取得する場合はロググループを選択して「保護パック(ウェブ ACL)を作成」ボタンをクリックします。CloudWatch Logs ロググループは、「aws-waf-logs-xxx」の形式で作成しておくと自動的に表示されます。

作成されました。

コメント