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

Azure WAFポリシーの作成と管理を徹底解説!複数リソースで共有する設定術

Azure WAFポリシーの作成と管理|複数リソースでセキュリティ設定を共有する
Azure WAFポリシーの作成と管理|複数リソースでセキュリティ設定を共有する

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

生徒

「会社で複数のWebサイトを運営しているのですが、セキュリティ設定を一つずつ行うのが大変なんです。Azureで楽に管理する方法はありますか?」

先生

「それならAzure WAF(アジュール・ウェブ・アプリケーション・ファイアウォール)の『WAFポリシー』を使うのが一番ですよ。設定を一つの型として作っておけば、複数のリソースで使い回せるんです。」

生徒

「ポリシーを共有するメリットって何ですか?」

先生

「一番は、セキュリティレベルを統一できることですね。一箇所修正すれば、関連するすべてのサイトに反映されるので、設定漏れも防げます。具体的な手順を見ていきましょう!」

1. Azure WAF(ウェブ・アプリケーション・ファイアウォール)とは?

1. Azure WAF(ウェブ・アプリケーション・ファイアウォール)とは?
1. Azure WAF(ウェブ・アプリケーション・ファイアウォール)とは?

Azure WAF(アジュール・ウェブ・アプリケーション・ファイアウォール)は、Webアプリケーションをインターネット上の様々な脅威から守るための専用防壁です。一般的なファイアウォールが通信の通り道(ポート)を制御するのに対し、WAFは通信の中身(HTTP/HTTPSリクエスト)を詳細に解析します。

例えば、悪意のあるプログラムを送り込むSQLインジェクションや、偽のスクリプトを実行させるクロスサイトスクリプティング(XSS)といった攻撃を、Webサーバーに届く前に自動で検知してブロックしてくれます。これにより、プログラム側の修正が間に合わない場合でも、迅速に防御を固めることが可能になります。

2. WAFポリシーの概念と役割

2. WAFポリシーの概念と役割
2. WAFポリシーの概念と役割

AzureにおけるWAFポリシーとは、セキュリティルールの集合体のことです。昔のAzureでは、Application Gateway(アプリケーション・ゲートウェイ)などのリソース自体に直接ルールを書き込んでいましたが、現在は「ポリシー」という独立したリソースとして作成するのが主流です。

この方式の最大の特徴は、一対多の関係を築ける点にあります。一つのポリシー(ルール集)を作成し、それを「Application Gateway」や「Azure Front Door(フロント・ドア)」といった複数の配信プラットフォームに関連付けることができます。これにより、組織全体のセキュリティ基準を一元管理できるようになります。

3. 複数リソースで設定を共有するメリット

3. 複数リソースで設定を共有するメリット
3. 複数リソースで設定を共有するメリット

セキュリティ設定を共有することには、運用管理において非常に大きなメリットがあります。初心者の方が特に意識すべきポイントは以下の通りです。

  • 運用の効率化: 10個のWebサイトがあっても、ポリシーが一つなら変更作業は一回で済みます。
  • 一貫性の確保: サイトごとに設定がバラバラになることを防ぎ、全社で同じ強度のガードを維持できます。
  • 迅速な対応: 新たな脆弱性が発見された際、共通ポリシーを更新するだけで全サイトを即座に保護できます。

一方で、特定のサイトだけ特定の通信を許可したい場合には「ポリシーの継承」や「カスタムルール」を活用することで、柔軟な対応も可能になっています。

4. WAFポリシー作成の準備と手順

4. WAFポリシー作成の準備と手順
4. WAFポリシー作成の準備と手順

それでは、実際にAzureポータルでWAFポリシーを作成する流れを解説します。まずは、Azureポータルの検索窓に「WAF」と入力し、「Web Application Firewall ポリシー」を選択します。

作成時には、まず「ポリシーの構成」を行います。ここで「Application Gateway」用なのか「Front Door」用なのかを選択します。次に「マネージドルール」の設定です。これはMicrosoftが予め用意している攻撃パターンのリストで、初心者はまずこれを有効にすることから始めます。さらに、特定のIPアドレスからのアクセスを拒否したい場合は「カスタムルール」を追加します。

最後に「関連付け」のステップで、実際に保護したいApplication Gatewayのリスナーやパスを選択すれば完了です。この関連付けを複数のリソースに対して行うことで、設定の共有が実現します。

5. PowerShellを使ったポリシー情報の確認

5. PowerShellを使ったポリシー情報の確認
5. PowerShellを使ったポリシー情報の確認

GUI(画面操作)だけでなく、CUI(コマンド操作)を使って現在の設定を確認する方法も覚えておくと便利です。特に多くのリソースを管理する場合、一覧で情報を取得できるコマンドは重宝します。

以下のコマンドは、現在のアカウント内に存在するWAFポリシーの一覧を表示する例です。Azure CLIやPowerShell(パワーシェル)を使って、リソースの状態を素早く把握しましょう。


az network application-gateway waf-policy list --query "[].{Name:name, ResourceGroup:resourceGroup, Location:location}" -o table
Name              ResourceGroup    Location
----------------  ---------------  ----------
CommonWafPolicy   RG-Security      japaneast
LegacyWafPolicy   RG-Legacy        japanwest
GlobalWafPolicy   RG-Global        eastus

このようにコマンドを実行することで、どのリソースグループにどのような名前のポリシーがあるか一目で確認できます。管理するサイトが増えてきた際に非常に役立ちます。

6. Azure WAFログの分析とSQLクエリ

6. Azure WAFログの分析とSQLクエリ
6. Azure WAFログの分析とSQLクエリ

WAFを導入した後は、「誰が」「いつ」「どのような攻撃をしてきたか」を分析することが重要です。Azureでは「Log Analytics(ログ・アナリティクス)」という場所にログを貯めることができます。ここでSQL(エスキューエル)に似たKQL(Kustoクエリ言語)を使って、攻撃ログを抽出してみましょう。

まずは、どのようなデータがログに含まれているか、テーブル構造のイメージを確認してください。


TenantId | TimeGenerated        | ResourceId          | OperationName | Category
---------+----------------------+---------------------+---------------+-----------------
uuid-123 | 2024-03-01 10:00:00 | /SUBSCRIPTIONS/...  | Application...| ApplicationGatewayFirewallLog
uuid-123 | 2024-03-01 10:05:00 | /SUBSCRIPTIONS/...  | Application...| ApplicationGatewayFirewallLog
uuid-123 | 2024-03-01 10:10:00 | /SUBSCRIPTIONS/...  | Application...| ApplicationGatewayFirewallLog

このデータに対して、ブロックされた通信だけを抽出するクエリを実行します。


AzureDiagnostics
| where ResourceType == "APPLICATIONGATEWAYS"
| where Category == "ApplicationGatewayFirewallLog"
| where action_s == "Blocked"
| project TimeGenerated, clientIp_s, requestUri_s, ruleName_s
| order by TimeGenerated desc;

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


TimeGenerated        | clientIp_s    | requestUri_s      | ruleName_s
---------------------+---------------+-------------------+-----------------------
2024-03-01 10:10:00 | 192.168.1.50  | /login.php?id=1'  | SQLInjectionMatch
2024-03-01 10:05:00 | 203.0.113.10  | /admin/config     | RestrictedAccess

これにより、特定のIPアドレスからの攻撃が頻発しているといった傾向を掴むことができ、WAFポリシーのさらなる改善に繋げられます。

7. C#でWAFの状態を監視するプログラム

7. C#でWAFの状態を監視するプログラム
7. C#でWAFの状態を監視するプログラム

開発者の方は、Azure SDK for .NETを使って、自身のアプリケーション内からWAFポリシーの状態を監視したり、特定のプロパティを取得したりしたい場面があるかもしれません。C#(シーシャープ)を使って、リソースの情報を取得するシンプルなコードを見てみましょう。

ここでは、特定のWAFポリシーが「検知モード」なのか「防止モード」なのかを判定するプログラムの例を紹介します。


using System;

public class WafMonitor
{
    public static void CheckPolicyMode(string policyName, string mode)
    {
        // 本来はAzure SDKを使用して取得しますが、ここではロジックを例示します
        if (mode == "Prevention")
        {
            Console.WriteLine($"ポリシー {policyName} は「防止モード」で稼働中です。攻撃を遮断します。");
        }
        else if (mode == "Detection")
        {
            Console.WriteLine($"ポリシー {policyName} は「検知モード」です。ログの記録のみ行います。");
        }
        else
        {
            Console.WriteLine("モードが不明、または設定されていません。");
        }
    }

    public static void Main()
    {
        CheckPolicyMode("CommonWafPolicy", "Prevention");
        CheckPolicyMode("TestWafPolicy", "Detection");
    }
}

実行結果は以下の通りです。


ポリシー CommonWafPolicy は「防止モード」で稼働中です。攻撃を遮断します。
ポリシー TestWafPolicy は「検知モード」です。ログの記録のみ行います。

このようにプログラムを組むことで、自動監視システムの一部としてWAFの状態を組み込むことが可能になります。セキュリティの「見える化」は、運用において非常に大切です。

8. 除外リストの活用とポリシーの微調整

8. 除外リストの活用とポリシーの微調整
8. 除外リストの活用とポリシーの微調整

WAFを導入すると、稀に正常な通信が「攻撃」と誤認されてブロックされることがあります。これを誤検知(ごけんち)と呼びます。例えば、ブログの記事投稿画面でHTMLタグを送信しようとした際、WAFが「スクリプト攻撃だ!」と勘違いしてしまうケースです。

こうした事態を防ぐために、WAFポリシーには「除外リスト」という機能があります。特定のCookie(クッキー)やヘッダー情報を検査対象から外すことで、利便性を損なわずに安全性を確保できます。複数リソースでポリシーを共有している場合、この除外設定もすべてのサイトに一括適用されるため、設定作業が非常にスムーズになります。

ただし、除外を増やしすぎるとセキュリティホール(弱点)になるため、ログをしっかり確認しながら最小限の設定に留めるのがコツです。専門用語では「チューニング」と呼ばれ、WAF運用の醍醐味でもあります。

9. ポリシーのバージョン管理とバックアップ

9. ポリシーのバージョン管理とバックアップ
9. ポリシーのバージョン管理とバックアップ

最後に、管理上の重要なポイントとして「設定のバックアップ」について触れておきます。WAFポリシーは非常に細かな設定が多いため、誤って変更してしまった際の影響が大きいです。そのため、設定をJSON形式のファイルとしてエクスポートしておくことが推奨されます。

Azureでは「Infrastructure as Code (IaC)」という考え方があり、設定をコードとして管理できます。これにより、いつ誰がどのルールを追加したのかが明確になり、トラブル発生時の復旧も早くなります。複数人で管理する現場では、こうした構成管理の知識も合わせて身につけておくと、プロフェッショナルな運用ができるようになります。

まとめ

まとめ
まとめ

アジュール・ウェブ・アプリケーション・ファイアウォール(Azure WAF)の導入と運用管理について、その核心となる「WAFポリシー」の活用術を詳しく解説してきました。現代のクラウドネイティブな環境において、ウェブサイトやアプリケーションをサイバー攻撃から守ることは最優先事項です。特に、複数のウェブサービスを並行して運用している組織にとって、個別にセキュリティ設定を行う従来の手法は、設定漏れや運用の煩雑化という大きなリスクを孕んでいます。

今回の記事で学んだ通り、Azure WAFポリシーを独立したリソースとして作成し、Application GatewayやAzure Front Doorなどの配信プラットフォームと「一対多」で関連付ける手法は、運用の効率化とセキュリティレベルの統一において極めて強力な武器となります。マネージドルールセットを活用することで、最新の脆弱性情報に基づいた防御を即座に展開できるだけでなく、カスタムルールや除外リストを適切に設定する「チューニング」を行うことで、誤検知を最小限に抑えた高度なセキュリティ環境を構築できます。

効率的なセキュリティ運用のポイント

WAFの運用を成功させるためには、単に導入するだけでなく、継続的な監視と改善が欠かせません。Log Analyticsを用いたKQLクエリによる分析は、攻撃者の意図や傾向を把握するために不可欠なプロセスです。また、開発の現場においては、C#などのプログラミング言語を用いてWAFの状態を自動監視する仕組みを構築することで、異常事態への即応性を高めることが可能になります。

さらに、Infrastructure as Code(IaC)の考え方を取り入れ、設定をコードとして管理することは、大規模なインフラを安全かつ確実に維持するためのスタンダードとなっています。設定のバックアップやバージョン管理を徹底することで、万が一の設定ミスや障害発生時にも迅速な切り戻しが可能となり、ビジネスの継続性を担保できます。Azure WAFポリシーを正しく理解し、中央集約的な管理を実現することは、クラウドエンジニアとしてのスキルアップに直結する重要なステップと言えるでしょう。

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

生徒

「先生、ありがとうございました!Azure WAFポリシーを共有することで、あんなに大変だった複数サイトの管理がこんなにスマートになるとは驚きです。一箇所変えるだけで全部に反映されるのは、本当に画期的ですね。」

先生

「そうですね。管理の手間が減るだけでなく、会社全体のセキュリティ基準がピシッと揃うのが最大のメリットです。ただ、共有しているからこそ、一つの設定変更がすべてのサイトに影響を与えるという点は忘れないでくださいね。変更前には必ず内容を精査しましょう。」

生徒

「確かにそうですね。責任重大です。先ほど教えていただいたKQLクエリを使って、まずは今の通信状況をしっかり分析してみたいと思います。特定のIPアドレスから攻撃が来ているかどうか、すぐに確認できそうです!」

先生

「素晴らしい意気込みです!例えば、特定のSQLインジェクション攻撃を試みているログを探すなら、このようなクエリも有効ですよ。データベースのテーブル構造をイメージしながら叩いてみてください。」


TenantId | TimeGenerated        | clientIp_s    | details_message_s             | action_s
---------+----------------------+---------------+-------------------------------+---------
uuid-999 | 2024-03-30 11:00:00 | 192.168.10.5  | SQL Injection Attack detected | Blocked
uuid-999 | 2024-03-30 11:05:00 | 192.168.10.5  | SQL Injection Attack detected | Blocked
uuid-999 | 2024-03-30 11:10:00 | 172.16.0.22   | XSS Filter Triggered          | Blocked
uuid-999 | 2024-03-30 11:15:00 | 10.0.0.100    | Mandatory Rule Matched        | Blocked

AzureDiagnostics
| where Category == "ApplicationGatewayFirewallLog"
| where details_message_s contains "SQL Injection"
| summarize count() by clientIp_s, bin(TimeGenerated, 1h)
| order by count_ desc;

clientIp_s    | TimeGenerated        | count_
--------------+----------------------+-------
192.168.10.5  | 2024-03-30 11:00:00 | 25
172.16.0.22   | 2024-03-30 11:00:00 | 12

生徒

「なるほど、これで見ればどこの誰がしつこく攻撃してきているか一発でわかりますね。監視用のプログラムもC#で作ってみようと思います。もし特定のルールが外れていたり、モードが『防止』じゃなかったりしたら通知が来るようにしたいです。」

先生

「いいですね!プログラミングで自動化するのは運用の鑑です。例えば、設定値をチェックする簡単なロジックはこんな感じになるでしょう。COBOLのようなレガシーな環境から最新のクラウドネイティブな環境まで、基本的な条件分岐の考え方は共通ですよ。」


using System;

public class SecurityAudit
{
    public static void Main()
    {
        string currentMode = "Prevention";
        bool isCustomRuleEnabled = true;

        Console.WriteLine("--- Azure WAF セキュリティ診断開始 ---");

        if (currentMode == "Prevention" && isCustomRuleEnabled)
        {
            Console.WriteLine("ステータス:安全");
            Console.WriteLine("ポリシーは正しく『防止モード』で稼働し、カスタムルールも有効です。");
        }
        else
        {
            Console.WriteLine("警告:設定を確認してください!");
            Console.WriteLine("脆弱な設定になっている可能性があります。");
        }
    }
}

--- Azure WAF セキュリティ診断開始 ---
ステータス:安全
ポリシーは正しく『防止モード』で稼働し、カスタムルールも有効です。

生徒

「ありがとうございます。セキュリティは奥が深いですが、Azure WAFを味方につければ心強いですね。まずは共通ポリシーの作成から着手して、社内のWeb資産をしっかり守っていきます!」

先生

「その調子です。困ったことがあればいつでも聞いてください。安全なクラウドライフを送りましょう!」

カテゴリの一覧へ
新着記事
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#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.6
Java&Spring記事人気No6
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.7
Java&Spring記事人気No7
Azure
Azureストレージの冗長性比較!LRS/GRS/ZRSの選び方とコストの最適解を完全解説
No.8
Java&Spring記事人気No8
COBOL
COBOLのコンパイラと開発環境を徹底解説!初心者にもわかりやすい入門ガイド