Kubernetes Envoy Gateway

Next-Gen WAF エージェントは、拡張可能な外部処理サービスとして Envoy Gateway と統合します。これにより、ゲートウェイのリクエストおよびレスポンス処理パイプライン内でリアルタイムのトラフィック検査とセキュリティの保護が可能になります。

前提条件

ワークスペース用のエージェントキーをコピーしてください。デプロイの設定を行う際に必要になります。

Next-Gen WAF Service 拡張機能の仕組み

Envoy Gateway API では、一連の Gateway API 拡張機能を使用することで、Envoy プロキシを利用できるようにしています。EnvoyExtensionPolicy という CRD を使用すると、外部処理を設定できます。

GRPC 外部処理サービス

このセクションでは、Envoy Gateway のサンプルアプリ向けに Next-Gen WAF エージェントをデプロイします。

  1. Envoy Gateway の前提条件に関する手順に従って、Gateway API CRD、Envoy Gateway、およびサンプルアプリをインストールします。

  2. 外部処理サービスとして使用される Next-Gen WAF エージェント用の Kubernetes デプロイを作成します。

    注 : readinessProbe と SIGSCI_ENVOY_GRPC_ADDRESS のポートは一致している必要があります。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: ngwaf-agent
    spec:
    replicas: 2
    selector:
    matchLabels:
    app: ngwaf-agent
    template:
    metadata:
    labels:
    app: ngwaf-agent
    spec:
    containers:
    - name: ngwaf-agent-container
    image: signalsciences/sigsci-agent:latest
    imagePullPolicy: Never
    ports:
    - containerPort: 9999
    env:
    - name: SIGSCI_ACCESSKEYID
    valueFrom:
    secretKeyRef:
    name: ngwaf-agent-keys
    key: your-access-key-id
    - name: SIGSCI_SECRETACCESSKEY
    valueFrom:
    secretKeyRef:
    name: ngwaf-agent-keys
    key: your-secret-access-key
    - name: SIGSCI_ENVOY_EXTPROC_ENABLED
    value: "true"
    - name: SIGSCI_ENVOY_GRPC_ADDRESS
    value: "0.0.0.0:9999"
    - name: SIGSCI_SERVER_FLAVOR
    value: "envoy-gateway"
    readinessProbe:
    grpc:
    port: 9999
    ---
    apiVersion: v1
    kind: Service
    metadata:
    name: ngwaf-agent
    spec:
    selector:
    app: ngwaf-agent
    ports:
    - protocol: TCP
    port: 9999
    targetPort: 9999
  3. エージェントのシークレット認証情報を作成します。

    kubectl create secret generic ngwaf-agent-keys \
    --from-literal=your-access-key-id=YOUR_ACCESS_KEY_ID \
    --from-literal=your-secret-access-key=YOUR_SECRET_ACCESS_KEY
  4. /mywaf パス上のトラフィックをバックエンドサービスにルーティングするための新しい HTTPRoute リソースを作成します。必須ではありませんが、リクエストバッファ制限を設定して、Next-Gen WAFエージェントが検査する量を制限することをお勧めします。

    注 : バッファの上限が設定されている状態で本文がその上限を超えると、上限を超えるリクエストは失敗し、Envoy より HTTP "413 Payload Too Large" エラーが表示されます。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    ---
    apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: BackendTrafficPolicy
    metadata:
    name: request-buffer-limit
    spec:
    targetRefs:
    - group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: mywaf
    requestBuffer: # Maximum request body buffered and sent to the ngwaf-agent
    limit: 1Mi # Supports SI units (e.g., 4Ki, 1Mi)
    ---
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
    name: mywaf
    spec:
    parentRefs:
    - name: eg
    hostnames:
    - "www.example.com"
    rules:
    - matches:
    - path:
    type: PathPrefix
    value: /mywaf
    backendRefs:
    - name: backend
    port: 3000
  5. 外部処理サービスを設定するために、新しい EnvoyExtensionPolicy リソースを作成します。この EnvoyExtensionPolicy は、前のステップで作成された HTTPRoute mywaf を対象としています。処理のために、ポート 9999 で GRPC 外部処理サービス ngwaf-agent を呼び出します。

    注 : processingMode構造体は、外部プロセッサに送信する内容を定義するために使用されます。リクエストに関しては、Next-Gen WAFエージェントはバッファリングされたメッセージボディのみをサポートします。このモードでは、メッセージ本文をメモリにバッファリングし、本文全体を一度に送信します。このため、バッファ上限の設定を推奨します。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    ---
    apiVersion: gateway.envoyproxy.io/v1alpha1
    kind: EnvoyExtensionPolicy
    metadata:
    name: ngwaf-agent-policy
    spec:
    targetRefs:
    - group: gateway.networking.k8s.io
    kind: HTTPRoute
    name: mywaf
    extProc:
    - backendRefs:
    - name: ngwaf-agent
    port: 9999
    processingMode:
    request:
    body: Buffered
    attributes:
    - connection.tls_version
    - request.host
    - request.path
    - request.scheme
    - source.address
    response: {}
    failOpen: true
    messageTimeout: 250ms
  6. 作成した HTTPRoute を介してバックエンドサービスにリクエストを送信し、設定をテストします。以下はリクエストとレスポンスのサンプルです。

    ngwaf-agent がリクエストにシグナルを追加したことが確認できるはずです。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    curl -v -H "Host: www.example.com" -H "Content-Type: text/plain" "http://${GATEWAY_HOST}/mywaf?cmd.exe=../../../etc/passwd" -d "{\"payload\": \"traversal\"}"
    * Trying 172.19.0.3:80...
    * Connected to 172.19.0.3 (172.19.0.3) port 80
    > POST /mywaf?cmd.exe=../../../etc/passwd HTTP/1.1
    > Host: www.example.com
    > User-Agent: curl/8.5.0
    > Accept: */*
    > Content-Type: text/plain
    > Content-Length: 24
    >
    < HTTP/1.1 200 OK
    < content-type: application/json
    < x-content-type-options: nosniff
    < date: Thu, 14 May 2026 06:14:35 GMT
    < content-length: 632
    < x-sigsci-tags: TRAVERSAL,SUSPECTED-BAD-BOT
    < x-sigsci-request-id: 6a05684b826b7576ad8e98ab
    <
    {
    "path": "/mywaf?cmd.exe=../../../etc/passwd",
    "host": "www.example.com",
    "method": "POST",
    "proto": "HTTP/1.1",
    "headers": {
    "Accept": "*/*",
    "Content-Length": "24",
    "Content-Type": "text/plain",
    "Host": "www.example.com",
    "User-Agent": "curl/8.5.0",
    "X-Sigsci-Request-Id": "6a05684deadbeef76ad8e98ab",
    "X-Sigsci-Tags": "TRAVERSAL,SUSPECTED-BAD-BOT"
    },
    "body": "{\"payload\": \"traversal\"}",
    "clientIP": "172.19.0.1",
    "timestamp": "2026-05-14T06:14:35Z"
    }

デバッグログ記録

トラブルシューティングのために、詳細なログ記録を有効にします。

  1. 以下の環境変数を追加します。

    env:
    - name: SIGSCI_DEBUG_LOG_VERBOSITY
    value: "3" # Enables ext_proc debug logs
  2. エージェントのログで処理の詳細を確認します。

    kubectl logs -l app=ngwaf-agent -f