メインコンテンツまでスキップ

AWS WAF・Google Cloud Armor・Azure WAFのマネージドルール設計比較

AWS WAF、Google Cloud Armor、Azure WAFのマネージドルール構造、調整単位、導入手順を比較した詳細図

先に結論

3大クラウドのマネージドルールは、同じような攻撃を検知するが、組み立て方は同じではない。

製品基本構造調整の中心設計上の特徴
AWS WAFWeb ACLからManaged Rule Groupを参照内部ルールのアクション上書き、Scope-down、ラベル検知結果を後続ルールへつなぎやすい
Google Cloud ArmorSecurity Policyルールの式から攻撃カテゴリ別ルールセットを呼ぶsensitivity、signature ID、リクエストフィールド除外、CEL条件設定が明示的だが、カテゴリごとのルールが増える
Azure WAFWAF PolicyへDRSなどのManaged rule setを追加ルール/グループ単位の状態・アクション・除外複数検知を異常スコアとして合算する

AWS WAFを基準に読むなら、Azure WAFは比較的近い。大きなルールセットをポリシーへ追加し、その内側を調整するからだ。

Google Cloud Armorは発想が異なる。SQLインジェクション、XSS、RCEなどの事前構成WAFルールを、Security Policyの一致条件として個別に呼び出す。したがって「AWSより複雑だが詳細にチューニングできる」とだけ表現するのは正確ではない。

より正確な結論は次なのだ。

Cloud Armorは、AWS WAFより設定が展開され、カテゴリ別の適用条件と感度を明示しやすい。一方、内部ルール別アクションや検知ラベルを使った後続処理まで含めると、AWS WAFの方が柔軟な部分もある。Azure WAFはAWSに近い管理構造を持つが、異常スコアリングによって遮断判定の考え方が異なる。

この記事は製品全体の優劣ではなく、2026年8月3日時点の「マネージドルールの作り」を比較する。DDoS、Bot管理、API発見、料金を含む総合比較は「6大WAF総合比較 2026」へ分ける。

まず共通部分を押さえる

どの製品でも、マネージドルールはベンダーが維持する複数シグネチャの集合である。利用者が書くのは攻撃検知ロジックそのものではない。次の判断をポリシーとして与える。

  1. どのルールセットを使うか
  2. どの通信へ適用するか
  3. どの内部ルールを有効または無効にするか
  4. 一致したときに記録、遮断、Challengeなどの何を行うか
  5. 誤検知するフィールドをどこまで検査対象から外すか
  6. 更新版をいつ、どのように受け入れるか

違いは、この六つをどの階層へ配置するかにあるのだ。

AWS WAF:マネージドルールグループをWeb ACLへ追加する

構造

AWS WAFでは、Web ACLの一つのルールとしてManaged Rule Groupを参照する。

Web ACL
└─ Rule
└─ ManagedRuleGroupStatement
├─ VendorName
├─ Name
├─ Version
├─ ScopeDownStatement
├─ RuleActionOverrides
└─ ベンダーが管理する内部ルール

AWS Managed Rulesのほか、AWS Marketplaceのルールグループも同じ概念で扱う。バージョン対応グループでは、特定バージョンを固定するか、既定バージョンへ追随するかを選べる。AWS公式:マネージドルールグループ

作り方

典型的な初期構成は次になる。

Web ACL
├─ AWSManagedRulesCommonRuleSet
│ ├─ 全体をCountで検証
│ └─ 誤検知する内部ルールだけCountへ上書き
├─ AWSManagedRulesKnownBadInputsRuleSet
├─ AWSManagedRulesSQLiRuleSet
└─ Default action: Allow

ルールグループ全体の評価対象を限定したい場合は、ScopeDownStatementを使う。たとえば特定ホスト、パス、国、ヘッダーに一致するリクエストだけを有料ルールグループへ渡せる。Scope-downは前処理ではなく、グループへ渡すリクエストの選別である。AWS公式:Scope-down statement

チューニングの強み

内部ルールのアクションはRuleActionOverridesで上書きできる。Countだけでなく、そのルールで有効なBlock、Allow、CAPTCHA、Challengeなどへ変更できる。上書きは参照先のルールグループ自体を変えず、そのWeb ACLでの使い方だけを変える。AWS公式:ルールグループのアクション上書き

もう一つの重要な差はラベルである。AWS Managed Rulesはラベルをサポートし、後続のLabel match ruleでURI、IP、国、別ラベルなどと組み合わせられる。AWS公式:AWS Managed Rules一覧

SQLiルールが一致してラベルを付与

管理画面のパスならBlock

その他のパスならCountで観測

検知と最終判断を分離できるのが、AWS WAFの設計上の強みなのだ。

注意点

  • ルールグループ、内部ルール、ラベル依存、優先順位が増えると全体像を追いにくい
  • Scope-downは内部シグネチャの検査フィールドを変更しない
  • バージョン更新時は新規・変更・廃止ルールと有効期限を確認する
  • Countへ上書きした内部ルールは遮断しないため、ログだけでなく後続ルールも確認する

Google Cloud Armor:攻撃カテゴリを一致条件として呼び出す

構造

Cloud Armorでは、Security PolicyルールのCEL式からevaluatePreconfiguredWaf()を呼び出す。

Security Policy
├─ Priority 1000
│ ├─ Match: evaluatePreconfiguredWaf('sqli-v422-stable', ...)
│ ├─ Action: deny-403
│ └─ Preview: true / false
├─ Priority 1010
│ ├─ Match: evaluatePreconfiguredWaf('xss-v422-stable', ...)
│ └─ Action: deny-403
└─ Default rule: allow

2026年8月3日時点では、CRS 4.22系にSQLi、XSS、LFI、RFI、RCE、メソッド強制、スキャナー検知などのstablecanaryルールがある。Google Cloudは、ワークロードが対応できるなら古いCRS 3.0を避け、CRS 4.22を使うことを推奨している。Google Cloud公式:事前構成WAFルール

作り方

SQLiルールセットを感度1で作る最小例は次になる。

evaluatePreconfiguredWaf(
'sqli-v422-stable',
{'sensitivity': 1}
)

sensitivityは1から4で、指定値以下の感度に属するシグネチャを有効にする。0では自動選択を止め、opt_in_rule_idsで指定したシグネチャだけを有効にできる。基本集合から例外を外す場合はopt_out_rule_idsを使う。Google Cloud公式:事前構成WAFルールの設定

基本集合を使う
sensitivity: 1

基本集合から一部を外す
sensitivity: 1 + opt_out_rule_ids

許可リスト方式で始める
sensitivity: 0 + opt_in_rule_ids

Google Cloudは、一つのSecurity Policyルールにつき一つの事前構成WAF式を使うことを推奨している。論理ORで複数カテゴリを束ねることはできるが、式の最大サイズと運用上の追跡性を考えると、SQLiとXSSを別優先度へ置く方が読みやすい。

チューニングの強み

感度で基本集合を段階的に選び、signature IDで追加または除外できる。さらに、特定ヘッダー、Cookie、クエリパラメータなどを検査対象から外すリクエストフィールド除外を設定できる。

CEL条件と組み合わせれば、ホスト、パス、送信元などで適用範囲を明示できる。カテゴリごとにSecurity Policyルールが分かれるため、「どの攻撃カテゴリを、どの範囲へ、どのアクションで適用したか」は画面やIaC上に展開されるのだ。

AWSより詳細なのか

一律には言えない。

調整Cloud ArmorAWS WAF
一括感度1〜4のsensitivity同形式の共通感度はない
シグネチャ選択opt-in/opt-out内部ルールの除外・アクション上書き
適用範囲CEL式とポリシー優先度Scope-down statement
内部検知ごとのアクションルールを分けて外側のアクションを変えるRuleActionOverridesで変えられる
検知結果の再利用AWSのラベル型と同じ多段処理ではないラベルを後続ルールで評価できる

Cloud Armorは感度とフィールド除外が分かりやすい。AWS WAFは内部アクションと後続処理が強い。「詳細」という一語では、異なる方向の柔軟性を取り違える。

注意点

  • SQLi、XSS、RCEなどを分けるため、優先度と命名の管理が必要になる
  • 事前構成WAFルールの変更反映には通常数分かかる
  • リクエストボディは先頭64 KBまでが評価対象になる
  • フィールド除外を使う事前構成WAFルールではallowアクションを使えない
  • stablecanaryの役割を分け、本番遮断へcanaryを直結しない

最後の制約は誤検知回避だけでなく安全性に関わる。除外されたフィールドは、そのルールの検査を受けないからだ。

Azure WAF:DRSを追加し、異常スコアで判断する

最初に二つの実装を区別する

Azure WAFには、主にApplication Gateway WAFとAzure Front Door WAFがある。

  • Application Gateway WAF:リージョナルなApplication Gateway v2へWAF Policyを関連付ける
  • Azure Front Door WAF:グローバルエッジのFront DoorへSecurity Policy経由でWAF Policyを関連付ける

マネージドルールの基本階層は似ているが、利用可能なルールセット、アクション、関連付け単位、機能提供時期は完全には同じではない。構築時は「Azure WAF」という総称だけでなく、どちらの実装かを固定する必要がある。

構造

WAF Policy
├─ Policy settings
│ ├─ Detection / Prevention
│ └─ Body inspectionなど
├─ Custom rules
└─ Managed rules
├─ Microsoft_DefaultRuleSet 2.2
│ ├─ Rule group
│ │ └─ Individual rule
│ ├─ Rule override
│ └─ Exclusion
└─ Bot Manager rule set

DRS 2.2はOWASP CRS 3.3.4を基礎とし、Microsoft Threat Intelligenceチームの独自保護を加える。Application Gateway向けDRS 2.2には18のルールグループがあり、SQLi、XSS、RCEなどに加えて、Microsoft独自のCVE、Web shell、AppSecルール群を含む。Microsoft公式:Application GatewayのDRSルール

Front DoorでもDRS 2.2とBot Manager 1.1などを利用できる。Microsoft公式:Front DoorのDRSルール

作り方

基本は、WAF PolicyへMicrosoft_DefaultRuleSetのバージョンを追加し、Detectionモードでログを確認する。その後、ルール状態、アクション、除外を調整してPreventionへ移す。

AWS WAFと概念を対応させると次になる。

AWS WAFAzure WAF
Web ACLWAF Policy
Managed Rule GroupManaged rule set
内部ルールIndividual rule
RuleActionOverridesRule/Rule group override
検査フィールドの調整Exclusion
Countで導入DetectionモードまたはLogアクションで観測

ただし、最後の行は完全な同義ではない。AzureのDetection/Preventionはポリシーの動作モードであり、個別ルールのLog設定とは適用範囲が異なる。

異常スコアリング

Azure WAFをAWS WAFと同じ感覚で読むとき、最も見落としやすいのが異常スコアである。

Application GatewayのCRSまたはDRS 2.1以降では、ルール一致が直ちにリクエスト遮断を意味しない。各一致は重大度に応じて点数を加算する。

重大度加算値
Critical5
Error4
Warning3
Notice2

合計5以上になると、Preventionモードでは別の異常スコアルールがBlockを記録して遮断する。DetectionモードではDetectedとして記録し、バックエンドへ通す。たとえばCritical一件は単独で5になるが、Warning一件だけなら3で閾値へ届かない。Microsoft公式:Application Gateway WAF概要

個別シグネチャAが一致(Warning: +3)
個別シグネチャBが一致(Notice: +2)

合計5へ到達

Preventionなら異常スコアルールがBlock

ログ調査では、Matchedを記録した個別ルールと、最終的にBlockedまたはDetectedを記録した異常スコアルールを関連付ける必要がある。個別ルールのログだけを見て「この一件が遮断した」と判断すると原因を取り違えるのだ。

チューニング

DRS 2.2は既定でParanoia Level 1相当となり、PL2ルールは無効である。PL2を使う場合は対象ルールを有効化し、まずLogで分析してから調整する。Azure WAFはPL3とPL4を現在サポートしない。

誤検知には次の順で対処する。

  1. WAFログから一致ルールと対象フィールドを特定する
  2. そのフィールドだけを狭いスコープで除外できるか確認する
  3. 個別ルールまたはルールグループのアクション上書きを検討する
  4. 無効化が必要なら、そのシグネチャが失われる範囲を記録する
  5. 再現リクエストと攻撃テストの両方で確認する

Front Doorの除外は、ルールセット、ルールグループ、個別ルールの各スコープへ設定できる。指定属性だけを評価から外し、リクエストの残りは検査される。Microsoft公式:Front Doorの除外

注意点

  • Application GatewayとFront Doorの資料や設定例を混ぜない
  • DRSのバージョン変更時に、既存の上書きとルール単位除外を引き継ぐ
  • Azure Portalで新しいルールセットを割り当てると、既存カスタマイズが既定値へ戻る場合がある
  • 無効化したルールは異常スコアへ加算されず、ログも残らない
  • DRS、Bot Manager、HTTP DDoS rulesetの対応状況を実装別に確認する

Microsoftは2026年2月から、マネージドルールセットの最新3世代を積極サポートする方針を示している。更新を放置せず、テスト環境で差分を検証する運用が必要になる。Microsoft公式:Managed Ruleset Support Policy

3製品を同じ要件へ当てはめる

例として、/api/searchへSQLi対策を適用し、正規のfilterパラメータが誤検知する状況を考える。

AWS WAF

  1. SQLiを含むManaged Rule GroupをWeb ACLへ追加する
  2. Scope-downで対象ホストや/api/searchを絞る
  3. 全体または対象内部ルールをCountで観測する
  4. 誤検知した内部ルールをCountへ上書きする
  5. 必要なら検知ラベルとパスを後続ルールで組み合わせる

AWSでは「内部ルールを検知器として残し、最終判断を後続へ移す」という選択がしやすい。

Cloud Armor

  1. sqli-v422-stableを呼ぶSecurity Policyルールを作る
  2. CEL条件または別ポリシー設計で対象範囲を絞る
  3. Previewで観測する
  4. sensitivityとsignature IDを確認する
  5. 必要最小限のsignature opt-outまたはfilterフィールド除外を設定する

Cloud Armorでは、SQLiカテゴリの式と適用範囲が一つのポリシールールとして見える。

Azure WAF

  1. DRS 2.2をWAF Policyへ追加する
  2. Detectionモードで個別一致と異常スコアを確認する
  3. filterだけを対象ルールの除外へ設定できるか検討する
  4. 必要なら個別ルールのアクションまたは状態を上書きする
  5. Preventionへ移し、最終遮断ログまで再確認する

Azureでは、誤検知した個別ルールだけでなく、リクエスト全体のスコアが遮断へ至った経路を見る。

「どれが最も細かいか」ではなく、調整方向を見る

観点AWS WAFCloud ArmorAzure WAF
初期のまとまりルールグループ単位攻撃カテゴリ単位DRS単位
基本感度グループごとの構成に依存sensitivity 1〜4PL1、手動でPL2を有効化
個別検知の選択内部ルール単位signature ID単位Individual rule単位
個別検知のアクション上書き可能外側のPolicyルールを分ける上書き可能
適用範囲Scope-downCEL条件Policy関連付け、Custom ruleなど
検知の合成ラベルで後続評価Policy優先度で終端評価異常スコアを合算
フィールド除外ルール仕様と構成によるpreconfigured WAF exclusionExclusion
更新管理バージョン固定または既定追随stable/canaryとCRS世代DRS世代と上書き引継ぎ

AWS WAFは、検知結果を部品として再利用する設計に向く。Cloud Armorは、攻撃カテゴリと適用条件を明示的に並べる設計に向く。Azure WAFは、CRS系の複数検知をスコアとして評価する設計に向く。

この差は、単なる管理画面の違いではない。ログの読み方、例外の作り方、IaCのモジュール境界、更新テストの単位まで変えるのだ。

安全な導入手順

製品にかかわらず、最初から全マネージドルールを遮断へ置くべきではない。

対象トラフィックと保護範囲を定義

推奨ルールセットを非遮断で有効化

正常系と攻撃系のログを収集

ルールID・フィールド・適用範囲を特定

最小単位で除外またはアクション調整

遮断へ移行し、更新差分を継続検証

最低限、次を記録する。

  • ポリシー名、関連付け先、優先順位
  • ルールセット名とバージョン
  • Count、Preview、Detectionなど非遮断状態の意味
  • 誤検知したルールID、対象フィールド、再現リクエスト
  • 除外によって検査されなくなる範囲
  • 攻撃テストで残る検知または遮断
  • 更新時に比較するログ、メトリクス、IaC差分

「正常通信が通った」だけでは調整成功とは言えない。除外後も、同じフィールド以外の攻撃を検知できるかを確認する必要がある。

まとめ

3製品の違いを一文ずつにすると、次になる。

  • AWS WAFは、Managed Rule Groupを追加し、内部アクション、Scope-down、ラベルで組み立てる
  • Google Cloud Armorは、攻撃カテゴリ別の事前構成WAFルールをCEL式から呼び、感度とsignature IDで組み立てる
  • Azure WAFは、DRSを追加し、ルール上書きと除外を行い、複数一致を異常スコアとして評価する

Cloud ArmorはAWSより手作業が増えやすい。ただし、それだけで「AWSより詳細」とは言えない。AzureはAWSに近い階層を持つ。ただし、遮断理由は個別一致ではなく異常スコアまで追う必要がある。

移行やマルチクラウド標準化では、製品名を対応させるだけでは足りない。適用範囲、感度、個別検知、アクション、検知結果の合成、フィールド除外の六つへ分解して読み替える。それが、3大クラウドのマネージドルールを同じ設計書で扱うための基準なのだ。