View a markdown version of this page

Pod 安全上下文 - Amazon EKS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Pod 安全上下文

Pod 安全策略 (PSP) 和 P od 安全标准 (PSS) 是在 Kubernetes 中强制执行安全的两种主要方式。请注意, PodSecurityPolicy 从 Kubernetes v1.21 开始不推荐使用,并将在 v1.25 中删除,而 Pod 安全标准 (PSS) 是 Kubernetes 推荐的未来加强安全性的方法。

Pod 安全策略 (PSP) 是 Kubernetes 中用于实施安全策略的原生解决方案。PSP 是一种集群级资源,用于控制 Pod 规范中安全敏感的方面。使用 Pod 安全策略,您可以定义一组条件,Pod 必须满足这些条件才能被集群接受。PSP 功能从 Kubernetes 问世初期就已推出,旨在阻止在给定集群上创建配置错误的 pod。

有关 Pod 安全策略的更多信息,请参阅 Kubernetes 文档根据 Kubernetes的弃用政策,旧版本将在该功能被弃用九个月后停止获得支持。

另一方面,Pod 安全标准 (PSS) 是推荐的安全方法,通常使用安全上下文实现,被定义为 Pod 清单中 Pod 和容器规范的一部分。PSS 是 Kubernetes 项目团队为解决 Pod 安全相关的最佳实践而定义的官方标准。它定义了基准(最低限制,默认)、特权(非限制)和限制(最严格)等策略。

我们建议从基准配置文件开始。PSS 基准配置文件在安全性和潜在摩擦之间提供了稳固的平衡,需要最少的例外清单,它是工作负载安全的良好起点。如果您目前正在使用 PSP,我们建议切换到 PSS。有关 PSS 策略的更多详细信息可以在 Kubernetes 文档中找到。这些政策可以通过多种工具来执行,包括来自 OPA Ky verno的工具。例如,Kyverno在此处提供了完整的PSS政策集。https://kyverno.io/policies/

安全上下文设置允许用户授予选择进程的权限,使用程序配置文件限制单个程序的功能,允许权限升级,过滤系统调用等。

在安全上下文方面,Kubernetes 中的 Windows Pod 与标准 Linux-based 工作负载存在一些局限性和差异化因素。

Windows 使用每个容器的 Job 对象和系统命名空间过滤器来包含容器中的所有进程,并提供与主机的逻辑隔离。如果没有命名空间过滤,就无法运行 Windows 容器。这意味着无法在主机的上下文中断言系统权限,因此特权容器在 Windows 上不可用。

以下windowsOptions是唯一记录的 Windows 安全上下文选项,其余是通用的 “安全上下文” 选项

有关 Windows 与 linux 中支持的安全上下文属性的列表,请参阅此处的官方文档

Pod 的特定设置应用于所有容器。如果未指定,则 PodSecurityContext 将使用中的选项。如果同时在 SecurityContext 和中设置 PodSecurityContext,则以中 SecurityContext 指定的值为准。

例如,作AsUserName 为 Windows 选项的 Pod 和容器的运行设置大致等同于 Linux-specific 运行AsUser 设置,在以下清单中,Pod 特定的安全上下文应用于所有容器

apiVersion: v1 kind: Pod metadata: name: run-as-username-pod-demo spec: securityContext: windowsOptions: runAsUserName: "ContainerUser" containers: - name: run-as-username-demo nodeSelector: kubernetes.io/os: windows

而在下文中,容器级安全上下文将覆盖 pod 级别的安全上下文。

apiVersion: v1 kind: Pod metadata: name: run-as-username-container-demo spec: securityContext: windowsOptions: runAsUserName: "ContainerUser" containers: - name: run-as-username-demo .. securityContext: windowsOptions: runAsUserName: "ContainerAdministrator" nodeSelector: kubernetes.io/os: windows

运行AsUserName 字段可接受值的示例: ContainerAdministrator, ContainerUser,NT 授权机构\ 网络服务,NT 授权机构\ 本地服务

通常,使用适用于 Windows 的 pod 运行容 ContainerUser 器是个好主意。用户不在容器和主机之间共享,但在容器中 ContainerAdministrator 确实有额外的权限。请注意,有一些用户名限制需要注意。

何时使用的一个很好的例子 ContainerAdministrator 是设置 PATH。你可以使用 USER 指令来做到这一点,如下所示:

USER ContainerAdministrator RUN setx /M PATH "%PATH%;C:/your/path" USER ContainerUser

另请注意,密钥以明文形式写在节点的卷上(与 linux 上的 tmpfs/in-memory 相比)。这意味着你必须做两件事

  • 使用文件 ACL 保护密钥文件位置

  • 使用卷级加密 BitLocker