什么是增强型容器隔离?

注意

增强型容器隔离仅适用于 Docker Business 客户。

增强型容器隔离 (ECI) 提供了额外的安全层,以防止在容器中运行的恶意工作负载损害 Docker Desktop 或主机。

它使用各种高级技术来强化容器隔离,但不会影响开发人员的工作效率。

增强的容器隔离可确保更强的容器隔离,并锁定管理员创建的任何安全配置,例如通过注册表访问管理策略设置管理

注意

ECI 是对 Docker 使用的其他容器安全技术的补充。例如,减少了 Linux Capabilities、seccomp 和 AppArmor。

它适用于谁?

  • 适用于希望防止容器攻击并减少开发人员环境中漏洞的组织和开发人员。
  • 适用于希望确保在开发人员的计算机上轻松直观地实施更强大的容器隔离的组织。

启用增强型容器隔离后会发生什么情况?

启用增强型容器隔离后,将启用以下功能和安全技术:

  • 所有用户容器都会在 Linux 用户命名空间中自动运行,从而确保更强的隔离。每个容器都在专用的 Linux 用户命名空间中运行。
  • 容器中的 root 用户映射到 Docker Desktop Linux VM 中的非特权用户。
  • 容器变得更难攻破。例如,敏感的系统调用经过审查,部分 和 在容器内进行模拟。/proc/sys
  • 用户可以像往常一样继续使用容器,包括绑定挂载主机目录、卷等。
  • 开发人员运行容器的方式没有变化,也不需要特殊的容器镜像。
  • 特权容器(例如标志)可以工作,但它们仅在容器的 Linux 用户命名空间中具有特权,而不在 Docker Desktop VM 中具有特权。因此,它们不能用于破坏 Docker 桌面虚拟机。--privileged
  • Docker-in-Docker 甚至 Kubernetes-in-Docker 都可以使用,但在 Docker Desktop Linux VM 内以无特权运行。

此外,还施加了以下限制:

  • 容器不能再与 Docker Desktop VM 共享命名空间(例如,不允许使用 )。--network=host--pid=host
  • 容器无法再修改 Docker Desktop VM 中的配置文件(例如,不允许将任何 VM 目录挂载到容器中)。
  • 容器无法再访问 Docker Engine。例如,限制将 Docker Engine 的套接字挂载到容器中,这可以防止恶意容器获得对 Docker Engine 的控制权。管理员可以为受信任的容器镜像放宽此设置。
  • 禁止所有用户通过控制台访问 Docker Desktop VM。

这些功能和限制可确保容器在运行时得到更好的保护,同时将对开发人员体验和工作效率的影响降至最低。开发人员可以继续照常使用 Docker Desktop,但他们启动的容器更加紧密隔离。

有关增强型容器隔离工作原理的更多信息,请参阅工作原理

重要

增强的容器隔离尚未完全保护 Docker 构建, Kubernetes Pod 和扩展容器。有关已知的更多信息 限制和解决方法,请参阅常见问题解答

如何启用增强型容器隔离?

作为开发人员

要以开发人员身份启用增强型容器隔离,请执行以下操作:

  1. 确保您的组织拥有 Docker Business 订阅。
  2. 在 Docker Desktop 中登录到您的组织。这将确保您在 Docker Desktop 的 Settings 菜单中可以使用 ECI 功能。
  3. 停止并移除所有现有容器。
  4. 导航到 Docker Desktop 中的 Settings > General
  5. Use Enhanced Container Isolation (使用增强型容器隔离) 旁边,选中复选框。
  6. 选择 Apply and restart (应用并重新启动) 以保存您的设置。

重要

增强型容器隔离不保护在启用 ECI 之前创建的容器。有关已知限制和解决方法的更多信息,请参阅常见问题

作为管理员

先决条件

您首先需要强制登录,以确保所有 Docker Desktop 开发人员都向您的组织进行身份验证。由于“设置管理”需要 Docker Business 订阅,因此强制登录可保证只有经过身份验证的用户才能访问,并且该功能在所有用户中始终有效,即使它可能在没有强制登录的情况下仍然有效。

设置

创建并配置 admin-settings.json 文件并指定:

{
  "configurationFileVersion": 2,
  "enhancedContainerIsolation": {
    "value": true,
    "locked": true
  }
}

设置可确保默认情况下启用 ECI。由 设置 ,ECI 不能被 开发 人员。如果您想让开发人员能够禁用该功能, 设置。"value": true"locked": true"locked": false

此外,您还可以配置 Docker 容器的套接字挂载权限

要使其生效:

  • 在新安装时,开发人员需要启动 Docker Desktop 并向其组织进行身份验证。
  • 在现有安装中,开发人员需要通过 Docker 菜单退出 Docker Desktop,然后重新启动 Docker Desktop。如果他们已经登录,则无需再次登录即可使更改生效。

重要

从 Docker 菜单中选择 Restart 是不够的,因为它只会重新启动 Docker Desktop 的某些组件。

当管理员强制执行此设置时,用户会看到什么?

提示

现在,您还可以在 Docker Admin Console 中配置这些设置。

启用增强型容器隔离后,用户会看到:

  • 使用在 Settings > General(常规)中打开的 Enhanced Container Isolation(增强型容器隔离)。
  • 容器在 Linux 用户命名空间中运行。

要进行检查,请运行:

$ docker run --rm alpine cat /proc/self/uid_map

将显示以下输出:

         0     100000      65536

这表示容器的 root 用户 (0) 映射到非特权用户 (100000) 中,并且映射扩展到 64K 个 user-ID。如果容器进程要转义容器,它将 发现自己在 VM 级别没有权限。User-ID 映射因 每个新容器,因为每个容器都会获得一个独占的主机 User-ID 范围 进行隔离。User-ID 映射由 Docker Desktop 自动管理。为 更多详细信息,请参阅增强型容器隔离的工作原理

相比之下,如果没有 ECI,则 Linux 用户命名空间不用于容器,如下所示:

         0          0 4294967295

这意味着容器中的 root 用户 (0) 实际上是 Docker Desktop VM 中的 root 用户 (0),这减少了容器隔离。

由于增强型容器隔离使用嵌入在 Docker Desktop Linux VM 中的 Sysbox 容器运行时,因此确定容器是否使用增强型容器隔离运行的另一种方法是使用:docker inspect

$ docker inspect --format='{{.HostConfig.Runtime}}' my_container

它输出:

sysbox-runc

如果没有增强容器隔离,则输出 ,这是标准的 OCI 运行时。docker inspectrunc

更多资源