随笔 - 378  文章 - 0  评论 - 5  阅读 - 6085

PSP的安全机制

Kubernetes中的PodSecurityPolicy(PSP)安全机制详解(及替代方案)


什么是PodSecurityPolicy(PSP)?

PodSecurityPolicy 是 Kubernetes 中曾经用于控制 Pod 安全配置的一种集群级资源。它的核心作用是充当“守门员”——当用户尝试创建 Pod 时,PSP 会检查这个 Pod 是否符合管理员预设的安全规则。如果不符合,Pod 将被直接拒绝创建,从而避免不安全的容器运行在集群中。

但需要注意的是,PSP 已在 Kubernetes v1.21 被标记为弃用(Deprecated),v1.25 版本中彻底移除。不过许多企业仍在使用旧版本集群,理解它的原理对安全配置和迁移工作仍有意义。


PSP 能实现哪些安全策略?

以下是 PSP 最常用的安全控制场景,这些场景在实际开发中能有效避免容器逃逸、提权等安全问题:


1. 禁止容器以 root 用户运行
# PSP配置示例:强制容器以非root运行
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: no-root
spec:
  runAsUser:
    rule: MustRunAsNonRoot  # 必须非root

实际意义:如果容器以 root 用户运行,一旦容器被入侵,攻击者可能直接获得宿主机 root 权限。通过 PSP 可强制所有容器使用普通用户。


2. 限制容器的 Linux Capabilities
# 示例:禁止容器使用危险的能力(如SYS_ADMIN)
spec:
  allowedCapabilities: []  # 禁止添加任何能力
  requiredDropCapabilities: ["NET_RAW", "SYS_ADMIN"]  # 必须丢弃的能力

Capabilities 是什么?Linux 将 root 用户的权限拆分为几十个独立的能力(如修改网络配置、挂载文件系统)。容器默认拥有部分能力,可能被滥用。

典型场景

  • 禁止 SYS_ADMIN 能力:防止容器挂载宿主机目录。
  • 禁止 NET_RAW:防止容器发送伪造的网络包(如ARP欺骗)。

3. 禁止特权容器(privileged)
spec:
  privileged: false  # 不允许特权模式

危险操作:特权容器(privileged: true)会获得宿主机所有能力,并可访问宿主机设备,极易导致容器逃逸。


4. 限制挂载宿主机目录
spec:
  hostPID: false     # 禁止共享宿主机的PID命名空间
  hostIPC: false     # 禁止共享宿主机的IPC命名空间
  hostNetwork: false # 禁止使用宿主机网络
  volumes:
  - 'configMap'      # 只允许挂载ConfigMap类型的卷
  - 'emptyDir'
  forbiddenSysctls:  # 禁止危险的系统参数修改
  - '*'

常见风险

  • 挂载宿主机 / 目录:容器可直接修改宿主机文件。
  • 共享宿主机进程空间(hostPID):容器内可看到宿主机所有进程。

5. 文件系统只读
spec:
  readOnlyRootFilesystem: true  # 强制容器根文件系统只读

防护效果:即使容器被入侵,攻击者也无法在容器内持久化恶意文件(如写入后门脚本)。


为什么PSP被淘汰了?替代方案是什么?

PSP 的设计存在两大问题:

  1. 权限模型复杂:PSP 是集群级别的,配置容易冲突,难以精细控制。
  2. 默认不启用:需要手动配置API Server和RBAC,容易遗漏。

替代方案

  • Pod Security Admission(PSA):Kubernetes 内置的准入控制器,通过标签实现 Namespace 级别的安全策略。
  • Kyverno/OPA Gatekeeper:第三方策略引擎,支持更灵活的策略规则(如校验镜像来源)。

迁移示例:从PSP到Pod Security Admission

假设原PSP要求所有Pod必须非root运行,且禁止特权模式:

旧版PSP配置新版PSA标签

apiVersion: v1
kind: Namespace
metadata:
  name: my-app
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/enforce-version: v1.28
    # 可选模式:enforce(强制)/audit(仅记录)/warn(警告)

PSA 提供三种预定义策略级别:

  • Privileged:无限制(开发环境)。
  • Baseline:禁止已知危险操作(生产推荐)。
  • Restricted:严格限制(适合高安全场景)。

总结:实际生产建议

  1. 旧集群(仍用PSP):确保启用PSP并配置最少权限,例如禁用root、限制能力。
  2. 新集群(≥v1.25)
    • 优先使用 Pod Security Admission 设置基线策略。
    • 复杂需求采用 Kyverno 定义策略(如校验镜像签名)。
  3. 混合环境:逐步将PSP规则翻译为PSA或Kyverno策略,分阶段迁移。

通过合理的安全策略,Kubernetes集群的安全性可以提升一个量级。记住:安全不是一次性的配置,而是持续加固的过程。

posted on   Leo-Yide  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示