本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 文档。
另一方面,Pod 安全标准 (PSS) 是推荐的安全方法,通常使用安全上下文实现,被定义为 Pod 清单中 Pod 和容器规范的一部分。PSS 是 Kubernetes 项目团队为解决 Pod 安全相关的最佳实践而定义的官方标准。它定义了基准(最低限制,默认)、特权(非限制)和限制(最严格)等策略。
我们建议从基准配置文件开始。PSS 基准配置文件在安全性和潜在摩擦之间提供了稳固的平衡,需要最少的例外清单,它是工作负载安全的良好起点。如果您目前正在使用 PSP,我们建议切换到 PSS。有关 PSS 策略的更多详细信息可以在 Kubernetes 文档中找到。
安全上下文设置允许用户授予选择进程的权限,使用程序配置文件限制单个程序的功能,允许权限升级,过滤系统调用等。
在安全上下文方面,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