【问题标题】:Using runAsNonRoot in Kubernetes在 Kubernetes 中使用 runAsNonRoot
【发布时间】:2019-01-03 18:07:03
【问题描述】:

长期以来,我们一直在计划将securityContext: runAsNonRoot: true 作为我们 pod 配置的要求。

今天测试我了解到,自从v1.8.4(我认为)以来,您还必须为运行容器的用户指定一个特定的 UID,例如runAsUser: 333

这意味着我们不仅要告诉开发人员确保他们的容器不以 root 身份运行,而且还要指定他们应该以特定的 UID 运行,这使得我们引入这一点变得更加困难。

我是否理解正确?其他人在这个领域做什么?要利用 runAsNonRoot,现在是否需要 Docker 容器使用特定且已知的 UID 运行?

【问题讨论】:

  • 好的做法是在 Dockerfile 中定义一个USER,并考虑使用kubernetes.io/docs/concepts/policy/pod-security-policy 来强制执行安全上下文。
  • USER 需要有一个数值以避免遇到 CreateContainerConfigError: Error: container has runAsNonRoot and image has non-numeric user (username), cannot verify user is non-root.

标签: security docker kubernetes containers


【解决方案1】:

Kubernetes Pod SecurityContext 提供了两个选项 runAsNonRootrunAsUser 来强制非 root 用户。您可以单独使用这两个选项,因为它们测试不同的配置。

当您设置runAsNonRoot: true 时,您要求容器将与具有除 0 以外的任何 UID 的用户一起运行。无论您的用户具有哪个 UID。
当您设置 runAsUser: 333 时,您要求容器将与 UID 333 的用户一起运行。

【讨论】:

  • “当你设置 runAsNonRoot: true 时,你要求容器将与具有除 0 以外的任何 UID 的用户一起运行。”这是在我的测试中不起作用的部分,发布 v1.8 。X。我收到错误消息,“容器已 runAsNonRoot 并且图像具有非数字用户 ''”
  • 您必须在 Dockerfile 中指定一个数字用户,例如 USER 1001
【解决方案2】:

其他人在这个领域做什么?

我们在不希望使用 root 的情况下使用runAsUser。当然,这些情况并不像您想象的那么频繁,因为在 kubernetes 集群架构中将“进程”部署为分离的 pod 容器的理念与传统的单一主机上的复合单片部署不同,其中违规的安全影响完全不同......

我们的大部分本地开发都是在 minicube 或 docker edge 上使用 k8s 清单完成的,因此设置尽可能接近我们的部署集群(除了明显的限制)。话虽如此,我们在用户 ID 分配方面没有问题,因为持久卷的初始化不是在外部完成的,因此所有文件用户/组的所有权都是在具有适当文件权限的 pod 内完成的。在 docker 用于开发的极少数情况下,开发人员被指示在已安装的卷之间手动设置适当的权限,但这种情况很少发生。

【讨论】:

    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2019-01-11
    • 2020-01-02
    • 2018-06-19
    相关资源
    最近更新 更多