有没有办法限制不受信任的容器调度程序?

时间:2016-05-01 10:26:22

标签: security docker containers

我有一个应用程序,我希望有权启动短期任务并将这些任务安排为docker容器。我只是想通过docker run来做这件事。

由于我想使攻击面尽可能小,我将应用程序视为不可信任。因此,它可以针对预定义的docker API端点运行任意docker run命令(如果代码库包含bug或容器被泄露,输入在某处等地被不正确地转义)。

这就是为什么我想在某些方面限制该应用程序(实际上是一个调度程序):

  • 阻止--privileged使用
  • 强制执行--read-only旗帜
  • 强制记忆& CPU限制

我看了几个选项:

  • selinux的
    • 需要在主机级别设置selinux策略,然后通过--selinux-enabled级别的daemon标记在容器内传播。但是,调度程序无论如何都可以通过run --privileged重写此内容。
  • seccomp个人资料
    • 这些仅在启动容器时应用(seccomp标志可用于docker run
  • 的AppArmor
    • 这可以(再次)通过--privileged
    • 在调度程序级别上覆盖
  • docker daemon --exec-opts标志
    • 此标志(native.cgroupdriver
    • 实际上只有一个选项可用

似乎Docker默认设计为信任容器调度程序。 有谁知道这是否是一个设计决定?

我错过了当前最新的Docker版本还有其他可能的解决方案吗?

我还看了Kubernetes及其Limit Ranges& Resource Quotas可以应用于K8S名称空间,看起来很有趣,假设有一种方法可以强制某些调度程序只使用某些名称空间。但是,这会增加运行K8S群集的问题范围。

1 个答案:

答案 0 :(得分:1)

在unix平台上运行docker应与nice兼容或者我认为首先要仔细看一下,看起来你需要一些像-cpuset-cpus="0,1"

这样的东西

从第二个链接,“--cpu-quota看起来类似于--cpuset-cpus ...为进程分配一个或几个核心,它只是时间管理而不是处理器编号管理。“