統合Wallarmサービス付きNGINX Ingress Controllerのデプロイ¶
本手順は、K8sクラスターにWallarm NGINXベースのIngress Controllerをデプロイする手順を提供します。ソリューションはWallarm Helmチャートからデプロイされます。
本ソリューションは、Wallarmサービスが統合されたCommunity Ingress NGINX Controllerをベースに構築されています。最新バージョンでは、Community Ingress NGINX Controller 1.11.3およびNGINX stable 1.25.5が使用されています。
以下のアーキテクチャとなります。
ユースケース¶
全てのサポートされているWallarmのデプロイオプションの中で、このソリューションは以下のユースケースに対して推奨されます:
-
Ingress Controllerが存在せず、Community Ingress NGINX Controllerに対応するIngressリソースにトラフィックをルーティングするセキュリティレイヤーが存在しない場合。
-
現在Community Ingress NGINX Controllerを使用しており、標準のController機能と強化されたセキュリティ機能を両立するセキュリティソリューションを探している場合。本手順に記載のWallarm-NGINX Ingress Controllerに簡単に切り替えることが可能です。既存の設定を新たなデプロイメントに移行することで、入れ替えが完了します。
既存のIngress ControllerとWallarm Controllerを同時に使用する場合は、設定の詳細についてIngress Controllerチェーンガイドをご参照ください。
必要条件¶
-
Kubernetes platform version 1.26-1.30
-
Helm package manager
-
Compatibility of your services with the Community Ingress NGINX Controller version 1.11.5
-
Access to the account with the Administrator role in Wallarm Console for the US Cloud or EU Cloud
-
Access to
https://us1.api.wallarm.com
for working with US Wallarm Cloud or tohttps://api.wallarm.com
for working with EU Wallarm Cloud -
Access to
https://charts.wallarm.com
to add the Wallarm Helm charts. Ensure the access is not blocked by a firewall -
Access to the Wallarm repositories on Docker Hub
https://hub.docker.com/r/wallarm
. Make sure the access is not blocked by a firewall -
Access to the IP addresses below for downloading updates to attack detection rules and API specifications, as well as retrieving precise IPs for your allowlisted, denylisted, or graylisted countries, regions, or data centers
関連情報
既知の制限事項¶
-
postanalyticsモジュールなしでの動作はサポートされません。
-
postanalyticsモジュールのスケールダウンにより、攻撃データが部分的に欠落する可能性があります。
インストール¶
-
Ingressに対してトラフィック分析を有効化します。
-
Wallarm Ingress Controllerの動作を確認します。
Step 1: Wallarm Ingress Controllerのインストール¶
Wallarm Ingress Controllerをインストールするには、以下の手順に従います。
-
該当するタイプのフィルタリングノードトークンを生成します。
-
Wallarm Ingress Controllerを含むHelmチャートをデプロイするため、Kubernetesのnamespaceを作成します。
-
Wallarmチャートリポジトリを追加します。
-
Wallarm設定を記載した
values.yaml
ファイルを作成します。最小構成の例は以下の通りです。API tokenを使用する場合は、
nodeGroup
パラメータにノードグループ名を指定してください。ノードはこのグループに割り当てられ、Wallarm ConsoleのNodesセクションに表示されます。デフォルトのグループ名はdefaultIngressGroup
です。また、WallarmノードトークンをKubernetes Secretsに保存してHelmチャートで参照することもできます。詳細はこちら
Deployment from your own registries
values.yaml
ファイルの要素を上書きすることで、自社レジストリに保存されたイメージからWallarm Ingress Controllerをインストールすることができます。 -
Wallarmパッケージをインストールします。
helm install --version 5.3.0 <RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE> -f <PATH_TO_VALUES>
<RELEASE_NAME>
はIngress ControllerチャートのHelmリリース名です。<KUBERNETES_NAMESPACE>
はWallarm Ingress Controllerを含むHelmチャート用に作成したKubernetes namespaceです。<PATH_TO_VALUES>
はvalues.yaml
ファイルへのパスです。
Step 2: Ingressに対するトラフィック分析の有効化¶
kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-mode=monitoring
kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-application="<APPLICATION_ID>"
-
<YOUR_INGRESS_NAME>
はIngressの名前です。 -
<YOUR_INGRESS_NAMESPACE>
はIngressのnamespaceです。 -
<APPLICATION_ID>
は、それぞれのアプリケーションまたはアプリケーショングループに固有の正の数です。これにより、個別の統計情報取得や、対応するアプリケーションを対象とした攻撃の識別が可能になります。
Step 3: Wallarm Ingress Controllerの動作確認¶
-
Podのリストを取得します。
各PodはSTATUS: RunningおよびREADY: N/Nと表示される必要があります。例:
-
テスト用のPath Traversal攻撃を含むリクエストをIngress Controller Serviceに送信します。
フィルタリングノードが
block
モードで動作している場合、リクエストのレスポンスとして403 Forbidden
が返され、Wallarm ConsoleのAttacksセクションに攻撃が表示されます。
ARM64デプロイメント¶
NGINX Ingress ControllerのHelmチャートバージョン4.8.2より、ARM64プロセッサとの互換性が導入されました。初期はx86アーキテクチャ向けに設定されていましたが、ARM64ノードでのデプロイはHelmチャートパラメータの変更が必要です。
ARM64環境では、Kubernetesノードにarm64
ラベルが付与されることが多いため、Wallarmワークロードを適切なノードタイプに割り当てるため、Helmチャート設定内でnodeSelector
、tolerations
、またはaffinityルールを参照してください。
以下は、Google Kubernetes Engine(GKE)向けのWallarm Helmチャートの例です。該当ノードにはkubernetes.io/arch: arm64
ラベルが利用されています。このテンプレートは、他のクラウド環境におけるARM64のラベリング規則に合わせて変更可能です。
controller:
nodeSelector:
kubernetes.io/arch: arm64
admissionWebhooks:
nodeSelector:
kubernetes.io/arch: arm64
patch:
nodeSelector:
kubernetes.io/arch: arm64
wallarm:
tarantool:
nodeSelector:
kubernetes.io/arch: arm64
enabled: true
token: "<NODE_TOKEN>"
apiHost: "us1.api.wallarm.com" # if using EU Cloud, comment out this line
# If using an API token, uncomment the following line and specify your node group name
# nodeGroup: defaultIngressGroup
controller:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
admissionWebhooks:
patch:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
wallarm:
tarantool:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
enabled: true
token: "<NODE_TOKEN>"
apiHost: "us1.api.wallarm.com" # if using EU Cloud, comment out this line
# If using an API token, uncomment the following line and specify your node group name
# nodeGroup: defaultIngressGroup
自社レジストリからのデプロイ¶
何らかの理由でWallarmパブリックリポジトリからDockerイメージを取得できない場合(例えば、社内セキュリティポリシーにより外部リソースの使用が制限されている場合)、代替として以下を行うことが可能です:
-
これらのイメージを自社のプライベートレジストリにクローンします。
-
自社レジストリに保存されたイメージを使用して、Wallarm NGINXベースのIngress Controllerをインストールします。
HelmチャートでNGINXベースのIngress Controllerのデプロイメントに使用されるDockerイメージは、以下の通りです:
自社レジストリに保存されたイメージを使用してWallarm NGINXベースのIngress Controllerをインストールするには、Wallarm Ingress Controller Helmチャートのvalues.yaml
ファイルを上書きしてください:
controller:
image:
## The image and tag for wallarm nginx ingress controller
##
registry: <YOUR_REGISTRY>
image: wallarm/ingress-controller
tag: <IMAGE_TAG>
wallarm:
helpers:
## The image and tag for the helper image
##
image: <YOUR_REGISTRY>/wallarm/node-helpers
tag: <IMAGE_TAG>
その後、修正済みのvalues.yaml
を使用してインストールを実行してください。
設定¶
Wallarm Ingress Controllerのインストールおよび動作確認が完了した後、以下のような高度な設定を行うことができます:
高度な設定に使用されるパラメータや詳細な手順については、こちらのリンクを参照してください。