自定义CSI驱动sidecar容器最小权限Security Context配置咨询
问题解答
你给出的配置并非必须使用,且存在明显的过度授权问题,可根据不同CSI Sidecar组件的实际权限需求做分层收紧:
你列出的4种Sidecar组件的权限需求差异极大,完全不需要统一配置SYS_ADMIN能力、开启权限提升,优化方案如下:
1. 无特权需求的Sidecar(占3/4)
csi-provisioner、csi-attacher、csi-liveness-probe这三个组件仅需要和kube-apiserver、CSI驱动的gRPC接口通信,不需要操作节点操作系统资源,直接用最小权限配置即可:
securityContext: runAsNonRoot: true runAsUser: 65534 # 可使用nobody这类普通非特权用户 allowPrivilegeEscalation: false privileged: false capabilities: drop: - ALL
这类组件完全不需要持有任何root相关权限,也不需要SYS_ADMIN能力。
2. 仅Node Driver Registrar需特殊配置
该组件的作用是将CSI驱动注册到节点kubelet的插件目录,仅需要对应hostPath目录的写入权限:
- 如果目录权限配置支持非root用户写入,直接用上面的最小权限配置即可
- 如果节点目录默认仅root可写,仅需调整用户为root,不需要额外加能力:
securityContext: runAsNonRoot: false runAsUser: 0 allowPrivilegeEscalation: false privileged: false capabilities: drop: - ALL
3. 进一步限制权限的方案
如果你自研的CSI驱动Node组件本身需要操作块设备、挂载文件系统,也不需要全量开放权限:
- 能力层面仅添加必要项:仅当需要挂载/卸载文件系统时加
CAP_SYS_ADMIN,仅当需要创建设备节点时加CAP_MKNOD,不需要其他能力 - 代码层面做权限降级:驱动启动完成必要的初始化操作(如创建工作目录、注册驱动)后,主动调用系统接口切换为非root用户运行,同时丢弃所有不需要的Linux能力,避免运行态长期持有高权限
- 配置Seccomp规则:给所有CSI相关容器配置自定义Seccomp Profile,拦截所有不需要的系统调用,进一步缩小攻击面
注意你原本给出的配置中
allowPrivilegeEscalation: true属于完全不必要的配置,所有CSI Sidecar和驱动组件都不需要权限提升,默认设为false即可,避免容器被攻击后权限溢出。
内容的提问来源于stack exchange,提问作者Anto74
相关产品推荐
相关产品推荐

