强制访问控制器:概览与选择
强制访问控制器(Enforcer)负责实施安全策略。先根据需要控制的行为选择强制访问控制器,再检查节点和工作负载的运行前提;策略模式和规则共同决定允许哪些行为。
| 目标 | 建议入口 | 主要前提 |
|---|---|---|
| 限制文件访问和程序执行 | AppArmor 或 BPF | 节点启用对应的 Linux LSM |
| 限制系统调用 | Seccomp | 更新过滤规则需要创建新容器 |
| 在内核层限制 socket 操作 | AppArmor 或 BPF | 按各强制访问控制器支持的网络规则类型配置 |
| 在内核层限制目标 IP/端口 | BPF | 支持目标 IP/端口匹配,以及 toServices、toPods 等 Kubernetes 目标语义 |
| 限制 HTTP 请求、TLS 目标,或通过 MITM 检查 HTTPS | NetworkProxy | 容器注入、流量重定向,以及 MITM 所需的应用信任配置 |
选择模式和作用域
通过策略模式选择兼容的模式。EnhanceProtect 增加指定的限制;支持 DefenseInDepth 的强制访问控制器可以使用允许列表。BehaviorModeling 为实验功能,需要显式启用,且不支持 NetworkProxy。BPF 不支持 DefenseInDepth。
VarmorPolicy 选择同命名空间的工作负载;VarmorClusterPolicy 具有集群作用域,优先于匹配的命名空间策略。首次使用应限制在专属命名空间和明确的目标上,参见编写策略。
组合强制访问控制器
AppArmorSeccomp、AppArmorNetworkProxy 等受支持的组合可以在同一策略中覆盖不同操作。每个强制访问控制器仍有各自的依赖、更新方式和审计语义。组合不会使原本不支持的模式变为可用,也不会使某层允许覆盖另一层的拒绝。
选择组合前检查强制访问控制器字段。NetworkProxy 在 Pod 范围内实施网络规则;同一 Pod 中的容器共享网络命名空间。