Azure Web Application Firewall в шлюзе приложений для контейнеров

Azure Web Application Firewall обеспечивает централизованную защиту веб-приложений от распространенных эксплойтов и уязвимостей. Все функциональные возможности Azure Web Application Firewall осуществляются в рамках политики, на которую можно ссылаться в правилах прослушивателя или маршрутизации на основе пути в конфигурации Gateway API YAML.

Диаграмма, показывающая правило Azure Web Application Firewall, блокирующее запрос.

Реализация шлюза приложений для контейнеров

Политика безопасности

Шлюз приложений для контейнеров представляет новый дочерний ресурс с именем SecurityPolicy в Azure Resource Manager. Ресурс SecurityPolicy предоставляет область, к которой политики Azure Web Application Firewall могут ссылаться в контроллере балансировки нагрузки ALB.

Кастомный ресурс Kubernetes

Шлюз приложений для контейнеров представляет новый настраиваемый ресурс WebApplicationFirewallPolicy. Настраиваемый ресурс отвечает за определение того, какая политика Azure Web Application Firewall должна использоваться в каком объеме.

Ресурс WebApplicationFirewallPolicy может использовать следующие ресурсы Kubernetes:

  • Gateway
  • HTTPRoute

Ресурс WebApplicationFirewallPolicy также может ссылаться на следующие разделы по имени для дальнейшей детализации:

  • Gateway: Listener

Примеры реализаций

Применить политику к ресурсу шлюза

Ниже приведен пример конфигурации YAML, в которой показано нацеливание на ресурс шлюза, который будет применяться ко всем прослушивателям заданного интерфейсного ресурса шлюза приложений для контейнеров.

apiVersion: alb.networking.azure.io/v1
kind: WebApplicationFirewallPolicy
metadata:
  name: sample-waf-policy
  namespace: test-infra
spec:
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: contoso-waf-route
    namespace: test-infra
  webApplicationFirewall:
    id: /subscriptions/.../Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/waf-policy-0

Ограничьте действие политики для конкретного слушателя ресурса шлюза

В ресурсе Gateway могут быть разные доменные имена, установленные различными слушателями (например, contoso.com и fabrikam.com). Если contoso.com является именем узла listenerA, а fabrikam.com именем узла listenerB, вы можете определить свойство sectionNames для выбора правильного прослушивателя (например, listenerA для contoso.com).

apiVersion: alb.networking.azure.io/v1
kind: WebApplicationFirewallPolicy
metadata:
  name: sample-waf-policy
  namespace: test-infra
spec:
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: contoso-waf-route
    namespace: test-infra
    sectionNames: ["contoso-listener"]
  webApplicationFirewall:
    id: /subscriptions/.../Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/waf-policy-0

Сфера применения политики для всех маршрутов и путей

В этом примере показано, как нацелить определенный ресурс HTTPRoute для применения политики к любым правилам маршрутизации и путям в заданном ресурсе HTTPRoute.

apiVersion: alb.networking.azure.io/v1
kind: WebApplicationFirewallPolicy
metadata:
  name: sample-waf-policy
  namespace: test-infra
spec:
  targetRef:
    group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: contoso-pathA
    namespace: test-infra
  webApplicationFirewall:
    id: /subscriptions/.../Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/waf-policy-0

Ограничить политику на определенный маршрут

Чтобы использовать разные политики WAF для разных путей одного и того же Gateway или шлюза —> имя раздела прослушивателя, можно определить два ресурса HTTPRoute с уникальным путем, каждый из которых ссылается на соответствующую политику WAF.

apiVersion: alb.networking.azure.io/v1
kind: WebApplicationFirewallPolicy
metadata:
  name: sample-waf-policy-A
  namespace: test-infra
spec:
  targetRef:
    group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: contoso-pathA
    namespace: test-infra
  webApplicationFirewall:
    id: /subscriptions/.../Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/waf-policy-0
---
apiVersion: alb.networking.azure.io/v1
kind: WebApplicationFirewallPolicy
metadata:
  name: sample-waf-policy-B
  namespace: test-infra
spec:
  targetRef:
    group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: contoso-pathB
    namespace: test-infra
  webApplicationFirewall:
    id: /subscriptions/.../Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/waf-policy-1

Ограничения

Следующие функции не поддерживаются в политике Azure Web Application Firewall, связанной с шлюзом приложений для контейнеров:

  • Политика пересечения регионов и подписок: ваша политика WAF должна находиться в той же подписке и регионе, что и ресурс шлюза приложений на базе контейнеров.
  • Управляемые правила набора основных правил (CRS): шлюз приложений для контейнеров WAF поддерживает только набор правил по умолчанию (DRS) 2.1.
  • Устаревший набор правил Bot Manager: набор правил Bot Manager 0.1 не поддерживается, но поддерживаются наборы правил Bot Manager версии 1.0 и 1.1.
  • Действия с вызовом JavaScript в правилах Bot Manager: вы не можете установить действие правила Bot Manager на JavaScript-вызов.
  • Действия проверки Captcha в правилах Bot Manager: вы не можете установить действие Captcha для правила Bot Manager.
  • Microsoft Security Copilot: Copilot безопасности не поддерживается в шлюзе приложений для контейнеров WAF.
  • Настраиваемый ответ блока: Настройка пользовательского ответа блока в политике WAF не поддерживается в WAF шлюзе приложений для контейнеров.
  • Заголовок X-Forwarded-For (XFF): WAF Application Gateway for Containers не поддерживает использование переменной XFF в пользовательских правилах.
  • Набор правил DDoS HTTP: этот управляемый набор правил не поддерживается в шлюзе приложений для контейнеров.

Pricing

Сведения о ценах см. в разделе "Общие сведения о ценах на шлюз приложений для контейнеров".