mcpField
I
implementing-network-policies-for-kubernetes

implementing-network-policies-for-kubernetes

github.com/mukul975セキュリティ35.2k75 回インストール8 週間前に更新
リポジトリ

implementing-network-policies-for-kubernetes について

NetworkPolicy で Pod 単位の通信を制御する、クラスタ管理者やセキュリティエンジニア向けの Kubernetes セキュリティスキルです。デフォルト拒否からアプリケーション別ルール、疎通検証までの手順を示します。

主な機能

  1. 01全通信のデフォルト拒否
  2. 02DNS のアウトバウンド設定
  3. 03アプリケーション別・Namespace 別ポリシー
  4. 04外部へのアウトバウンド制限
  5. 05クラウドメタデータへのアクセス遮断
  6. 06ポリシーと疎通の検証

活用シーン

  1. 01Namespace にネットワーク分離を適用
  2. 02アプリケーション Pod の送信通信を制限
  3. 03クラスタ内のラテラルムーブメントを抑制

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill implementing-network-policies-for-kubernetes

インストール後、Claude Code で/implementing-network-policies-for-kubernetesを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

Kubernetes のネットワークポリシーの実装

概要

Kubernetes の NetworkPolicy は、Pod、Namespace、外部エンドポイント間のトラフィックフローを制御するイングレスルールとエグレスルールを定義し、Pod レベルのネットワークセグメンテーションを提供します。Calico や Cilium などの CNI プラグインと組み合わせることで、ネットワークポリシーはゼロトラストのマイクロセグメンテーションを適用し、クラスター内でのラテラルムーブメントを防止します。

使用する場面

  • 環境に Kubernetes のネットワークポリシー機能をデプロイまたは設定する場合
  • コンプライアンス要件に準拠したセキュリティ制御を確立する場合
  • この領域のセキュリティアーキテクチャを構築または改善する場合
  • この実装を必要とするセキュリティ評価を実施する場合

前提条件

  • NetworkPolicy に対応した CNI(Calico、Cilium、Antrea)を備えた Kubernetes クラスター
  • 管理者アクセス権で設定された kubectl
  • Pod のラベルとセレクターに関する知識

ワークフロー

ステップ 1:すべてのトラフィックをデフォルトで拒否する
# default-deny-all.yaml - Apply to every namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: production
spec:
  podSelector: {}  # Applies to all pods
  policyTypes:
    - Ingress
    - Egress
ステップ 2:DNS のエグレスを許可する(サービスディスカバリーに必須)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-dns
  namespace: production
spec:
  podSelector: {}
  policyTypes:
    - Egress
  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: kube-system
      ports:
        - protocol: UDP
          port: 53
        - protocol: TCP
          port: 53
ステップ 3:アプリケーション固有のポリシー
# Allow frontend to reach backend only
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-allow-frontend
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: frontend
      ports:
        - protocol: TCP
          port: 8080
---
# Allow backend to reach database only
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database-allow-backend
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: database
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: backend
      ports:
        - protocol: TCP
          port: 5432
ステップ 4:Namespace をまたぐポリシー
# Allow monitoring namespace to scrape metrics
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-monitoring-scrape
  namespace: production
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              purpose: monitoring
      ports:
        - protocol: TCP
          port: 9090  # Prometheus metrics port
ステップ 5:エグレスの制限
# Restrict egress to specific external services
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-egress
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
    - Egress
  egress:
    - to:
        - podSelector:
            matchLabels:
              app: database
      ports:
        - protocol: TCP
          port: 5432
    - to:  # Allow external API
        - ipBlock:
            cidr: 203.0.113.0/24
      ports:
        - protocol: TCP
          port: 443
    - to:  # DNS
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: kube-system
      ports:
        - protocol: UDP
          port: 53
ステップ 6:クラウドメタデータへのアクセスをブロックする
# Prevent SSRF to cloud metadata service
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: block-metadata
  namespace: production
spec:
  podSelector: {}
  policyTypes:
    - Egress
  egress:
    - to:
        - ipBlock:
            cidr: 0.0.0.0/0
            except:
              - 169.254.169.254/32  # AWS/GCP metadata
              - 100.100.100.200/32  # Azure metadata

検証コマンド

# Verify policies are applied
kubectl get networkpolicies -n production

# Test connectivity (should be blocked)
kubectl run test-pod --image=busybox --restart=Never -n production -- wget -qO- --timeout=2 http://database-service:5432
# Expected: timeout (blocked by policy)

# Test allowed traffic
kubectl run frontend-test --image=busybox --labels=app=frontend --restart=Never -n production -- wget -qO- --timeout=2 http://backend-service:8080
# Expected: connection succeeds

参考資料

コメント