--- title: Pod 安全性标准 content_type: concept weight: 10 --- Pod 安全性标准定义了三种不同的 _策略(Policy)_,以广泛覆盖安全应用场景。 这些策略是 _渐进式的(Cumulative)_,安全级别从高度宽松至高度受限。 本指南概述了每个策略的要求。 | Profile | 描述 | | ------ | ----------- | | Privileged | 不受限制的策略,提供最大可能范围的权限许可。此策略允许已知的特权提升。 | | Baseline | 限制性最弱的策略,禁止已知的策略提升。允许使用默认的(规定最少)Pod 配置。 | | Restricted | 限制性非常强的策略,遵循当前的保护 Pod 的最佳实践。 | ## Profile 细节 {#profile-details} ### Privileged **_Privileged_ 策略是有目的地开放且完全无限制的策略。** 此类策略通常针对由特权较高、受信任的用户所管理的系统级或基础设施级负载。 Privileged 策略定义中限制较少。对于默认允许(Allow-by-default)实施机制(例如 gatekeeper), Privileged 框架可能意味着不应用任何约束而不是实施某策略实例。 与此不同,对于默认拒绝(Deny-by-default)实施机制(如 Pod 安全策略)而言, Privileged 策略应该默认允许所有控制(即,禁止所有限制)。 ### Baseline **_Baseline_ 策略的目标是便于常见的容器化应用采用,同时禁止已知的特权提升。** 此策略针对的是应用运维人员和非关键性应用的开发人员。 下面列举的控制应该被实施(禁止): {{< note >}} 在下述表格中,通配符(`*`)意味着一个列表中的所有元素。 例如 `spec.containers[*].securityContext` 表示 _所定义的所有容器_ 的安全性上下文对象。 如果所列出的任一容器不能满足要求,整个 Pod 将无法通过校验。 {{< /note >}}
控制(Control) | 策略(Policy) |
HostProcess |
Windows Pod 提供了运行 HostProcess 容器 的能力, 这使得对 Windows 节点的特权访问成为可能。 基线策略中对宿主的特权访问是被禁止的。 HostProcess Pod 是 Kubernetes v1.22 版本的 alpha 特性。 限制的字段
允许的值
|
宿主名字空间 |
必须禁止共享宿主名字空间。 限制的字段
允许的值
|
特权容器 |
特权 Pod 关闭了大多数安全性机制,必须被禁止。 限制的字段
允许的值
|
权能 |
必须禁止添加除下列字段之外的权能。 限制的字段
允许的值
|
HostPath 卷 |
必须禁止 HostPath 卷。 限制的字段
允许的值
|
宿主端口 |
应禁止使用宿主端口,或者至少限定为已知列表。 限制的字段
允许的值
|
AppArmor |
在受支持的主机上,默认使用 限制的字段
允许的值
|
SELinux |
设置 SELinux 类型的操作是被限制的,设置自定义的 SELinux 用户或角色选项是被禁止的。 限制的字段
允许的值
限制的字段
允许的值
|
/proc 挂载类型 |
要求使用默认的 限制的字段
允许的值
|
Seccomp |
Seccomp Profile 禁止被显式设置为 限制的字段
允许的值
|
Sysctls |
Sysctls 可以禁用安全机制或影响宿主上所有容器,因此除了若干“安全”的子集之外,应该被禁止。 如果某 sysctl 是受容器或 Pod 的名字空间限制,且与节点上其他 Pod 或进程相隔离,可认为是安全的。 限制的字段
允许的值
|
控制(Control) | 策略(Policy) |
基线策略的所有要求。 | |
卷类型 |
除了限制 HostPath 卷之外,此类策略还限制可以通过 PersistentVolumes 定义的非核心卷类型。 限制的字段
允许的值 spec.volumes[*] 列表中的每个条目必须将下面字段之一设置为非空值:
|
特权提升(v1.8+) |
禁止(通过 SetUID 或 SetGID 文件模式)获得特权提升。 限制的字段
允许的值
|
以非 root 账号运行 |
必须要求容器以非 root 用户运行。 限制的字段
允许的值
spec.securityContext.runAsNonRoot 设置为
true ,则允许容器组的安全上下文字段设置为 未定义/nil 。
|
非 root 用户(v1.23+) |
Containers 不可以将 runAsUser 设置为 0 限制的字段
允许的字段
|
Seccomp (v1.19+) |
Seccomp Profile 必须被显式设置成一个允许的值。禁止使用 限制的字段
允许的值
spec.securityContext.seccompProfile.type
已设置得当,容器级别的安全上下文字段可以为 未定义/nil 。
反过来说,如果 _所有的_ 容器级别的安全上下文字段已设置,则 Pod 级别的字段可为 未定义/nil 。
|
权能(v1.22+) |
容器组必须弃用 限制的字段
允许的值
限制的字段
允许的值
|