コンテンツにスキップ

Istio Ingress向けWallarmコネクタ

Wallarmは、Istioで管理されているAPIを保護し、アウトオブバンド (OOB)によりトラフィック解析を行うコネクタを提供します。WallarmノードをIstioのEnvoyプロキシと併設で展開することにより、コネクタは受信トラフィックをミラーリングし、非同期で解析用に送信すると同時に、トラフィックが中断なく流れ続けることを可能にします。

本統合は、Envoyプロキシ内に展開されたLuaプラグインに依存し、トラフィックのミラーリングおよびWallarmノードとの通信を処理します。

Wallarmプラグインを搭載したIstio

ユースケース

このソリューションは、リアルタイムのトラフィック解析が不要であり、非同期解析で十分な場合に推奨します。

サポートされているWallarmの展開オプションの中で、Kubernetes上でEnvoyプロキシを使用して実行されているIstio管理APIを保護するための最適な選択肢です。

制限事項

このセットアップでは、Wallarmの詳細な設定をWallarm Console UI経由でのみ行うことが可能です。ファイルベースの設定を必要とする一部のWallarm機能は、本実装ではサポートされません。例えば:

要件

デプロイを進める前に、次の要件を満たしていることをご確認ください。

  • Kubernetesクラスター内でAPIトラフィックを管理するEnvoyプロキシを搭載したIstio

  • Helm v3パッケージマネージャー

  • https://us1.api.wallarm.com(US Wallarm Cloud)またはhttps://api.wallarm.com(EU Wallarm Cloud)へのアクセス

  • Wallarm Helmチャートを追加するためのhttps://charts.wallarm.comへのアクセス

  • Docker Hub上のWallarmリポジトリ https://hub.docker.com/r/wallarmへのアクセス

  • 下記IPアドレスへのアクセス(攻撃検出ルールの更新ダウンロードおよびallowlisted, denylisted, or graylistedな国、地域、またはデータセンターの正確なIPの取得のため)

    34.96.64.17
    34.110.183.149
    35.235.66.155
    34.102.90.100
    34.94.156.115
    35.235.115.105
    
    34.160.38.183
    34.144.227.90
    34.90.110.226
    
  • US CloudまたはEU Cloud用Wallarm ConsoleへのAdministratorアクセス

デプロイ

IstioおよびEnvoyプロキシで管理されているAPIを保護するため、以下の手順に従ってください。

  1. Kubernetesクラスター内にWallarmフィルタリングノードサービスを展開します。

  2. Istio内のEnvoyプロキシを設定し、トラフィックをミラーリングしてWallarmノードにアウトオブバンド解析用として送信します。

1. Wallarm Nativeノードの展開

Kubernetesクラスター内にWallarmノードを別サービスとして展開するには、手順に従ってください。

2. Envoyを設定してWallarmノードへトラフィックをミラーリング

  1. support@wallarm.comに連絡して、Istio用のWallarm Luaプラグインコードを入手してください。サポートチームから提供されたファイル名は、以下の手順で使用します。

  2. Luaスクリプトを使用して、WallarmノードへトラフィックをミラーリングするためのEnvoyフィルターおよびクラスタ構成を適用します:

    kubectl apply -f wallarm-envoy-gw-http-filter.yaml
    kubectl apply -f wallarm-envoy-cluster-svc-endpoint.yaml
    
  3. Istio Ingressコントローラの名前空間内にWallarmコネクタとそのLua依存性をマウントするためのConfigMapを作成します:

    kubectl -n <ISTIO_INGRESS_NS> apply -f wallarm-cm-lua-mpack-lib.yaml
    kubectl -n <ISTIO_INGRESS_NS> apply -f wallarm-cm-lua-rrasync.yaml
    
  4. ConfigMapをマウントするため、Istio Ingress Gatewayのデプロイメントを更新します。Istioの管理方法(Helm、IstioOperator、またはカスタムデプロイメント)に応じて、適切に変更を適用してください。

    たとえば、IstioがIstioOperatorを使用してインストールされている場合は、IstioOperatorリソースを更新することでConfigMapをマウントできます:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
          - name: istio-ingressgateway
            enabled: true
            k8s:
              volumes:
                - name: lua-mpack
                  configMap:
                    name: lua-msgpack-lib
                - name: lua-rrasync
                  configMap:
                    name: rr-async-packed
              volumeMounts:
                - name: lua-mpack
                  mountPath: /usr/local/share/lua/5.1/msgpack
                  container: istio-proxy
                - name: lua-rrasync
                  mountPath: /usr/local/share/lua/5.1/rrasync
                  container: istio-proxy
    
    kubectl apply -f istio-operator.yaml
    

テスト

展開されたコネクタの機能をテストするには、以下の手順に従ってください。

  1. Wallarmポッドが正常に稼働していることをご確認ください:

    kubectl -n wallarm-node get pods
    

    wallarm-nodeはWallarmノードサービスが展開されている名前空間です。

    各ポッドの状態はSTATUS: RunningまたはREADY: N/Nである必要があります。例:

    NAME                                READY   STATUS    RESTARTS   AGE
    native-aggregation-5fb5d5444b-6c8n8   3/3     Running   0          51m
    native-processing-7c487bbdc6-4j6mz    3/3     Running   0          51m
    
  2. Istio Gatewayに対してテスト用のパストラバーサル攻撃リクエストを送信します:

    curl https://<ISTIO_GATEWAY_IP>/etc/passwd
    
  3. Wallarm ConsoleのAttacksセクションをUS CloudまたはEU Cloudで開き、攻撃が一覧に表示されていることをご確認ください。

    インターフェース上の攻撃

    コネクタはアウトオブバンドモードで動作し、悪意のあるリクエストをブロックしないため、Wallarmノードは攻撃をブロックせず登録するのみです。

  4. 必要に応じて、別のコンソールウィンドウでWallarmログを監視してください:

    kubectl -n gonode logs native-processing-7c487bbdc6-4j6mz --tail 100 -f
    

Wallarm Luaプラグインのアップグレード

展開されたWallarm Luaプラグインを新しいバージョンにアップグレードするには:

  1. support@wallarm.comに連絡して、Istio Ingress用の更新されたWallarm Luaプラグインコードを入手してください。

  2. Step 2に記載されている手順に従い、更新されたプラグインを展開してください。

プラグインのアップグレードは、特にメジャーバージョンの更新の場合、Wallarmノードのアップグレードが必要になることがあります。リリースの更新やアップグレード手順については、Wallarm Native Nodeの変更履歴を参照してください。非推奨を回避し、将来のアップグレードを簡素化するために、定期的なノードの更新を推奨します。