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 的设计存在两大问题:
- 权限模型复杂:PSP 是集群级别的,配置容易冲突,难以精细控制。
- 默认不启用:需要手动配置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:严格限制(适合高安全场景)。
总结:实际生产建议
- 旧集群(仍用PSP):确保启用PSP并配置最少权限,例如禁用root、限制能力。
- 新集群(≥v1.25):
- 优先使用 Pod Security Admission 设置基线策略。
- 复杂需求采用 Kyverno 定义策略(如校验镜像签名)。
- 混合环境:逐步将PSP规则翻译为PSA或Kyverno策略,分阶段迁移。
通过合理的安全策略,Kubernetes集群的安全性可以提升一个量级。记住:安全不是一次性的配置,而是持续加固的过程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)