ひとことで言うと
HTTP(S)リクエストを条件で判定して通す・止めるファイアウォールです。IPアドレス・ヘッダー・クエリ文字列といったリクエストの形を見て判断します。
要するに、入館ゲートの持ち物検査です。誰が何を持って入ろうとしているか(送信元IP・ヘッダー・リクエストの形)は見ますが、建物の中で交わされる会話の中身までは判定しません。「悪意のある発言をしようとしている来訪者」を弾くのは、ゲートの持ち物検査ではなく建物内の別の係(Guardrails)の仕事です。
なぜ生まれたか
| WAFが無いと | 受け皿 |
|---|---|
| 既知の攻撃パターン(SQLi・XSS等)を個別のアプリで実装するしかない | AWS管理ルールグループで既製の防御を適用 |
| 大量リクエストによる過負荷・コスト暴走を止められない | レートベースのルールで単位時間あたりのリクエスト数を制限 |
| 保護対象ごとに別々の仕組みを組む | CloudFront・API Gateway・ALB・AppSync・Cognitoユーザープール・Bedrock AgentCore Gatewayなど複数のリソースタイプを同じ仕組みで保護 |
WAFの保護対象リストにはAmazon Bedrock AgentCore Gatewayが明記されています。エージェントの外向きゲートウェイもHTTP(S)エンドポイントである以上、他のWebアプリと同じ層の防御が効くという位置づけです。
何に使うか
| 用途 | 使い方 | 関連ドメイン |
|---|---|---|
| Bedrock AgentCore Gatewayの保護 | Web ACLを関連付けてリクエストを検査 | D2・D3 |
| Cognitoユーザープール(認証フロントエンド)の保護 | Web ACLをユーザープールに直接関連付け | D3 |
| API GatewayやALB経由のGenAIアプリ保護 | 既知の攻撃パターン・ボットをマネージドルールで遮断 | D3 |
| 過剰なAPI呼び出しの抑制 | レートベースルールで単位時間あたりのリクエスト数を制限 | D3・D4 |
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけの選択肢 |
|---|---|---|
| 生成AIチャットボットへのプロンプトインジェクション・ジェイルブレイクを防ぎたい | WAFはHTTPリクエストの形しか見ない。自然言語の意味的な攻撃検知はBedrock Guardrailsのコンテンツフィルタ(Prompt Attack)の役目 | WAFのルールでプロンプトインジェクションを止めようとする |
| Bedrock AgentCore Gatewayへの既知の攻撃パターン(SQLi・XSS等)を防ぎたい | AWS管理ルールグループをWeb ACLに追加 | Guardrailsだけで済ませようとする(Guardrailsはモデルの入出力層、WAFはHTTP層で役割が異なる) |
| エージェントのAPIエンドポイントに短時間で大量のリクエストが来て、モデル推論コストが跳ね上がっている | レートベースルールでIP単位のリクエスト数を制限 | ガードレールのしきい値を厳しくして対応しようとする |
| Cognitoの認証フロントエンド自体への不正アクセスを検査したい | Web ACLをCognitoユーザープールに直接関連付け可能 | ユーザープールの前段に別途API Gatewayを挟んでそこにだけWAFを付ける |
WAFとGuardrailsは防御している層が違います。WAFは「このリクエストの形は正当か」というHTTP層、Guardrailsは「この内容は安全か」というモデル入出力の意味の層です。片方だけで両方を防げるという設計にしないことが試験でも実務でも問われます。
実務でどう使うか
- ルールグループには自作・AWS管理・マーケットプレイス・他サービス(Shield Advanced等)が提供するものの4種類があります。 ゼロから自作する前に、既製のマネージドルールグループで足りないか確認する方が運用負荷は下がります
- Web ACLには容量上限(WCU)があります。 ルールグループを積み増していくと上限に達することがあり、保護の優先順位付けが必要になります
- ルールグループ自体はリソースに直接関連付けられません。 必ずWeb ACL(protection pack)に組み込んでから、保護対象のリソースに関連付けます
WAFのマネージドルールは既知の攻撃シグネチャ・IPレピュテーション・レートを見るもので、自然言語の意図を判定するものではありません。「プロンプトインジェクション対策としてWAFを厳しくする」という発想自体が的外れになりがちです。
取り違えやすいもの
| 迷う相手 | 切り分けの一言 |
|---|---|
| Bedrock Guardrails | WAFはHTTPリクエストの形(IP・ヘッダー・パターン)を見る。Guardrailsはモデルの入出力の意味(有害性・PII・ジェイルブレイク)を見る。プロンプトインジェクション対策はGuardrails側 |
| Amazon Cognito | WAFはリクエストを検査するファイアウォール。Cognitoは誰であるかを認証する仕組み。Cognitoユーザープールの手前にWAFを置く、という組み合わせで使う |
| AWS Shield | WAFはアプリケーション層(レイヤー7)の攻撃パターンに対応。Shieldはネットワーク層・トランスポート層のDDoS対策で、役割が異なる |
想起チェック
Q1. 生成AIチャットボットへのプロンプトインジェクション対策として、WAFは適切な選択肢か?
適切ではありません。 WAFはHTTPリクエストの形(IP・ヘッダー・パターン)を見るファイアウォールで、自然言語の意味的な攻撃は判定できません。プロンプトインジェクション・ジェイルブレイク対策はBedrock Guardrailsのコンテンツフィルタ(Prompt Attack)の役目です。
Q2. AWS WAFが保護対象にできる、生成AI関連のリソースは?
Amazon Bedrock AgentCore GatewayとAmazon Cognitoユーザープールが保護対象リソースに含まれます。エージェントの外向きゲートウェイと、その手前の認証フロントエンドの両方にWeb ACLを関連付けられます。