見出し画像

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を適用することで、次のような効果が得られます。

  1. 通信のセキュリティ強化
    データベースPodとバックエンドPod間の通信に対して、相互認証を通じて暗号化が行われます。
    第三者が不正にデータを傍受するリスクを低減します。

  2. 明確な通信制御
    特定のPod(type: database)だけが、指定されたPod(type: backend)と通信できるように制限されます。
    不必要なPodへのアクセスを防ぎ、ネットワークの安全性を保ちます。

  3. Namespace単位での管理
    namespace: web-app に限定されているため、他のNamespaceには影響を与えません。
    管理がシンプルでわかりやすくなります。


参考文献

まとめ

このCiliumNetworkPolicyは、Pod間の通信を安全かつ明確に制御するためのものです。web-app Namespace内で type=database のPodが type=backend のPodと安全に通信できるように設計されています。

また、相互認証(Mutual TLS) を有効化することで、通信の暗号化と信頼性をさらに高めています。Kubernetes環境でデータベースやバックエンド間の安全な接続が必要な場合、このようなポリシーを適用することでセキュリティを確保できるでしょう。

いいなと思ったら応援しよう!