关于 KubeArmor 的闲言碎语

早上看到了一篇关于 KubeArmor 的简介,觉得还挺新鲜的,就坐下看了一下介绍,并没有进行实际的测试,把它和我之前比较熟悉的一些类似技术做一点比较。

overview

上图是官方提供的架构说明,它依赖于 AppArmor、SeLinux(下个版本)以及 KRSI(未来)这样的 LSM,对容器中的进程进行监控和限制,借助 eBPF 技术将进程信息和 Kubernetes 关联起来,从而获取到进程的 K8s 相关信息,能够根据策略阻止或者上报违规行为,并把过程发送到日志、标准输出以及 gRPC 目标之中,未来还会支持数据库、Kafka、ES 等。目前关注的行为包括以下几个方面

  • 进程执行
  • 文件访问
  • 网络操作
  • Capabilities

它的定义和 PSP 以及 SecurityContext 都不同,采用了类似 Kyverno 类似的方式,定义规则,然后用 Label Selector 将策略关联到 Pod 上,例如源码中提供的例子:

apiVersion: security.accuknox.com/v1
kind: KubeArmorPolicy
metadata:
  name: ksp-ubuntu-1-proc-dir-block
  namespace: multiubuntu
spec:
  selector:
    matchLabels:
      container: ubuntu-1
  process:
    matchDirectories:
    - dir: /sbin/
  action:
    Block

规则针对标签 container=ubuntu-1 的 Pod 中的容器,禁止执行 /sbin/ 下的命令。

个人觉得功能方面最相似的工具就是 Falco 了,它的配置无疑比相对“传统”的 Falco 方便了许多,并且还有 BLOCK 能力;但是其输入条件的丰富程度是远不如 Falco 的,例如对 ServiceAccount、Verb、Subresource 等 K8s 特定元数据的输入支持,条件语法也不如 Falco 灵活。

以下结论纯属胡说

OPA/Kyverno 有这种功能就有意思了。

项目地址:https://github.com/accuknox/KubeArmor

Avatar
崔秀龙

简单,是大师的责任;我们凡夫俗子,能做到清楚就很不容易了。

comments powered by Disqus
下一页
上一页