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への通信を効果的にブロックできるようになります。ネットワークポリシーを活用することで、必要な通信のみを許可し、システム全体のセキュリティを向上させることができます。適用後のテストや確認を怠らず、設定が正しく反映されていることを確認してください。