mcpField
K
k8s-security-policies

k8s-security-policies

github.com/sickn33安全48.7k205 次安装1 天前更新
代码仓库

关于 k8s-security-policies

面向 Kubernetes 运维与安全工作的指导技能,涵盖 NetworkPolicy、RBAC、Pod Security Standards 和准入控制等防御措施。适用于集群分段、权限收敛和多租户安全配置。

主要功能

  1. 01配置网络策略与流量分段
  2. 02设计最小权限 RBAC
  3. 03应用 Pod Security Standards
  4. 04参考 Gatekeeper 与 Istio 策略
  5. 05提供策略验证与排障建议

适用场景

  1. 01限制集群工作负载间通信
  2. 02为服务账户配置最小权限
  3. 03加固多租户 Kubernetes 集群

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill k8s-security-policies

安装后在 Claude Code 中输入/k8s-security-policies确认已加载。

附带文件references/rbac-patterns.mdassets/network-policy-template.yaml

详细介绍

支持材料可用性

本目录副本包含下方的内嵌指南,但不包含以下支持路径。这些是外部前置条件,并非随附文件:

  • <support-root>/assets/pod-security-template.yaml

使用依赖这些路径的步骤前,请索取原始支持材料或现有安装;本目录未提供经核实的下载来源。请相对于该安装解析每个路径,检查其内容,并核实适用的许可证和执行前置条件。所需文件不存在时,不要运行命令,也不要声称已遵循所引用的流程。不要伪造缺失的脚本,也不要将同名但无关的文件视为等效文件。此处已完整记录的独立步骤可在用户授权范围内执行;请将任何依赖步骤报告为不可用。

Kubernetes 安全策略

Kubernetes 中 NetworkPolicy、RBAC 和 Pod Security Admission/Standards 的指南(PodSecurityPolicy 已在 Kubernetes 1.25 中移除)。

以下情况请勿使用此技能

  • 任务与 kubernetes 安全策略无关
  • 你需要此范围之外的其他领域或工具

说明

  • 明确目标、约束和所需输入。
  • 应用相关最佳实践并验证结果。
  • 提供可执行的步骤和验证方法。

用途

使用网络策略、Pod 安全标准和 RBAC,为 Kubernetes 集群实施纵深防御。

以下情况请使用此技能

  • 实施网络分段
  • 配置 Pod 安全标准
  • 设置 RBAC,以实现最小权限访问
  • 创建用于合规的安全策略
  • 实施准入控制
  • 保护多租户集群

Pod 安全标准

1. 特权(不受限制)
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. 基线(限制最少)
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. 受限(限制最多)
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

网络策略

NetworkPolicy 需要由 CNI 执行;仅列出节点或策略无法证明其已生效。策略具有累加性;连接源的出站流量和目标的入站流量都必须获准。使用默认拒绝全部策略时,后端入站示例还需要匹配的前端出站许可。DNS 可能使用 NodeLocal DNS,而非 kube-system Pod 目标;请检查实际解析器和选择器。标准策略作用于 L3/L4,不会强制执行 FQDN/HTTP 策略,也无法在所有情况下隔离元数据;NAT/主机网络/IPv6 的行为取决于 CNI。启用策略前,请先分阶段部署或进行试运行,并测试获准的正向/反向流量,以避免服务中断。Pod Security 特权模式不施加限制;请先使用审计/警告模式,并在强制执行前固定预期的策略版本。

默认拒绝全部
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:
          kubernetes.io/metadata.name: kube-system
    ports:
    - protocol: UDP
      port: 53
    - protocol: TCP
      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
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

**参考:**请参阅 references/rbac-patterns.md

Pod 安全上下文

受限 Pod
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 安全标准
  2. 使用 NetworkPolicy 进行网络分段
  3. 为所有服务账户应用最小权限 RBAC
  4. 启用准入控制(OPA Gatekeeper/Kyverno)
  5. 以非 root 用户身份运行容器
  6. 使用只读根文件系统
  7. 除非有需要,否则删除所有 capability
  8. 实施资源配额和限制范围
  9. 为安全事件启用审计日志
  10. 定期扫描镜像的安全性

合规框架

CIS Kubernetes 基准
  • 使用 RBAC 授权
  • 启用审计日志记录
  • 使用 Pod 安全标准
  • 配置网络策略
  • 实现静态数据加密
  • 启用节点身份验证
NIST 网络安全框架
  • 实施纵深防御
  • 使用网络分段
  • 配置安全监控
  • 实施访问控制
  • 启用日志记录和监控

故障排查

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 - Pod 安全策略
  • references/rbac-patterns.md - RBAC 配置模式

相关技能

  • k8s-manifest-generator - 用于创建安全清单
  • gitops-workflow - 用于自动部署策略

限制

  • 仅当任务与上述范围明确匹配时,才使用此技能。
  • 不要将输出视为环境特定验证、测试或专家审查的替代方案。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。

评论

支持 Markdown