【ITニュース解説】Protecting our EKS Nodes with Wazuh
2025年09月19日に「Dev.to」が公開したITニュース「Protecting our EKS Nodes with Wazuh」について初心者にもわかりやすく解説しています。
ITニュース概要
AWS EKSノードをWazuhで保護し、Kubernetesワークロードの脆弱性検知と継続的監視を実現する。WazuhサーバーをAWS上にセキュアに構築し、EKSノードグループにWazuhエージェントを自動インストールする具体的な手順と設定方法を示す。
ITニュース解説
このニュース記事は、Amazon EKSというコンテナオーケストレーションサービスを利用するシステムにおいて、Wazuhというセキュリティツールを使ってノードの保護を強化する方法を解説している。システムエンジニアを目指す初心者にとって、クラウド環境でのセキュリティ対策の具体的な実装方法を学ぶ上で非常に参考になるだろう。
Wazuhは、脅威の検出、インシデントへの対応、そして規制遵守(コンプライアンス)を支援するオープンソースのセキュリティプラットフォームである。このツールを使うことで、システム内の脆弱性(セキュリティ上の弱点)を特定したり、継続的に不正な活動がないか監視したりすることが可能になる。この記事では、WazuhサーバーをAWS上に安全にデプロイし、Amazon EKSの各ノードにWazuhエージェントを自動的にインストールする手順を紹介しており、これによりKubernetesワークロード全体で脆弱性の検出と継続的な監視を実現する。
このセキュリティシステムの構築には、AWSアカウントとAWS CLI(コマンドラインインターフェース)が必須となる。また、VPC(仮想ネットワーク)、EC2(仮想サーバー)、ACM Private CA(プライベートな証明機関)、Client VPN(VPN接続サービス)に対する適切な権限が必要だ。証明書の発行にはOpenSSLというツールも使用する。
AWS Client VPNは、ユーザーがOpenVPNベースのクライアントを通じてAWSリソースに安全に接続するためのマネージドVPNサービスである。ACM Private CAで発行された証明書をClient VPNで利用することで、サーバーとクライアントがお互いの身元を確認する「相互認証」が可能となり、接続の安全性が大幅に向上する。
システム構築の具体的な手順を見ていこう。 まず、Wazuhサーバーを配置するためのVPC(仮想プライベートクラウド)を作成する。VPCはAWS上のプライベートなネットワーク空間であり、その中にサブネットという区画を作る。このVPCでは主に三つのサブネットが作られる。一つは、NAT Gateway(ネットワークアドレス変換ゲートウェイ)を配置するための「パブリックサブネット」。NAT Gatewayは、プライベートなネットワークにあるサーバーがインターネットにアクセスする際の出口となる。もう一つは、Wazuh All-in-Oneサーバーを配置する「プライベートサブネット」。そして、Client VPNからの接続を受け入れる「VPNサブネット」だ。Wazuhサーバーはインターネットから直接アクセスできないよう、必ずプライベートサブネットに配置し、パブリックIPアドレスは割り当てない。これはセキュリティ上非常に重要だ。記事では、Publicサブネット、Wazuh Server用のPrivateサブネット、VPN Client用のPrivateサブネットそれぞれにIPアドレス範囲(CIDR)を定義し、ルートテーブル(ネットワークの経路を示す表)も適切に設定する。Wazuhサーバーのサブネットのルートテーブルには、インターネットへのアウトバウンドアクセスが必要な場合、NAT Gatewayを経由するよう設定する。
もしEKSクラスターがWazuhサーバーとは異なるVPCにある場合、両方のVPC間で通信ができるようにVPCピアリングを設定する。これは、二つのVPCを直接接続し、プライベートIPアドレスを使ってまるで同じVPC内にあるかのように通信させる機能だ。これにより、EKSノードとWazuhサーバーが安全に連携できるようになる。
次に、セキュリティの核となる証明書を準備する。Client VPNで相互認証を行うため、ACM Private CAを使用してサーバー証明書とクライアント証明書を作成する。OpenSSLを使って証明書署名要求(CSR)と秘密鍵を生成し、ACM Private CAで証明書を発行してもらう。発行された証明書は、AWS Certificate Manager(ACM)にインポートされ、Client VPNで利用可能になる。
セキュリティグループ(SG)の設定も欠かせない。セキュリティグループは、仮想サーバーへのネットワークトラフィックを制御する仮想的なファイアウォールだ。Client VPN用のセキュリティグループは、UDPポート443(VPN接続で使われる)からのインバウンドトラフィックと、VPNに接続したクライアントのIPアドレス範囲からのトラフィックを許可するように設定する。Wazuhサーバー用のセキュリティグループは、SSH接続(ポート22)、Webアクセス(ポート443)、そしてWazuhエージェントからの通信(ポート1514と1515)を、VPNに接続したクライアントのIPアドレス範囲からのみ許可するように設定する。これにより、WazuhサーバーへのアクセスはVPN経由に限定され、不正な外部からのアクセスを防ぐ。
これらの準備が整ったら、Client VPNエンドポイントを作成する。ここでは、作成済みのACMサーバー証明書と、ルートCAを使って相互認証を有効にする。Client VPNエンドポイントをVPNサブネットに関連付け、Wazuhサーバーのサブネットへのルート(通信経路)を設定し、VPNクライアントからのアクセスを許可する。
いよいよWazuh All-in-Oneサーバーを起動する。AWS Marketplaceで提供されている公式のWazuh All-in-One AMI(Amazon Machine Image、仮想サーバーのテンプレート)を使用し、デプロイする。このサーバーはパブリックIPアドレスなしで、プライベートサブネットに配置し、Wazuhサーバー用のセキュリティグループをアタッチする。
最後に、クライアント側のVPN設定を行う。AWS Client VPNから設定ファイル(.ovpnファイル)をダウンロードし、そこに自分で作成したクライアント証明書、秘密鍵、ルートCAの情報を追記する。この設定ファイルをAWS VPN ClientまたはOpenVPN ClientなどのVPNクライアントソフトウェアにインポートし、VPN接続を確立する。接続後、WazuhのウェブUIにアクセスできること、EKSノードからWazuhエージェントがポート1514と1515で通信できることを確認すれば、Wazuhのデプロイは完了だ。これにより、WazuhサーバーはVPN経由でのみ安全にアクセスできる状態となる。
次に、EKSノードにWazuhエージェントをインストールする手順だ。これは、EC2インスタンス(EKSのノードとなる仮想サーバー)が起動する際に、Wazuhエージェントが自動的にインストールされるように設定する。具体的には、新しい起動テンプレート(Launch Template)を作成する。このテンプレートには、EKSノードが使用するAMI(OSイメージ)、インスタンスタイプ、ネットワーク設定、そして最も重要な「ユーザーデータ」というスクリプトが含まれる。ユーザーデータスクリプトは、インスタンスが起動する際に自動的に実行されるシェルスクリプトで、この中でWazuhエージェントのダウンロード、インストール、設定、そして起動が行われる。スクリプト内のWAZUH_MANAGERという環境変数にWazuhサーバーのプライベートIPアドレスを指定することで、エージェントがどのWazuhサーバーに接続すればよいかを認識する。この起動テンプレートを使用してEKSのノードグループを作成すると、新しく起動するEKSノードには自動的にWazuhエージェントがインストールされ、Wazuhサーバーに登録される。Wazuhサーバーのダッシュボードで、これらのノードが正常に登録されていることを確認できる。
この記事の結論として、Client VPNとプライベート証明書による接続は非常に安全だが、長期的に見るとコストが高くなる可能性があると指摘している。その代替案として、AWS Systems Manager Session Managerのポートフォワーディング機能を利用する方法が挙げられている。Session Managerを使うことで、ネットワーク層ではなくAWSのサービス層でアクセス制御を行うことができ、複雑さとコストを削減しながらも高いセキュリティを維持できる。これは、クラウド環境におけるセキュリティと運用のバランスを考える上で重要な視点となる。
このように、WazuhとAWSのさまざまなサービスを組み合わせることで、Amazon EKSのようなモダンなコンテナ環境においても、強固なセキュリティ監視体制を構築できることがわかる。VPCの設計、証明書の管理、ネットワークセキュリティ、そして自動化されたエージェントのデプロイまで、システムエンジニアが学ぶべき多くの重要な概念と技術がこの構築手順には含まれている。