mcpField
K
k8s-security-policies

k8s-security-policies

github.com/pedronauckセキュリティ646196 回インストール1 週間前に更新
リポジトリ

k8s-security-policies について

Kubernetes のネットワーク分離、Pod セキュリティ、最小権限アクセスを設定するためのセキュリティスキルです。ポリシー例を示し、アドミッション制御、サービスメッシュのセキュリティ、コンプライアンスにも触れています。

主な機能

  1. 01NetworkPolicy の設定
  2. 02Pod Security Standards の指針
  3. 03RBAC の設定パターン
  4. 04OPA Gatekeeper のポリシー例
  5. 05Istio mTLS と認可ポリシー
  6. 06セキュリティのトラブルシューティング

活用シーン

  1. 01Kubernetes ワークロード間の通信を分離
  2. 02サービスアカウントに最小権限を設定
  3. 03マルチテナントクラスターにセキュリティポリシーを適用
  4. 04NetworkPolicy や RBAC の問題を調査

インストール

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

$npx skills add https://github.com/pedronauck/skills --skill k8s-security-policies

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

同梱ファイルassets/network-policy-template.yamlreferences/rbac-patterns.md

詳細

Kubernetes セキュリティポリシー

Kubernetes で NetworkPolicy、PodSecurityPolicy、RBAC、Pod Security Standards を実装するための包括的なガイドです。

目的

ネットワークポリシー、ポッドセキュリティ標準、RBAC を使用して、Kubernetes クラスターに多層防御のセキュリティを実装します。

このスキルを使用する場面

  • ネットワークセグメンテーションを実装する
  • ポッドセキュリティ標準を設定する
  • 最小権限のアクセスを実現する RBAC を構成する
  • コンプライアンス対応のセキュリティポリシーを作成する
  • アドミッションコントロールを実装する
  • マルチテナントクラスターを保護する

Pod Security Standards

1. Privileged(制限なし)
apiVersion: v1
kind: Namespace
metadata:
  name: privileged-ns
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/audit: privileged
    pod-security.kubernetes.io/warn: privileged
2. Baseline(最小限の制限)
apiVersion: v1
kind: Namespace
metadata:
  name: baseline-ns
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/audit: baseline
    pod-security.kubernetes.io/warn: baseline
3. Restricted(最も厳しい制限)
apiVersion: v1
kind: Namespace
metadata:
  name: restricted-ns
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted

ネットワークポリシー

すべてをデフォルトで拒否
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: production
spec:
  podSelector: {}
  policyTypes:
    - Ingress
    - Egress
フロントエンドからバックエンドへの通信を許可
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: frontend
      ports:
        - protocol: TCP
          port: 8080
DNS を許可
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-dns
  namespace: production
spec:
  podSelector: {}
  policyTypes:
    - Egress
  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              name: kube-system
      ports:
        - protocol: UDP
          port: 53

参考: assets/network-policy-template.yaml を参照してください。

RBAC の構成

Role(Namespace スコープ)
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
  namespace: production
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "watch", "list"]
ClusterRole(クラスター全体)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get", "watch", "list"]
RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: production
subjects:
  - kind: User
    name: jane
    apiGroup: rbac.authorization.k8s.io
  - kind: ServiceAccount
    name: default
    namespace: production
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

参考: references/rbac-patterns.md を参照してください。

ポッドのセキュリティコンテキスト

Restricted ポッド
apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    fsGroup: 1000
    seccompProfile:
      type: RuntimeDefault
  containers:
    - name: app
      image: myapp:1.0
      securityContext:
        allowPrivilegeEscalation: false
        readOnlyRootFilesystem: true
        capabilities:
          drop:
            - ALL

OPA Gatekeeper によるポリシー適用

ConstraintTemplate
apiVersion: templates.gatekeeper.sh/v1
kind: ConstraintTemplate
metadata:
  name: k8srequiredlabels
spec:
  crd:
    spec:
      names:
        kind: K8sRequiredLabels
      validation:
        openAPIV3Schema:
          type: object
          properties:
            labels:
              type: array
              items:
                type: string
  targets:
    - target: admission.k8s.gatekeeper.sh
      rego: |
        package k8srequiredlabels
        violation[{"msg": msg, "details": {"missing_labels": missing}}] {
          provided := {label | input.review.object.metadata.labels[label]}
          required := {label | label := input.parameters.labels[_]}
          missing := required - provided
          count(missing) > 0
          msg := sprintf("missing required labels: %v", [missing])
        }
Constraint
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
  name: require-app-label
spec:
  match:
    kinds:
      - apiGroups: ["apps"]
        kinds: ["Deployment"]
  parameters:
    labels: ["app", "environment"]

サービスメッシュのセキュリティ(Istio)

PeerAuthentication(mTLS)
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
  namespace: production
spec:
  mtls:
    mode: STRICT
AuthorizationPolicy
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-frontend
  namespace: production
spec:
  selector:
    matchLabels:
      app: backend
  action: ALLOW
  rules:
    - from:
        - source:
            principals: ["cluster.local/ns/production/sa/frontend"]

ベストプラクティス

  1. Namespace レベルで Pod Security Standards を実装する
  2. ネットワークセグメンテーションに ネットワークポリシーを使用する
  3. すべてのサービスアカウントに 最小権限の RBAC を適用する
  4. アドミッションコントロールを有効にする(OPA Gatekeeper/Kyverno)
  5. コンテナーを root 以外のユーザーで実行する
  6. ルートファイルシステムを読み取り専用にする
  7. 必要な場合を除き、すべてのケイパビリティを削除する
  8. リソースクォータとリミットレンジを実装する
  9. セキュリティイベントの 監査ログを有効にする
  10. イメージを 定期的にセキュリティスキャンする

コンプライアンスフレームワーク

CIS Kubernetes Benchmark
  • RBAC 認証を使用する
  • 監査ログを有効にする
  • Pod Security Standards を使用する
  • ネットワークポリシーを構成する
  • 保存データのシークレット暗号化を実装する
  • ノード認証を有効にする
NIST Cybersecurity Framework
  • 多層防御を実装する
  • ネットワークセグメンテーションを使用する
  • セキュリティ監視を構成する
  • アクセス制御を実装する
  • ログ記録と監視を有効にする

トラブルシューティング

NetworkPolicy が機能しない場合:

# Check if CNI supports NetworkPolicy
kubectl get nodes -o wide
kubectl describe networkpolicy <name>

RBAC の権限が拒否される場合:

# Check effective permissions
kubectl auth can-i list pods --as system:serviceaccount:default:my-sa
kubectl auth can-i '*' '*' --as system:serviceaccount:default:my-sa

参考ファイル

  • assets/network-policy-template.yaml - ネットワークポリシーの例
  • assets/pod-security-template.yaml - ポッドセキュリティポリシー
  • references/rbac-patterns.md - RBAC 構成パターン

関連スキル

  • k8s-manifest-generator - セキュアなマニフェストの作成
  • gitops-workflow - ポリシーの自動デプロイ

コメント