![見出し画像](https://assets.st-note.com/production/uploads/images/166050952/rectangle_large_type_2_6b6a07158ee667d631b3c06d60e74212.png?width=1200)
CiliumNetworkPolicyを使ってPod間の通信を安全に管理する
Kubernetes環境でネットワーク通信を制御することは、セキュリティ面でとても重要です。特に異なるアプリケーション間の通信やデータベースへのアクセスには、安全な認証が求められます。
今回は CiliumNetworkPolicy を使って、Pod間の通信に 相互認証(Mutual Authentication)を設定するポリシーについて見ていきます。条件に合わせて必要な部分をカスタマイズし、どのように安全性を高めるのかを整理していきます!
ポリシーの設定内容
1. ポリシーの基本構造
以下のCiliumNetworkPolicyは、特定の条件に基づいてPod間の通信を制御するものです。
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: p3
namespace: web-app
spec:
endpointSelector:
matchLabels:
type: database
egress:
- toEndpoints:
- matchLabels:
type: backend
authentication:
mode: "required" # Mutual Authenticationを有効化
この設定のポイントを詳しく見ていきましょう。
2. ポイント解説
Namespaceの変更
ポリシーの適用範囲を web-app Namespace に限定しました。
これにより、複数のNamespaceがある環境でも他のNamespaceのリソースに影響を与えません。
対象ラベルの変更
type: database ラベルが付けられたPodが、通信先として type: backend ラベルのPodとだけ通信することを許可しています。
つまり、データベースPodがバックエンドPodに安全に接続できる状態を作ります。
相互認証(Mutual Authentication)の有効化
authentication.mode: "required" により、Pod間の通信で Mutual TLS(相互認証)が必須になります。
これによって通信の暗号化はもちろん、通信相手が正しいPodであるかの確認も行えます。
このポリシーの効果
このCiliumNetworkPolicyを適用することで、次のような効果が得られます。
通信のセキュリティ強化
データベースPodとバックエンドPod間の通信に対して、相互認証を通じて暗号化が行われます。
第三者が不正にデータを傍受するリスクを低減します。明確な通信制御
特定のPod(type: database)だけが、指定されたPod(type: backend)と通信できるように制限されます。
不必要なPodへのアクセスを防ぎ、ネットワークの安全性を保ちます。Namespace単位での管理
namespace: web-app に限定されているため、他のNamespaceには影響を与えません。
管理がシンプルでわかりやすくなります。
参考文献
まとめ
このCiliumNetworkPolicyは、Pod間の通信を安全かつ明確に制御するためのものです。web-app Namespace内で type=database のPodが type=backend のPodと安全に通信できるように設計されています。
また、相互認証(Mutual TLS) を有効化することで、通信の暗号化と信頼性をさらに高めています。Kubernetes環境でデータベースやバックエンド間の安全な接続が必要な場合、このようなポリシーを適用することでセキュリティを確保できるでしょう。