限制在 yaml 配置安全相关的特性.

13.3.1 PodSecurityPolicy 资源介绍

PodSecurityPolicy 是集群级别的资源.

  • 维护 PodSecurityPolicy 配置的工作由 API 服务中的 PodSecurityPolicy 准入控制插件完成

注意:

  • 需要在 Kubernetes 中启用 PodSecurityPolicy

检视一个 PodSecurityPolicy 样例

image.png

13.3.2 了解 runAsUser, fsGroup 和 supplementalGroup 策略

MustRunAs 规则

image.png

注意:

  • 修改策略对已经存在的 pod 无效

部署 runAsUser 在指定范围之外的 pod

API 服务会拒绝这个 pod:

image.png

部署镜像中用户 ID 在指定范围之外的 pod

Dockerfile:

image.png

API 服务不会拒绝:

image.png

查看用户 ID 和用户组 ID:

image.png

PodSecurityPolicy 可以将硬编码覆盖到镜像中的用户 ID.

在 runAsUser 字段中使用 mustRunAsNonRoot 规则

image.png

13.3.3 配置允许, 默认添加, 禁止使用的内核功能

以下三个字段会影响容器可以使用的内核功能:

  • allowedCapabilities
  • defaultAddCapabilities
  • requiredDropCapabilities

image.png

指定容器中可以添加的内核功能

allowedCapabilities 用于指定 spec 容器的 securityContext.capabilities 中可以添加哪些内核功能.

为所有容器添加内核功能

defaultAddCapabilities 字段中列出的所有内核功能将被添加到每个已部署的 pod 的每个容器中.

禁用容器中的内核功能

requiredDropCapabilities 中列出的内核功能会在所有容器中被禁用.

13.3.4 限制 pod 可以使用的存储卷类型

在最低限度上, 一个 PodSecurityPolicy 需要允许 pod 使用:

  • emptyDir
  • configMap
  • secret
  • downwardAPI
  • persistentVolumeClaim

image.png

13.3.5 对不同的用户与组分配不同的 PodSecurityPolicy

利用 RBAC.

创建一个允许部署特权容器的 PodSecurityPolicy

image.png

查看已有的 PodSecurityPolicy:

image.png

注意:

  • PRIV 为 true 时表示可以使用特权

使用 RBAC 将不同的 PodSecurityPolicy 分配给不同用户

将不能使用特权的 default 绑定到 psp-default 上:

image.png

将能使用特权的 privileged 绑定到 psp-privileged 上:

image.png

psp-default 绑定到所有被认证的用户所在的组上:

  • 避免其他用户无法创建 pod

image.png

psp-privileged 绑定到用户 Bob 上:

image.png

  • Alice 现在拥有 default PodSecurityPolicy
  • Bob 现在拥有 default 和 privileged PodSecurityPolicy

为 kubectl 创建不同用户

image.png

这个创建用户应该了解一下.

使用不同用户创建 pod

以 Alice 身份创建特权 pod:

image.png

以 Bob 身份创建 pod:

image.png