kubernetesr安全篇之Pod 安全性标准

2023-12-20 06:52

本文主要是介绍kubernetesr安全篇之Pod 安全性标准,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Pod 安全性标准定义了三种不同的策略(Policy),以广泛覆盖安全应用场景。 这些策略是叠加式的(Cumulative),安全级别从高度宽松至高度受限。

Profile描述
Privileged不受限制的策略,提供最大可能范围的权限许可。此策略允许已知的特权提升。
Baseline限制性最弱的策略,禁止已知的策略提升。允许使用默认的(规定最少)Pod 配置。
Restricted限制性非常强的策略,遵循当前的保护 Pod 的最佳实践。

Profile 细节

Privileged

*Privileged* 策略是有目的地开放且完全无限制的策略。 此类策略通常针对由特权较高、受信任的用户所管理的系统级或基础设施级负载。

Privileged 策略定义中限制较少。对于默认允许(Allow-by-default)实施机制(例如 gatekeeper), Privileged 框架可能意味着不应用任何约束而不是实施某策略实例。 与此不同,对于默认拒绝(Deny-by-default)实施机制(如 Pod 安全策略)而言, Privileged 策略应该默认允许所有控制(即,禁止所有限制)。

Baseline

Baseline 策略的目标是便于常见的容器化应用采用,同时禁止已知的特权提升。 此策略针对的是应用运维人员和非关键性应用的开发人员。 下面列举的控制应该被实施(禁止):

在下述表格中,通配符(*)意味着一个列表中的所有元素。

例如 spec.containers[*].securityContext 表示 所定义的所有容器 的安全性上下文对象。 如果所列出的任一容器不能满足要求,整个 Pod 将无法通过校验。

控制(Control)策略(Policy)
HostProcessWindows Pod 提供了运行 HostProcess 容器 的能力, 这使得对 Windows 节点的特权访问成为可能。 基线策略中对宿主的特权访问是被禁止的。 HostProcess Pod 是 Kubernetes v1.22 版本的 alpha 特性。限制的字段spec.securityContext.windowsOptions.hostProcess``spec.containers[*].securityContext.windowsOptions.hostProcess``spec.initContainers[*].securityContext.windowsOptions.hostProcess``spec.ephemeralContainers[*].securityContext.windowsOptions.hostProcess允许的值未定义/nilfalse
宿主名字空间必须禁止共享宿主名字空间。限制的字段spec.hostNetwork``spec.hostPID``spec.hostIPC允许的值未定义/nilfalse
特权容器特权 Pod 关闭了大多数安全性机制,必须被禁止。限制的字段spec.containers[*].securityContext.privileged``spec.initContainers[*].securityContext.privileged``spec.ephemeralContainers[*].securityContext.privileged允许的值未定义/nilfalse
权能必须禁止添加除下列字段之外的权能。限制的字段spec.containers[*].securityContext.capabilities.add``spec.initContainers[*].securityContext.capabilities.add``spec.ephemeralContainers[*].securityContext.capabilities.add允许的值Undefined/nilAUDIT_WRITE``CHOWN``DAC_OVERRIDE``FOWNER``FSETID``KILL``MKNOD``NET_BIND_SERVICE``SETFCAP``SETGID``SETPCAP``SETUID``SYS_CHROOT
HostPath 卷必须禁止 HostPath 卷。限制的字段spec.volumes[*].hostPath允许的值未定义/nil
宿主端口应禁止使用宿主端口,或者至少限定为已知列表。限制的字段spec.containers[*].ports[*].hostPort``spec.initContainers[*].ports[*].hostPort``spec.ephemeralContainers[*].ports[*].hostPort允许的值未定义/nil已知列表0
AppArmor在受支持的主机上,默认使用 runtime/default AppArmor Profile。 基线策略应避免覆盖或者禁用默认策略,以及限制覆盖一些 Profile 集合的权限。限制的字段metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"]允许的值未定义/nilruntime/default``localhost/*
SELinux设置 SELinux 类型的操作是被限制的,设置自定义的 SELinux 用户或角色选项是被禁止的。限制的字段spec.securityContext.seLinuxOptions.type``spec.containers[*].securityContext.seLinuxOptions.type``spec.initContainers[*].securityContext.seLinuxOptions.type``spec.ephemeralContainers[*].securityContext.seLinuxOptions.type允许的值未定义/““container_t``container_init_t``container_kvm_t限制的字段spec.securityContext.seLinuxOptions.user``spec.containers[*].securityContext.seLinuxOptions.user``spec.initContainers[*].securityContext.seLinuxOptions.user``spec.ephemeralContainers[*].securityContext.seLinuxOptions.user``spec.securityContext.seLinuxOptions.role``spec.containers[*].securityContext.seLinuxOptions.role``spec.initContainers[*].securityContext.seLinuxOptions.role``spec.ephemeralContainers[*].securityContext.seLinuxOptions.role允许的值未定义/””
/proc 挂载类型要求使用默认的 /proc 掩码以减小攻击面。限制的字段spec.containers[*].securityContext.procMount``spec.initContainers[*].securityContext.procMount``spec.ephemeralContainers[*].securityContext.procMount允许的值未定义/nilDefault
SeccompSeccomp Profile 禁止被显式设置为 Unconfined限制的字段spec.securityContext.seccompProfile.type``spec.containers[*].securityContext.seccompProfile.type``spec.initContainers[*].securityContext.seccompProfile.type``spec.ephemeralContainers[*].securityContext.seccompProfile.type允许的值未定义/nilRuntimeDefault``Localhost
SysctlsSysctls 可以禁用安全机制或影响宿主上所有容器,因此除了若干“安全”的子集之外,应该被禁止。 如果某 sysctl 是受容器或 Pod 的名字空间限制,且与节点上其他 Pod 或进程相隔离,可认为是安全的。限制的字段spec.securityContext.sysctls[*].name允许的值未定义/nilkernel.shm_rmid_forced``net.ipv4.ip_local_port_range``net.ipv4.ip_unprivileged_port_start``net.ipv4.tcp_syncookies``net.ipv4.ping_group_range

Restricted

Restricted 策略旨在实施当前保护 Pod 的最佳实践,尽管这样作可能会牺牲一些兼容性。 该类策略主要针对运维人员和安全性很重要的应用的开发人员,以及不太被信任的用户。 下面列举的控制需要被实施(禁止):

在下述表格中,通配符(*)意味着一个列表中的所有元素。 例如 spec.containers[*].securityContext 表示 所定义的所有容器 的安全性上下文对象。 如果所列出的任一容器不能满足要求,整个 Pod 将无法通过校验。

控制(Control)策略(Policy)
基线策略的所有要求。
卷类型除了限制 HostPath 卷之外,此类策略还限制可以通过 PersistentVolumes 定义的非核心卷类型。限制的字段spec.volumes[*]允许的值spec.volumes[*] 列表中的每个条目必须将下面字段之一设置为非空值:spec.volumes[*].configMap``spec.volumes[*].csi``spec.volumes[*].downwardAPI``spec.volumes[*].emptyDir``spec.volumes[*].ephemeral``spec.volumes[*].persistentVolumeClaim``spec.volumes[*].projected``spec.volumes[*].secret
特权提升(v1.8+)禁止(通过 SetUID 或 SetGID 文件模式)获得特权提升。 限制的字段spec.containers[*].securityContext.allowPrivilegeEscalation``spec.initContainers[*].securityContext.allowPrivilegeEscalation``spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation允许的值false
以非 root 账号运行必须要求容器以非 root 用户运行。限制的字段spec.securityContext.runAsNonRoot``spec.containers[*].securityContext.runAsNonRoot``spec.initContainers[*].securityContext.runAsNonRoot``spec.ephemeralContainers[*].securityContext.runAsNonRoot允许的值true如果 Pod 级别 spec.securityContext.runAsNonRoot 设置为 true,则允许容器组的安全上下文字段设置为 未定义/nil
非 root 用户(v1.23+)Containers 不可以将 runAsUser 设置为 0限制的字段spec.securityContext.runAsUser``spec.containers[*].securityContext.runAsUser``spec.initContainers[*].securityContext.runAsUser``spec.ephemeralContainers[*].securityContext.runAsUser允许的字段any non-zero value未定义/空值
Seccomp (v1.19+)Seccomp Profile 必须被显式设置成一个允许的值。禁止使用 Unconfined Profile 或者指定 不存在的 Profile。限制的字段spec.securityContext.seccompProfile.type``spec.containers[*].securityContext.seccompProfile.type``spec.initContainers[*].securityContext.seccompProfile.type``spec.ephemeralContainers[*].securityContext.seccompProfile.type允许的值RuntimeDefault``Localhost如果 Pod 级别的 spec.securityContext.seccompProfile.type 已设置得当,容器级别的安全上下文字段可以为 未定义/nil。 反过来说,如果 所有的 容器级别的安全上下文字段已设置,则 Pod 级别的字段可为 未定义/nil
权能(v1.22+)容器组必须弃用 ALL 权能,并且只允许添加 NET_BIND_SERVICE 权能。限制的字段spec.containers[*].securityContext.capabilities.drop``spec.initContainers[*].securityContext.capabilities.drop``spec.ephemeralContainers[*].securityContext.capabilities.drop允许的值包含 ALL 的任何一种权能列表。限制的字段spec.containers[*].securityContext.capabilities.add``spec.initContainers[*].securityContext.capabilities.add``spec.ephemeralContainers[*].securityContext.capabilities.add允许的值未定义/nilNET_BIND_SERVICE

策略实例化

将策略定义从策略实例中解耦出来有助于形成跨集群的策略理解和语言陈述, 以免绑定到特定的下层实施机制。

随着相关机制的成熟,这些机制会按策略分别定义在下面。特定策略的实施方法不在这里定义。

Pod 安全性准入控制器

  • Privileged 名字空间(opens new window)
  • Baseline 名字空间(opens new window)
  • Restricted 名字空间(opens new window)

PodSecurityPolicy (opens new window)(已弃用)

  • Privileged(opens new window)
  • Baseline(opens new window)
  • Restricted(opens new window)

常见问题

为什么不存在介于 Privileged 和 Baseline 之间的策略类型

这里定义的三种策略框架有一个明晰的线性递进关系,从最安全(Restricted)到最不安全,并且覆盖了很大范围的工作负载。特权要求超出 Baseline 策略者通常是特定于应用的需求,所以我们没有在这个范围内提供标准框架。这并不意味着在这样的情形下仍然只能使用 Privileged 框架,只是说处于这个范围的策略需要因地制宜地定义。

SIG Auth 可能会在将来考虑这个范围的框架,前提是有对其他框架的需求。

安全策略与安全上下文的区别是什么?

安全上下文在运行时配置 Pod 和容器。安全上下文是在 Pod 清单中作为 Pod 和容器规约的一部分来定义的,所代表的是传递给容器运行时的参数。

安全策略则是控制面用来对安全上下文以及安全性上下文之外的参数实施某种设置的机制。在 2020 年 7 月,Pod 安全性策略 (opens new window)已被废弃,取而代之的是内置的 Pod 安全性准入控制器。

Kubernetes 生态系统中还在开发一些其他的替代方案,例如:

  • OPA Gatekeeper (opens new window)。
  • Kubewarden (opens new window)。
  • Kyverno (opens new window)。

我应该为我的 Windows Pod 实施哪种框架?

Kubernetes 中的 Windows 负载与标准的基于 Linux 的负载相比有一些局限性和区别。 尤其是 Pod SecurityContext 字段 对 Windows 不起作用 (opens new window)。 因此,目前没有对应的标准 Pod 安全性框架。

如果你为一个 Windows Pod 应用了 Restricted 策略,可能会 对该 Pod 的运行时产生影响。Restricted 策略需要强制执行 Linux 特有的限制(如 seccomp Profile,并且禁止特权提升)。如果 kubelet 和/或其容器运行时忽略了 Linux 特有的值,那么应该不影响 Windows Pod 正常工作。然而,对于使用 Windows 容器的 Pod 来说,缺乏强制执行意味着相比于 Restricted 策略,没有任何额外的限制。

你应该只在 Privileged 策略下使用 HostProcess 标志来创建 HostProcess Pod。在 Baseline 和 Restricted 策略下,创建 Windows HostProcess Pod 是被禁止的,因此任何 HostProcess Pod 都应该被认为是有特权的。

沙箱(Sandboxed) Pod 怎么处理?

现在还没有 API 标准来控制 Pod 是否被视作沙箱化 Pod。 沙箱 Pod 可以通过其是否使用沙箱化运行时(如 gVisor 或 Kata Container)来辨别,不过 目前还没有关于什么是沙箱化运行时的标准定义。

沙箱化负载所需要的保护可能彼此各不相同。例如,当负载与下层内核直接隔离开来时, 限制特权化操作的许可就不那么重要。这使得那些需要更多许可权限的负载仍能被有效隔离。

此外,沙箱化负载的保护高度依赖于沙箱化的实现方法。 因此,现在还没有针对所有沙箱化负载的建议策略。

这篇关于kubernetesr安全篇之Pod 安全性标准的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/515102

相关文章

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地