本文已过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

安全配置文件运算符 v0.4.0 中的新增功能

安全配置文件操作器 (SPO) 是一个树外的 Kubernetes 增强功能,旨在使 seccompSELinuxAppArmor 配置文件的管理更加容易和方便。我们很高兴地宣布,我们最近发布了操作器的 v0.4.0 版本,其中包含大量新功能、修复和可用性改进。

新功能

自操作器的上一个v0.3.0版本发布以来已经有一段时间了。在过去的半年里,我们通过 290 次提交添加了新功能、微调了现有功能并重做了文档。

其中一个亮点是我们现在可以使用操作器的 日志丰富器来记录 seccomp 和 SELinux 配置文件。这使我们可以减少配置文件记录所需的依赖项,只需在节点上运行 auditdsyslog(作为后备)。操作器中的所有配置文件记录都以相同的方式工作,使用 ProfileRecording CRD 以及它们对应的 标签选择器。日志丰富器本身也可用于收集有关节点 seccomp 和 SELinux 消息的有意义的见解。请查看官方文档以了解更多信息。

除了基于日志丰富器的记录之外,我们现在还提供另一种使用 ebpf 记录 seccomp 配置文件的替代方法。可以通过将 enableBpfRecorder 设置为 true 来启用此可选功能。这会导致运行一个专用的容器,该容器在每个节点上运送一个自定义 bpf 模块来收集容器的系统调用。它甚至支持默认情况下不公开 BPF 类型格式 (BTF) 以及 amd64arm64 架构的较旧的内核版本。请查看我们的文档,看看它的实际效果。顺便说一下,我们现在还将记录器主机的 seccomp 配置文件架构添加到记录的配置文件中。

我们还将 seccomp 配置文件 API 从 v1alpha1 升级到 v1beta1。这符合我们随着时间推移稳定 CRD API 的总体目标。唯一改变的是 seccomp 配置文件类型 Architectures 现在指向 []Arch 而不是 []*Arch

SELinux 增强

SELinux 策略的管理(相当于使用通常在单个服务器上调用的 semodule)不是由 SPO 本身完成的,而是由另一个称为 selinuxd 的容器完成的,以提供更好的隔离。此版本切换为使用来自个人存储库的 selinuxd 容器到位于 我们团队的 quay.io 存储库下的镜像。selinuxd 存储库也已移至 容器 GitHub 组织

请注意,selinuxd 动态链接到 libsemanage 并从节点挂载 SELinux 目录,这意味着 selinuxd 容器必须运行与集群节点相同的发行版。SPO 默认使用基于 CentOS-8 的容器,但我们也构建基于 Fedora 的容器。如果您正在使用其他发行版,并希望我们添加对它的支持,请针对 selinuxd 提交问题

配置文件记录

此版本增加了对记录 SELinux 配置文件的支持。记录本身通过 ProfileRecording 自定义资源的实例进行管理,如我们存储库中的示例所示。从用户的角度来看,它的工作方式与记录 seccomp 配置文件的方式非常相似。

在幕后,为了了解工作负载正在执行的操作,SPO 在启动时安装一个名为 selinuxrecording 的特殊许可策略,该策略允许所有操作并将所有 AVC 记录到 audit.log。这些 AVC 消息由日志丰富器组件抓取,当记录的工作负载退出时,将创建该策略。

SELinuxProfile CRD 升级

引入了 SelinuxProfile 对象的 v1alpha2 版本。这从对象本身中删除了原始公共中间语言 (CIL),而是添加了一种简单的策略语言,以简化编写和解析体验。

同时,还引入了 RawSelinuxProfile 对象。它包含策略的包装和原始表示形式。这是为了让人们能够尽快使用他们现有的策略。但是,此处不进行验证。

AppArmor 支持

此版本引入了对 AppArmor 的初始支持,允许用户通过使用新的 AppArmorProfile CRD 将 AppArmor 配置文件加载和卸载到集群节点中。

要启用 AppArmor 支持,请使用您的 SPO 配置的 enableAppArmor 功能门 开关。然后使用我们的apparmor 示例在您的集群中部署您的第一个配置文件。

指标

操作器现在公开指标,这些指标在我们的新指标文档中进行了详细描述。我们决定通过使用 kube-rbac-proxy 来保护指标检索过程,同时我们提供一个额外的 spo-metrics-client 集群角色(和绑定)来从集群中检索指标。如果您使用 OpenShift,那么我们提供了一个开箱即用的工作ServiceMonitor来访问指标。

可调试性和稳健性

除了所有这些新功能之外,我们还决定在内部重构安全配置文件操作器的各个部分,使其更易于调试且更健壮。例如,我们现在维护一个内部 gRPC API,以在操作器内跨不同功能进行通信。我们还提高了日志丰富器的性能,它现在缓存结果以便更快地检索日志数据。可以通过将 verbosity0 设置为 1,将操作器置于更详细的日志模式

我们还在启动时打印使用的 libseccomplibbpf 版本,并通过 enableProfiling 选项为每个容器公开 CPU 和内存分析端点。操作器守护进程内部的专用活动和启动探测器现在还将额外改善操作器的生命周期。

结论

感谢您阅读此更新。我们期待操作器的未来增强功能,并希望收到您对最新版本的反馈。如有任何反馈或问题,请随时通过 Kubernetes slack #security-profiles-operator 与我们联系。