mcpField
K
k8s-security-policies

k8s-security-policies

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

k8s-security-policies について

クラスターポリシーやアクセス制御を設定するチーム向けの Kubernetes セキュリティガイドです。ネットワーク分離、Pod Security Standards、RBAC、アドミッション制御、サービスメッシュのポリシーを扱います。

主な機能

  1. 01Pod Security Standards の設定
  2. 02NetworkPolicy の例
  3. 03RBAC のロールとバインディング
  4. 04OPA Gatekeeper によるポリシー適用
  5. 05Istio の認証と認可
  6. 06セキュリティ調査用コマンド

活用シーン

  1. 01ワークロード間の通信分離
  2. 02最小権限のクラスタアクセス適用
  3. 03アドミッション時のセキュリティ規則適用
  4. 04マルチテナントクラスターの保護

インストール

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

$npx skills add https://github.com/hermeticormus/libreuiux-claude-code --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(ネームスペーススコープ)
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 を参照してください。

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

制限付きポッド
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. ネームスペースレベルで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 - ポリシーの自動デプロイに使用

コメント