カテゴリ: Azure 更新日: 2026/06/14

Azure WAF設定ガイド|Application Gatewayでの導入と検知モード切り替え

Azure Application Gateway WAF設定ガイド|導入から検知モードの切り替え
Azure Application Gateway WAF設定ガイド|導入から検知モードの切り替え

先生と生徒の会話形式で理解しよう

生徒

「AzureでWebサイトを公開したのですが、サイバー攻撃から守る良い方法はありますか?」

先生

「それなら、Azure Web Application Firewall(ウェブ・アプリケーション・ファイアウォール)、通称WAF(ワフ)を使うのが一番ですよ。」

生徒

「WAFって設定が難しそうなイメージがあります。初心者でもApplication Gateway(アプリケーション・ゲートウェイ)と一緒に使えますか?」

先生

「大丈夫です。まずは攻撃を可視化する検知モードから始めるのがコツです。導入の手順を詳しく解説しますね!」

1. Azure WAFとApplication Gatewayの基礎知識

1. Azure WAFとApplication Gatewayの基礎知識
1. Azure WAFとApplication Gatewayの基礎知識

Azure Web Application Firewall(アジュール・ウェブ・アプリケーション・ファイアウォール)は、SQLインジェクションやクロスサイトスクリプティング(XSS)といった一般的なWeb脆弱性(ぜいじゃくせい)からアプリケーションを保護するサービスです。Application Gatewayは、OSI参照モデルのレイヤー7(アプリケーション層)で動作するロードバランサー(負荷分散装置)であり、これにWAF機能を組み込むことで、外部からの悪意あるトラフィックを入り口で遮断できるようになります。

従来のファイアウォールがIPアドレスやポート番号で通信を制御するのに対し、WAFは通信の中身(リクエストの内容)を検査するのが特徴です。これにより、プログラムのバグを突いた高度な攻撃を防ぐことが可能になります。

2. WAFポリシーの作成と構成要素

2. WAFポリシーの作成と構成要素
2. WAFポリシーの作成と構成要素

AzureでWAFを利用する際は、まず「WAFポリシー」という設定書を作成します。このポリシーには、どのようなルールで通信を検査するか、攻撃を見つけたときにどう振る舞うかといった定義が含まれます。ポリシーは独立したリソースとして管理されるため、複数のApplication Gatewayに同じ設定を使い回すことも可能です。構成要素には、マネージドルール(Microsoftが提供する既定のルール)と、特定の要件に合わせて作成するカスタムルールがあります。

設定の第一歩として、Azureポータルから「Web Application Firewall ポリシー」を検索し、新規作成を行います。このとき、種類として「Application Gateway」を選択することを忘れないようにしましょう。

3. 運用モードの種類(検知モードと防止モード)

3. 運用モードの種類(検知モードと防止モード)
3. 運用モードの種類(検知モードと防止モード)

Azure WAFには、大きく分けて2つの動作モードがあります。導入初期に非常に重要な設定なので、それぞれの違いを正しく理解しておきましょう。

モード名 動作の内容 推奨される利用シーン
検知(Detection) 攻撃を検知してログに記録するが、通信は遮断しない。 導入初期、正常な通信が誤検知されないかの確認時。
防止(Prevention) ルールに合致した攻撃通信を即座に遮断する。 ルールの調整が完了し、本番運用を開始する時。

初心者がいきなり「防止モード」に設定すると、Webサイトの正常なフォーム送信などが攻撃とみなされて閲覧できなくなる「誤検知」が発生した際に、原因特定が難しくなります。まずは「検知モード」で数日間運用し、ログを確認するのが鉄則です。

4. ネットワーク構成の自動化(Terraform例)

4. ネットワーク構成の自動化(Terraform例)
4. ネットワーク構成の自動化(Terraform例)

Azureのインフラ構成をコードで管理する場合、Terraform(テラフォーム)などのツールがよく使われます。以下は、Application GatewayにWAFポリシーを関連付けるためのシンプルな構成コードの例です。インフラをコード化することで、手動設定によるミスを防ぎ、同じ環境を何度でも再現できるようになります。


// Azure WAFポリシーを定義するリソースの例
resource "azurerm_web_application_firewall_policy" "example" {
  name                = "example-waf-policy"
  resource_group_name = "example-rg"
  location            = "Japan East"

  policy_settings {
    enabled = true
    mode    = "Detection" // 最初は検知モードに設定
  }

  managed_rules {
    managed_rule_set {
      type    = "OWASP"
      version = "3.2"
    }
  }
}

このコードでは、世界的に有名なセキュリティ基準であるOWASP(オワスプ)のコアルールセットを適用しています。バージョン3.2は、多くの一般的な攻撃をカバーしており、信頼性が高い設定です。

5. 検知ログを確認するための診断設定

5. 検知ログを確認するための診断設定
5. 検知ログを確認するための診断設定

WAFが何を検知したかを知るには、ログの出力設定が必須です。Azureでは「診断設定」メニューから、Log Analytics(ログ・アナリティクス)ワークスペースにログを送信するように構成します。これにより、後から「どのIPアドレスから、どのような攻撃手法が試みられたか」を詳しく分析できるようになります。

ログを確認するためのクエリ言語にはKQL(Kusto Query Language)を使用します。例えば、特定の期間内に検知された攻撃をリストアップするコマンドは以下のようになります。


# Azure CLIを使用してログを確認するイメージ(概念的な例)
az monitor log-analytics query --workspace-id "my-id" --analytics-query "AzureDiagnostics | where ResourceProvider == 'MICROSOFT.NETWORK' and Category == 'ApplicationGatewayFirewallLog'"

6. 検知モードから防止モードへの切り替え手順

6. 検知モードから防止モードへの切り替え手順
6. 検知モードから防止モードへの切り替え手順

ログを確認し、正常なユーザーの通信がブロックされていないことが確認できたら、いよいよ「防止モード」へ切り替えます。手順は非常にシンプルです。

  1. Azureポータルで対象の「WAFポリシー」を開きます。
  2. 「ポリシー設定」タブをクリックします。
  3. 「モード」のドロップダウンメニューから「防止」を選択します。
  4. 上部の「保存」ボタンを押して適用します。

反映には数分かかる場合があります。切り替え後は、実際にWebサイトを操作してみて、エラー(403 Forbiddenなど)が出ないか最終確認を行いましょう。もし誤検知が発生した場合は、特定のルールのみを「無効化」することで対応できます。

7. 除外リストの設定で誤検知を防ぐ

7. 除外リストの設定で誤検知を防ぐ
7. 除外リストの設定で誤検知を防ぐ

特定のCookie(クッキー)やフォームの入力フィールドが、どうしてもWAFのルールに引っかかってしまうことがあります。その場合、ポリシー全体を緩めるのではなく、「除外リスト」を作成して特定の場所だけ検査をスキップさせるのがスマートな方法です。例えば、特定のユーザーIDが含まれるリクエストヘッダーを検査対象外にする設定などが可能です。

データベースとの連携において、特定のSQLのような文字列を送信する必要がある管理画面などでは、以下のようなロジックで例外処理を検討します。


-- WAFのログ履歴から特定の攻撃IDを抽出するクエリ
SELECT
  TimeGenerated,
  clientIp,
  requestUri,
  ruleId_s,
  action_s
FROM
  AppGatewayWAFLogs
WHERE
  action_s = 'Matched';

抽出されたログの結果例:


TimeGenerated       | clientIp      | ruleId_s | action_s
--------------------+---------------+----------+---------
2026-03-30 10:00:00 | 192.168.1.1   | 942100   | Matched
2026-03-30 10:05:00 | 203.0.113.5   | 942110   | Matched
2026-03-30 10:10:00 | 110.50.20.10  | 980130   | Detected

8. セキュリティ運用の継続的な改善

8. セキュリティ運用の継続的な改善
8. セキュリティ運用の継続的な改善

サイバー攻撃の手法は日々進化しています。Azure WAFも一度設定して終わりではなく、定期的に「マネージドルールセット」のバージョンを更新したり、新しく追加された保護機能を有効にしたりすることが大切です。また、Azure Advisor(アジュール・アドバイザー)などのツールを活用すれば、推奨されるセキュリティ設定の強化案を自動で提示してくれます。

初心者の方はまず、Application GatewayとWAFの連携を「検知モード」で構築し、自分のサイトがどのように守られているかをログを通じて体感することから始めてみてください。クラウドの強力なガードマンが、あなたのウェブアプリケーションを24時間体制で守ってくれるようになります。

まとめ

まとめ
まとめ

これまでに解説してきたように、Azure Web Application Firewall(WAF)をApplication Gatewayと連携させることで、ウェブアプリケーションのセキュリティレベルは劇的に向上します。従来のファイアウォールでは防ぎきれなかったレイヤー7(アプリケーション層)への攻撃を、WAFが詳細に検査し、遮断してくれるからです。特に、SQLインジェクションやクロスサイトスクリプティング(XSS)といった、プログラムの隙を突く攻撃に対して非常に強力な防御手段となります。

導入のポイントは、いきなり「防止モード」で運用を開始するのではなく、まずは「検知モード」で数日間から数週間のテスト運用を行うことです。これにより、正常なユーザーの操作が誤ってブロックされる「誤検知」のリスクを最小限に抑えることができます。ログを確認し、必要に応じてルールの除外設定(Exclusion lists)を行うことで、セキュリティの堅牢さとユーザビリティの利便性を両立させることが可能になります。

Azure WAF導入後の運用イメージとプログラム構成

実際の運用現場では、インフラの構築を自動化するためにC#などの言語を用いたSDKや、Terraformのような構成管理ツールが活用されます。例えば、WAFポリシーの設定状況をプログラムから確認したり、特定の条件下で自動的にモードを切り替えたりする自動化スクリプトを作成することもあります。以下に、WAFの設定情報を管理するためのクラス構造のイメージをC#で示します。


using System;

public class AzureWafConfig
{
    public string PolicyName { get; set; }
    public string Mode { get; set; } // Detection or Prevention
    public bool IsEnabled { get; set; }
    public string RuleSetType { get; set; }
    public string RuleSetVersion { get; set; }

    public void DisplayStatus()
    {
        Console.WriteLine("現在のWAF設定状況を確認します。");
        Console.WriteLine("ポリシー名: " + PolicyName);
        Console.WriteLine("動作モード: " + Mode);
        Console.WriteLine("有効状態: " + (IsEnabled ? "有効" : "無効"));
        Console.WriteLine("適用ルールセット: " + RuleSetType + " " + RuleSetVersion);
    }
}

class Program
{
    static void Main()
    {
        var myWaf = new AzureWafConfig
        {
            PolicyName = "MainAppWafPolicy",
            Mode = "Prevention",
            IsEnabled = true,
            RuleSetType = "OWASP",
            RuleSetVersion = "3.2"
        };

        myWaf.DisplayStatus();
    }
}

上記のプログラムを実行すると、現在のWAFポリシーの概要がコンソールに出力されます。このように、設定値をオブジェクトとして管理することで、大規模なインフラ環境でも構成の不整合を防ぐことができます。


現在のWAF設定状況を確認します。
ポリシー名: MainAppWafPolicy
動作モード: Prevention
有効状態: 有効
適用ルールセット: OWASP 3.2

また、バックエンドのデータベース側でも、WAFが検知したログを二次利用するためにテーブルを用意し、分析に役立てることが一般的です。例えば、以下のような構造のテーブルに攻撃の傾向を保存しておくことで、将来的なセキュリティ対策の指標とすることができます。


id | attack_type          | count | last_detected
---+----------------------+-------+-------------------
1  | SQL Injection        | 45    | 2026-03-30 09:00:00
2  | Cross-Site Scripting | 12    | 2026-03-30 10:15:00
3  | Path Traversal       | 5     | 2026-03-30 11:30:00
4  | Protocol Violation   | 120   | 2026-03-30 11:45:00

SQLを使用して、特定の攻撃タイプがどれくらい発生しているかを抽出し、対策の優先順位を決定します。


SELECT attack_type, count, last_detected
FROM waf_statistics
WHERE count > 10
ORDER BY count DESC;

実行結果は以下のようになります。


attack_type          | count | last_detected
---------------------+-------+-------------------
Protocol Violation   | 120   | 2026-03-30 11:45:00
SQL Injection        | 45    | 2026-03-30 09:00:00
Cross-Site Scripting | 12    | 2026-03-30 10:15:00

このように、Azure WAFは単なる防御壁ではなく、ウェブアプリケーションがどのようなリスクにさらされているかを教えてくれる貴重な情報源でもあります。Application Gatewayと組み合わせることで、トラフィックの制御とセキュリティ保護を高い次元で統合できるため、現代のウェブサービス運用において欠かせないコンポーネントと言えるでしょう。

最後に、Linux環境からAzure CLIを利用してWAFポリシーの詳細情報を取得する方法もおさらいしておきましょう。コマンドラインでの操作に慣れておくと、ポータル画面を開かなくても迅速な状況確認が可能になります。


az network application-gateway waf-policy show --name MainAppWafPolicy --resource-group example-rg --query "policySettings.mode"
"Prevention"

Azure WAFを活用することで、サイバー脅威からビジネスを守り、ユーザーに安心して利用してもらえるウェブサービスを目指しましょう。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!Azure WAFとApplication Gatewayの関係がすごくよく分かりました。まずは『検知モード』で始めて、自分たちのサイトの通信にどんな特徴があるかを確認するのが大事なんですね。」

先生

「その通りです。急いで『防止モード』にしてしまうと、大切なユーザーを締め出してしまうリスクがありますからね。ログを見て、どのルールがどんな理由で反応しているかを分析するのが、セキュリティエンジニアとしての第一歩ですよ。」

生徒

「ログの確認にはKQLという言語を使うというお話もありました。データベースのSQLに似ているので、少し勉強すれば使いこなせそうです。さっそく、Log Analyticsの設定もやってみます!」

先生

「いい意気込みですね。もし特定のフォームでエラーが出るようになったら、除外リスト(Exclusion lists)を検討してください。特定のCookie名やリクエストヘッダーを指定して、WAFのチェックから外すことができます。これで柔軟な運用が可能になります。」

生徒

「なるほど、力任せに止めるのではなく、スマートに調整するのがプロの技ですね。TerraformやC#のプログラム例も参考になりました。インフラもコードで管理して、ミスなく運用できるように頑張ります!」

先生

「素晴らしいですね。クラウドの利点は、こういった高度なセキュリティ機能を数クリック、あるいは数行のコードで導入できる点にあります。常に最新の脅威情報を意識しながら、安全なサイト運営を続けていきましょう。応援していますよ!」

生徒

「はい!まずは検知モードでしっかり守られている安心感を得るところからスタートします。また分からないことがあったら教えてください!」

カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのデバッグ方法を徹底解説!初心者向けDISPLAY活用ガイド
New2
C#
C#のLINQでグループ化と集計!GroupByとCountを初心者向けに解説
New3
C#
C#のシングルトンパターン実装方法と注意点を徹底解説!初心者向け完全ガイド
New4
Azure
Azure WAFの誤検知を解消!除外リスト設定とチューニング方法を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!
No.2
Java&Spring記事人気No2
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.3
Java&Spring記事人気No3
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.4
Java&Spring記事人気No4
C#
C#のトランザクション処理を完全ガイド!初心者でもわかるCommit・Rollbackの使い方
No.5
Java&Spring記事人気No5
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.6
Java&Spring記事人気No6
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.7
Java&Spring記事人気No7
Azure
Azureストレージの冗長性比較!LRS/GRS/ZRSの選び方とコストの最適解を完全解説
No.8
Java&Spring記事人気No8
COBOL
COBOLのコンパイラと開発環境を徹底解説!初心者にもわかりやすい入門ガイド