安全上下文需要运行时证据来验证
Kubernetes 的 securityContext 配置进程身份及部分操作系统约束,可以缩小被攻陷应用允许执行的操作,但本身不会建立完整安全边界。应先确定应用实际需要什么操作,再配置对应字段,并在最终容器中同时测试允许与拒绝的行为。只有一份看起来严格的清单,还不能说明运行中的进程已经按预期受到限制,也不能代替应用本身的权限设计。 把设置放在正确层级 Pod 级配置可以提供用户和组身份、共享卷的组权限行为,以及 seccomp 配置。容器级字段可以覆盖适用的默认值,并设置 capabilities、权限提升和只读根文件系统。需要核对字段真实 API 范围,把熟悉的名称写在错误位置,并不会获得等价约束。相同的 securityContext 名称之下,不代表所有字段都能互换放置。 runAsUser 选择数值用户身份,runAsNonRoot 则要求容器符合非 root 策略。这些设置补充镜像元数据,不能仅凭一个用户名看起来普通,就信任实际权限。卷权限也必须允许所选身份完成必要工作。下面的 emptyDir 通过 fsGroup 提供组访问,使应用能够写入指定工作目录,而不必因此获得对整个根文件系统的写权限。 Linux capabilities 把传统上广泛关联于 root 的权限拆成不同能力。删除 ALL 会移除容器配置中的这些能力。普通容器默认并不继承全部 Linux 能力,而容器内以 root 运行,也不等于已经成功逃逸到宿主机。应审阅真实有效权限,避免用这两种过度简化替代证据。减少权限很有价值,但其效果需要准确描述。 坏掉的样子 allowPrivilegeEscalation false 会为进程设置 no_new_privs,限制通过执行程序获取新权限,例如 set-user-ID 或文件能力引起的身份与权限提升。它不会撤销进程已经拥有的全部权限,也不代替业务授权。应检查实际进程标志和有效能力,不能把每一次被拒绝的操作都归因于这个字段,否则可能误解其他身份或文件权限设置的作用。 readOnlyRootFilesystem 让容器根文件系统只读,其他挂载仍可能可写,包括明确提供的工作卷。这并不是全面禁止执行代码:解释器仍可以读取并运行可写卷中的程序。它也不会阻止网络请求,或撤销对已经挂载数据的读取。只读存储约束的是一类操作,不能直接证明攻击无法继续,更不能把“不能改根目录”扩写成“不能写入任何内容”。 ...