見出し画像

CiliumのegressDeny設定でマイクロサービス間の通信制御を実現

FrontendからDatabaseへのアクセスを制限するCiliumポリシーの設定

アプリケーションの安全性を高めるためには、不要な通信を制御することが重要です。特にマイクロサービス間のアクセス制御は、ネットワークポリシーで適切に管理する必要があります。ここでは、Ciliumを使って「role:frontend」を持つPodから「role:db」を持つPodへのアクセスを禁止する設定を具体的に見ていきます。


以下が、修正後のCiliumNetworkPolicyの例です。この設定で「frontend」から「db」への通信をブロックします。

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: frontend-db-block
  namespace: frontend
spec:
  endpointSelector:
    matchLabels:
      role: frontend
  egressDeny:
  - toEndpoints:
    - matchLabels:
        role: db

ポリシーの重要ポイント

(1) 対象の選択 (endpointSelector)
この部分では、ラベルrole:frontendを持つPodを対象として指定しています。これにより、Frontendの役割を担うPodにのみポリシーが適用されます。

(2) アクセス制御 (egressDeny)
egressDenyは送信トラフィックの制御を行うセクションです。toEndpoints内でラベルrole:dbを持つPodを指定することで、Databaseの役割を持つPodへの通信をブロックします。


適用する対象

このポリシーは、以下の条件を満たすPodに適用されます。

  • ラベル: role:frontend を持つPod

  • Namespace: この例ではfrontend Namespaceに配置されているPod

Namespaceが異なる場合、適用範囲を調整する必要があります。例えば、Databaseがdb Namespaceにある場合は、toEndpointsでNamespaceを明示的に指定するとよいでしょう。


ポリシー適用後の確認手順

ポリシーが期待通りに機能するか確認するために、以下の手順を実施します。

(1) ポリシーの適用
ポリシー定義ファイルを作成したら、以下のコマンドを実行して適用します。

kubectl apply -f policy.yaml

(2) 通信テスト
Frontend PodからDatabase Podへの通信がブロックされているか確認します。たとえば、Frontend Podに入って以下のコマンドを実行します。

curl http://<db-pod-ip>:<port>

通信がブロックされていれば、ポリシーは正しく機能しています。

(3) Ciliumのログを確認
Ciliumのモニタリングコマンドを使用して、通信がブロックされたログを確認します。

cilium monitor

ブロックされたトラフィックがログに表示されるはずです。


注意点

  • Namespaceの確認: Databaseが別のNamespaceに存在する場合、ポリシーが期待通りに動作しない可能性があります。必要に応じてNamespaceスコープを追加してください。

  • ラベルの適切な設定: Podにラベルが正しく設定されていないと、ポリシーが適用されません。kubectl get pods --show-labelsコマンドでラベルを確認しましょう。


まとめ

今回の設定で、「role:frontend」を持つPodから「role:db」を持つPodへの通信を効果的にブロックできるようになります。ネットワークポリシーを活用することで、必要な通信のみを許可し、システム全体のセキュリティを向上させることができます。適用後のテストや確認を怠らず、設定が正しく反映されていることを確認してください。

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