AKSで公開APIやWebアプリを運用していると、「WAFを置けば十分なのか」「NetworkPolicyだけでPod間の横移動を防げるのか」「L7検査によって通信データやログがどこまで外部に出るのか」を判断しにくいものです。
結論から言うと、2026年7月8日にMicrosoftが公開した「Microsoft documents end-to-end AKS Layer 7 protection with Application Gateway for Containers and managed Cilium」は、既存のAKSクラスタへ新しい防御が自動適用される更新ではありません。Application Gateway for ContainersとWAFでクラスタ外からの通信を検査し、Advanced Container Networking ServicesのCilium L7ポリシーでPod直前やPod間通信を制御する、エンドツーエンドの防御構成を具体化した公式情報です。導入するには、管理者がアドオンを有効化し、Gateway APIやWAF、CiliumNetworkPolicyを明示的に設定する必要があります。(TECHCOMMUNITY.MICROSOFT.COM)
日本企業が最初に確認すべきなのは機能ではなく、利用リージョンとデータ境界です。2026年6月24日時点のApplication Gateway for Containers対応リージョン一覧には、Japan EastとJapan Westが掲載されていません。国内リージョン内での処理が必須の場合は、すぐに本番導入へ進むのではなく、リージョン要件を満たせるかを先に確認する必要があります。(Microsoft Learn)
2026年7月8日の公式情報で何が明確になったのか
Microsoftが示した構成の重要点は、異なる場所で動作する複数の防御を組み合わせることです。
インターネット
↓
Application Gateway for Containers
↓
WAFによる攻撃パターンの検査
↓
Gateway/HTTPRouteによるルーティング
↓
Cilium L7ポリシーによるメソッド・パス・送信元の検査
↓
AKS上のPod
↓
Pod間通信・外向き通信の制御
Application Gateway for Containersは、AKSクラスタ外に配置されるAzure管理のL7データプレーンです。クラスタ内ではALB Controllerが動作し、Gateway、HTTPRoute、IngressなどのKubernetesリソースをApplication Gateway for Containersの設定へ変換します。(Microsoft Learn)
一方、Advanced Container Networking Servicesでは、Ciliumとノード上のEnvoyを利用してL7通信を制御します。ポリシー対象となる通信だけがノードローカルのEnvoyへリダイレクトされ、HTTPメソッド、パス、gRPC、Kafkaなどのアプリケーション情報に基づいて許可・拒否されます。(Microsoft Learn)
なお、Application Gateway for ContainersはAI推論トラフィックのルーティングにも対応していますが、今回の公式情報の中心はAI機能の追加ではありません。主題は、AKSへ到達する通信とクラスタ内部の通信を一つの設計として保護することです。(Microsoft Learn)
Application Gateway for ContainersとManaged Ciliumは補完関係にある
WAFとCilium L7ポリシーは、どちらか一方を選ぶ機能ではありません。検査する場所と、判断に利用する情報が異なります。
| 制御 | 主な適用場所 | 防げる代表例 | 単独では不足する点 |
|---|---|---|---|
| Application Gateway for ContainersのWAF | AKSへ入る前の外部通信 | SQLインジェクション、クロスサイトスクリプティング、既知のWeb攻撃パターン | Pod間の横移動や、クラスタ内サービスからの不正通信は直接制御できない |
| Cilium L7ポリシー | Podへの入口、Pod間通信、外向き通信 | 許可されていないHTTPメソッド、パス、API、gRPC呼び出し | リクエスト本文やパラメーターに含まれる攻撃文字列を網羅的に検出するWAFではない |
| Kubernetes NetworkPolicy | L3/L4の通信経路 | 不要なIP、Pod、ポート間の通信 | GETとPOST、/productsと/adminを区別できない |
例えば、Ciliumで「GET /productsのみ許可」と設定しても、SQLインジェクション文字列をクエリに含むGET /productsは、メソッドとパスだけを見れば許可条件に一致します。この通信を手前のWAFで検査すれば、Web攻撃として遮断できます。
反対に、正規の形式を持つPOST /productsが、本来呼び出しを許可されていないPodから送られた場合、一般的なWAFルールだけでは不正と判断できない可能性があります。ここでは、Podのラベルや通信先、HTTPメソッドを判断できるCilium L7ポリシーが有効です。
Microsoftの公開例でも、WAFが攻撃文字列を含むGETリクエストを止め、Ciliumが許可されていないPOSTやPod間通信を止める役割分担が示されています。(TECHCOMMUNITY.MICROSOFT.COM)
導入前に確認すべき利用条件
Application Gateway for ContainersとACNSのL7制御は、AKSクラスタであれば無条件に利用できるわけではありません。
| 項目 | 主な利用条件・確認事項 |
|---|---|
| Application Gateway for Containers | 対応Azureリージョンであること |
| AKSネットワーク | Azure CNIまたはAzure CNI Overlayを使用していること |
| ID基盤 | OIDC IssuerとWorkload Identityを有効化すること |
| Kubernetes API | Gateway APIアドオンとApplication Load Balancerアドオンを有効化すること |
| Application Gateway for Containersのリスナー | HTTPまたはHTTPS、ポート80または443が基本 |
| WAFポリシー | Application Gateway for Containersと同一サブスクリプション、同一リージョンに配置すること |
| ACNSのL7ポリシー | Azure CNI Powered by Ciliumを使用すること |
| 対応ノード | CiliumデータプレーンはLinuxノードが対象 |
| Kubernetesバージョン | 公式手順ではKubernetes 1.29以降が対象 |
| Azure CLI | 当該手順ではAzure CLI 2.79.0以降が案内されている |
| 既存のL7実装 | Istioなど別のL7ポリシー実装との併用可否を確認すること |
| 料金 | Application Gateway for Containers、WAF、ACNS、監視基盤の料金を見積もること |
Application Gateway for ContainersのAKSアドオンでは、Workload Identity、Gateway API、Application Load Balancerを有効にします。公式手順で示される主なフラグは次のとおりです。
az aks update \
--resource-group <RESOURCE_GROUP> \
--name <AKS_CLUSTER> \
--enable-oidc-issuer \
--enable-workload-identity \
--enable-gateway-api \
--enable-application-load-balancer
ACNSのL7制御を利用する場合は、Ciliumデータプレーンを前提として、ACNSに加えてL7のAdvanced Network Policiesを有効化します。
az aks update \
--resource-group <RESOURCE_GROUP> \
--name <AKS_CLUSTER> \
--enable-acns \
--acns-advanced-networkpolicies L7
2026年7月8日のブログ記事では構成が簡略化されていますが、実際の設定では--enable-acnsだけでなく、--acns-advanced-networkpolicies L7の指定が必要です。既存クラスタがCiliumを使用していない場合は、先にサポートされる移行経路、ノードプールの更新、メンテナンス時間を確認してください。(Microsoft Learn)
日本リージョンを利用している場合の判断
Application Gateway for Containersの対応リージョン一覧には、2026年6月24日時点でJapan EastとJapan Westが含まれていません。したがって、次の要件があるシステムでは特に注意が必要です。(Microsoft Learn)
- 個人情報や機密情報を国内リージョン内で処理する必要がある
- 社内規程で海外リージョンへの通信経路を禁止している
- 顧客との契約でデータ処理地域を日本国内に限定している
- BCPや監査の対象リージョンがJapan EastまたはJapan Westに固定されている
対応リージョンにApplication Gateway for Containersだけを配置すれば技術的な検証は可能でも、業務要件を満たすとは限りません。リクエストがどのリージョンで処理されるか、TLSをどこで終端するか、WAFログやアクセスログをどこに保存するかを整理したうえで、セキュリティ部門や法務部門の確認を受ける必要があります。
国内リージョン限定が必須であれば、現時点では本番採用を保留し、既存のApplication Gateway、Azure Front Door、クラスタ内Ingressなどを含めた代替構成を個別に比較するのが現実的です。
通信データとログの境界を分けて考える
エンドツーエンドのL7保護では、「通信を検査する場所」と「ログを保存する場所」を混同しないことが重要です。
| 境界 | 処理される内容 | 管理上の確認事項 |
|---|---|---|
| Application Gateway for Containersの管理データプレーン | HTTP、HTTPS、gRPCなどの受信通信とルーティング | 配置リージョン、TLS終端、WAFポリシー、ログ出力先 |
| AKSクラスタ内のALB Controller | GatewayやHTTPRouteなどのKubernetes設定 | ServiceAccount、Workload Identity、RBAC、変更権限 |
| AKSノード上のCilium/Envoy | ポリシー対象となるL7通信 | 対象Pod、メソッド、パス、プロトコル、性能への影響 |
| AKSノード上のACNSログ | 送信元、宛先、ポート、プロトコル、許可・拒否結果など | 保存量、ローテーション、ノード障害時の保持 |
| Azure Monitorなどへの転送後 | 集約・検索・長期保存するネットワークログ | 保存リージョン、保持期間、アクセス権、取り込み料金 |
ACNSのネットワークログは、ContainerNetworkLogリソースで取得対象を指定するまで生成されません。生成されたログは各ノードの/var/log/acns/hubble/events.logへJSON形式で書き込まれ、Azure Monitorを利用しなくてもクラスタ内で生成できます。ホストローカルのログはノードごとにローテーションされるため、長期保存や横断検索が必要な場合は、Azure MonitorまたはOpenTelemetry互換の独自パイプラインへ転送します。(Microsoft Learn)
この仕組みにより、ログを必ず外部サービスへ送信しなければならないわけではありません。一方で、Azure Monitorへ転送した時点で、ログ保存先、保持期間、閲覧権限、料金という新しい管理対象が生まれます。
取得対象は、名前空間、Pod、Service、ポート、プロトコル、通信方向、許可・拒否結果などで絞り込めます。すべての通信を無条件に保存するのではなく、監査対象の名前空間や拒否通信を優先することで、情報量とコストを抑えられます。メトリクスについても、ノードから送信する前に対象を絞り込めます。(Microsoft Learn)
管理者が制御すべき範囲
BYO方式とALB管理方式を使い分ける
Application Gateway for Containersには、Azureリソースを管理者が事前作成するBYO方式と、ALB Controllerにライフサイクルを管理させる方式があります。
| 方式 | 向いている環境 | 注意点 |
|---|---|---|
| BYO方式 | ネットワーク管理者とアプリ開発者の権限を厳密に分離したい環境 | Kubernetes側でGatewayを削除しても、Azure側のFrontendなどが自動削除されない |
| ALB管理方式 | Kubernetesマニフェストを中心に迅速に構築したい環境 | GatewayやApplicationLoadBalancerの変更権限がAzureリソースのライフサイクルへ影響する |
| 段階的な併用 | 共通基盤は管理者が管理し、ルーティングはアプリチームへ委譲したい環境 | リソースごとの責任者と削除手順を事前に決める必要がある |
基盤チームがサブネット、マネージドID、Application Gateway for Containers本体、WAFポリシーを管理し、開発チームにはHTTPRouteや限定されたCiliumNetworkPolicyだけを変更させる構成にすると、権限分離を実現しやすくなります。(Microsoft Learn)
マネージドIDへ必要最小限の権限を与える
AKSのApplication Load Balancerアドオンを利用すると、専用のユーザー割り当てマネージドIDが作成されます。公式手順では、管理対象のリソースグループに対して、Network Contributor、Reader、AppGw for Containers Configuration Managerなどのロールが割り当てられます。(Microsoft Learn)
注意したいのは、AzureのOwnerやContributorを付与しただけでは、Application Gateway for Containersで必要となるデータアクションを満たさない場合があることです。管理を簡単にするために過剰な権限を与えるのではなく、専用ロールを必要なスコープへ割り当ててください。(Microsoft Learn)
Kubernetesリソースの変更経路を制限する
Gateway、HTTPRoute、SecurityPolicy、WebApplicationFirewallPolicy、CiliumNetworkPolicyを誰でも変更できる状態では、保護を追加しても簡単に迂回されます。
実務では、次のような管理が必要です。
- 本番環境への変更はGitOps経由に限定する
- WAFポリシーの参照先をSecurityPolicyで制限する
- HTTPRouteを変更できる名前空間と担当チームを限定する
- CiliumNetworkPolicyの削除や許可範囲の拡大をレビュー対象にする
- 一時的な例外には期限と責任者を設定する
- ポリシー変更後に許可通信と拒否通信の両方をテストする
WAFはGateway全体だけでなく、HTTPRouteやリスナー単位でも適用できます。複数のサービスを一つのApplication Gateway for Containersで公開する場合でも、決済API、管理画面、一般公開サイトで異なるWAFポリシーを割り当てられます。(Microsoft Learn)
業務や開発で効果を得やすい使いどころ
複数サービスを一つの入口で公開する
一つのフロントエンドに複数のホスト名やHTTPRouteを設定できるため、複数のAKSアプリを共通の入口へ集約できます。
例えば、次のような分割が可能です。
shop.example.com → 一般向けWebアプリ
api.example.com → 公開API
admin.example.com → 管理画面
partner.example.com → 取引先向けAPI
外部からの通信は共通のApplication Gateway for Containersで受けつつ、ホスト名やパスごとに異なるWAFポリシーとバックエンドを設定できます。Pod側では、各サービスが本当に必要とするHTTPメソッドや通信元だけをCiliumで許可します。(Microsoft Learn)
管理APIや決済APIの操作を限定する
管理APIでは、接続できることと操作できることを分けて制御する必要があります。
例えば、検索用サービスにはGET /ordersだけを許可し、更新処理を担うサービスにだけPOST /ordersを許可します。誤設定や侵害によって検索用Podから更新APIが呼ばれても、Cilium L7ポリシーで拒否できます。
同時に、外部から届くSQLインジェクションやクロスサイトスクリプティングなどの攻撃はWAFで検査します。これにより、「正規の呼び出し元か」と「リクエスト内容が安全か」を別々の制御で確認できます。
マイクロサービス間の横移動を抑える
L3/L4のNetworkPolicyだけでは、同じサービスの同じポートを使う複数のAPI操作を区別できません。
Cilium L7ポリシーを使えば、フロントエンドから注文APIへのPOST /ordersは許可しながら、同じPodから管理用のDELETE /orders/{id}を拒否できます。侵害されたPodがクラスタ内部の別サービスへ自由にアクセスする横移動を抑える用途に向いています。(Microsoft Learn)
不要な外向き通信を止める
受信通信だけを保護しても、侵害されたコンテナが外部へデータを送信できれば被害は残ります。
基本方針として外向き通信を拒否し、DNS、必要なAzureサービス、外部API、更新先などを個別に許可します。ACNSではFQDNを利用した制御も可能ですが、CDNや動的な名前解決を利用するサービスでは、実際の通信先を観測してからポリシーを適用する必要があります。(Microsoft Learn)
実際に確認すべき通信パターン
PoCでは、正常系だけでなく、各防御層が想定どおりに拒否するかを確認します。
| テスト | 期待結果 | 主に確認する制御 |
|---|---|---|
許可されたクライアントからGET /products | 正常応答 | Gateway、HTTPRoute、Cilium L7 |
攻撃文字列を含むGET /products | WAFで遮断 | WAF |
許可されていないPOST /products | Ciliumで拒否 | Cilium L7 |
| 許可していないPodから同じAPIへ接続 | 接続拒否またはドロップ | Cilium L3/L4、L7 |
| Podから未許可の外部ドメインへ接続 | 接続失敗 | Egressポリシー |
| DNS名前解決 | 正常動作 | DNS例外設定 |
| Application Gatewayからのヘルスプローブ | 正常動作 | NSG、UDR、Pod到達性 |
| ポリシー更新中の既存接続 | アプリ側で再試行される | リトライ設計 |
HTTPレベルで拒否された場合は403などのアプリケーション応答として確認できる一方、L3/L4でドロップされた通信はタイムアウトとして見える場合があります。監視では、単にエラー件数を見るだけでなく、どの層で拒否されたかを区別してください。(TECHCOMMUNITY.MICROSOFT.COM)
導入時に失敗しやすいポイント
| 失敗例 | 起きる問題 | 対策 |
|---|---|---|
| アドオンを有効化しただけで保護されたと思う | WAFやCiliumの許可・拒否ルールが存在せず、通信が従来どおり通る | Gateway、WAF、CiliumNetworkPolicyを別々に確認する |
| 全名前空間へ一度にDefault Denyを適用する | DNS、監視、外部API、ヘルスチェックが停止する | 先に通信を観測し、名前空間単位で段階適用する |
| WAFとCiliumを同じ機能として扱う | Web攻撃または横移動のどちらかが残る | 攻撃内容の検査と呼び出し権限の検査を分ける |
| NSGで受信・送信を一律拒否する | ヘルスプローブやAGCからAKSへの通信が失敗する | AzureLoadBalancer、Podアドレス範囲、必要な制御エンドポイントを許可する |
| UDRで通信をNVAへ強制転送する | 戻り経路が非対称になり、接続が不安定になる | 往復経路と送信元アドレス変換を確認する |
| BYO方式でKubernetesリソースだけを削除する | Azure側のFrontendなどが残る | Azureリソースを含む削除手順を用意する |
| すべてのL7ログを長期保存する | 取り込み料金と機密情報の露出が増える | 拒否通信や重要名前空間へ対象を絞る |
| 高負荷APIへ検証せずL7制御を適用する | レイテンシーや処理能力が悪化する | 本番相当のリクエスト数で負荷試験する |
| IstioのL7制御と重ねて導入する | サポート対象外や予期しない通信経路になる | L7制御の責任をどちらか一方へ寄せる |
Application Gateway for Containersの利用時は、NSGの全拒否ルールやUDRによる非対称ルーティングが障害原因になりやすいため、セキュリティポリシーだけでなくネットワーク経路も確認してください。(Microsoft Learn)
性能と機能制限も導入判断に含める
CiliumのL7制御では、対象通信がEnvoyを経由するため、L3/L4だけの制御より処理負荷とレイテンシーが増えます。Microsoftのドキュメントでは、毎秒3,000リクエストを超える規模で性能低下が目立つ可能性が示されています。これは一律の上限ではなく、負荷試験を開始すべき目安として扱うのが適切です。(Microsoft Learn)
また、Ciliumの展開や更新中に既存セッションが終了する場合があります。クライアント、API Gateway、アプリケーションのいずれかに、タイムアウト、再試行、冪等性の設計が必要です。
ACNSのL7ポリシーには、次の制約があります。
- CiliumClusterwideNetworkPolicyではL7ルールを利用できない
- Istioマネージドアドオンなど、別のL7実装との併用に制約がある
- Linuxノードが対象であり、Windowsワークロードを同じ方式で保護できない
- L7制御を適用する通信量に応じて、ノード上のCPUやメモリ使用量が増える
- ポリシー更新やCilium展開時の接続断を考慮する必要がある
WAFについても、Application Gateway for ContainersではDRS 2.1が利用され、従来のCRSや一部の機能とは対応状況が異なります。HTTP DDoSルールセットは現時点でサポートされていないため、WAFだけをDDoS対策として扱うことはできません。カスタムルールで利用できる変数やカスタムブロック応答にも制限があります。(Microsoft Learn)
コストは四つに分けて見積もる
導入コストは、Application Gateway for Containersの料金だけでは判断できません。
- Application Gateway for Containers本体、Frontend、Association、Capacity Unit
- WAFを有効化した場合の追加料金と処理量
- Advanced Container Networking Servicesの料金
- Azure Monitor、Log Analytics、Managed Prometheus、Grafanaなどの監視・保存料金
Application Gateway for Containersは、リソース、Frontend、Association、Capacity Unitなど複数のメーターで課金されます。WAFの利用は単価と処理量に影響します。ACNSも有料サービスであり、ログをLog Analyticsへ大量に送る場合は取り込み量と保持期間の費用が加わります。(Microsoft Learn)
PoCでは、次の数値を計測してから本番費用を試算してください。
- FrontendとAssociationの数
- 通常時とピーク時のリクエスト数
- WAFで検査する通信量
- L7ポリシー対象となるPodと通信量
- 1日あたりのログ生成量
- ログの保持日数
- GrafanaやPrometheusで保持するメトリクス数
対応要否を判断するチェックリスト
| 確認事項 | 判断 |
|---|---|
| Application Gateway for Containersの対応リージョンを利用できる | 次の条件確認へ進む |
| Japan East/West内での処理が必須 | 現時点では本番採用を保留し、代替構成を検討する |
| インターネット公開のHTTP/HTTPS/gRPC APIがある | WAFとCilium L7の組み合わせを優先的に検討する |
| Pod間の横移動や不要なAPI操作を防ぎたい | Cilium L7ポリシーの効果が高い |
| Azure CNI Powered by CiliumとLinuxノードを利用している | ACNS L7を比較的導入しやすい |
| Windowsワークロードが中心 | 適用範囲が限定されるため別方式を検討する |
| Istioなどで既にL7認可を実装している | 重複導入せず、既存方式との役割分担を再設計する |
| 毎秒数千件以上の高負荷APIがある | 本番相当の負荷試験を必須とする |
| GatewayやNetworkPolicyを誰でも変更できる | 導入前にRBACとGitOpsの変更経路を整備する |
| ログの保存先と保持期間が決まっていない | データ境界と監視コストを先に決める |
次の条件がそろっている場合は、対応優先度が高いと判断できます。
- 対応リージョンを利用できる
- 外部公開APIまたは複数テナント向けサービスを運用している
- LinuxとCiliumを採用している
- WAFだけではPod間の横移動を防げない
- Gateway APIとGitOpsを運用できる
- 負荷試験とログ設計を実施できる
反対に、国内リージョン限定、Windows中心、既存のIstio認可を全面利用、高負荷かつ超低遅延が必須といった環境では、現時点での全面導入を急ぐ必要はありません。
安全に導入するための進め方
- リージョンとデータ境界を確認する
Application Gateway for Containersを配置できるリージョン、TLS終端場所、ログ保存先、監査要件を整理します。 - 現在の通信を可視化する
Pod間通信、外部API、DNS、監視、ヘルスチェックなど、正常動作に必要な通信を洗い出します。 - 非本番クラスタでアドオンを有効化する
Workload Identity、Gateway API、Application Load Balancer、Cilium、ACNS L7の前提条件を確認します。 - 一つのサービスだけを対象にする
まずは公開範囲と依存関係が明確なAPIを選び、Gateway、HTTPRoute、WAF、CiliumNetworkPolicyを設定します。 - 許可と拒否のテストを実施する
正常なGET、攻撃文字列を含むGET、不正なPOST、未許可Pod、未許可の外向き通信をそれぞれ確認します。 - 性能を測定する
L7ポリシー適用前後のレイテンシー、CPU、メモリ、エラー率、最大スループットを比較します。 - 監視対象を限定してログを保存する
最初は拒否通信と重要名前空間を中心に取得し、必要性を確認してから対象を広げます。 - 名前空間単位で段階的に展開する
全クラスタへ一度に適用せず、ロールバック手順と例外申請の期限を決めたうえで拡大します。
今回の公式情報によって、AKSのL7保護は「入口のWAF」だけでも「クラスタ内のNetworkPolicy」だけでも不十分であり、複数の境界を連携させる必要があることが明確になりました。
最初に行うべきことは、Application Gateway for Containersの対応リージョンと自社のデータ処理要件を照合することです。条件を満たす場合は、一つの名前空間と一つのAPIを対象にPoCを行い、WAFによる攻撃検知、Ciliumによる不正操作の拒否、Pod間通信、外向き通信、性能、ログ量を確認してください。条件を満たさない場合は、導入を急がず、現行構成で不足している防御層を特定することが次の行動になります。

コメント