IBM Cloud Docs
Pod 安全许可

Pod 安全许可

Pod 安全许可实现限制 pod 行为的 Kubernetes pod 安全标准,为违反为相关名称空间配置的 pod 安全概要文件策略的 pod 提供警告消息和 kube-apiserver 审计事件。

Red Hat OpenShift on IBM Cloud V 4.11 和更高版本包含对 Kubernetes pod 安全许可的支持。 有关更多信息,请参阅 Kubernetes 文档中的 Pod 安全许可Pod 安全标准

Red Hat OpenShift on IBM Cloud 4.11 及更高版本始终启用 Pod Security Admission。 Kubernetes 的早期版本使用 pod 安全策略。

了解安全概要文件

Kubernetes pod 安全标准定义以下三个概要文件。

特权
缺省 pod 安全配置全局实施 privileged Kubernetes pod 安全概要文件,该概要文件不受限制,允许已知特权升级,并根据 restricted 概要文件设置的策略生成警告和审计事件。
基线
baseline 概要文件是防止已知特权升级的限制性概要文件。 允许缺省 (最少指定) Pod 配置。
受限制
restricted 概要文件受到严格限制,并且遵循当前 pod 强化最佳实践。

有关 pod 安全概要文件的更多信息,请参阅 Kubernetes 文档中的 概要文件详细信息

Pod 安全许可包含三种方式,用于定义在检测到潜在违例时控制平面执行的操作。

强制执行
策略违例导致 pod 被拒绝。
审计
策略违例会触发向审计日志中记录的事件添加审计注释,但在其他情况下是允许的。
warn
策略违例会触发面向用户的警告,但在其他情况下是允许的。

随着安全标准或概要文件实现更改以解决新功能,您可以配置 Pod 安全许可以使用特定版本的角色。 支持以下版本

  • Kubernetes major.minor 版本 (例如,v1.25)
  • latest

如果 Pod 安全准入对我来说不是正确的选择呢?

虽然始终启用 Pod 安全许可,但它可以是多个许可控制器之一。 您可以配置第三方 Kubernetes 许可控制器,以实现适合您用例的其他安全策略模型。

如果使用 privileged 概要文件配置 Pod 安全许可以实施,警告和审计,那么控制平面将允许所有 pod 运行。 然后,您可以配置其他许可控制器以拒绝这些控制器。

只要不执行以下任一操作,就可以安装第三方许可控制器。

  • 它不会安装自己的 pod 安全策略 (PSP)。
  • 它不依赖于 PSP 来实施策略的某些部分。

配置 Pod 安全性许可名称空间标签

您可以定义要用于每个名称空间中的 pod 安全性的许可控制方式。 Kubernetes 定义一组标签,您可以设置这些标签以定义要用于名称空间的预定义 Pod 安全标准概要文件。 您选择的标签定义在检测到潜在违例时控制平面执行的操作。

缺省情况下,Red Hat OpenShift on IBM Cloud 将 privileged Pod 安全标签添加到以下名称空间。 使用 privileged 概要文件将这些名称空间标记为 enforceauditwarn

  • kube-system
  • ibm-system
  • ibm-operators
  • calico-system
  • tigera-operator
  • calico-apiserver (版本 4.16 及更高版本)

请勿除去或更改这些名称空间或任何 openshift-* 名称空间的标签。

可以标注名称空间以设置任何或所有 Pod 安全许可 modes 的 pod 安全概要文件。

例如,除了使用 warnaudit 之外,您还可以使用 baseline 概要文件来标注名称空间以强制实施 privileged 概要文件。

此标签允许管理员和应用程序开发者通过仅查找针对 baseline 概要文件的警告和审计记录而不拒绝 pod 来执行应用程序。 然后,可以在将实施方式更改为 baseline 之前对工作负载进行必要的更改。

Pod 安全许可名称空间标签的格式为 pod-security.kubernetes.io/<MODE>: <LEVEL>pod-security.kubernetes.io/<MODE>-version: <VERSION>

  • pod-security.kubernetes.io/enforce
  • pod-security.kubernetes.io/enforce-version
  • pod-security.kubernetes.io/audit
  • pod-security.kubernetes.io/audit-version
  • pod-security.kubernetes.io/warn
  • pod-security.kubernetes.io/warn-version

要标注名称空间以强制实施 privileged 概要文件,并针对 baseline 概要文件的违例生成警告和审计事件,请使用以下标签。

  • pod-security.kubernetes.io/enforce: privileged
  • pod-security.kubernetes.io/enforce-version: latest
  • pod-security.kubernetes.io/audit: baseline
  • pod-security.kubernetes.io/audit-version: latest
  • pod-security.kubernetes.io/warn: baseline
  • pod-security.kubernetes.io/warn-version: latest

缺省 Pod 安全许可插件配置

缺省情况下,Red Hat OpenShift on IBM Cloud 使用以下 PodSecurityConfiguration

apiVersion: pod-security.admission.config.k8s.io/v1
kind: PodSecurityConfiguration
defaults:
  enforce: "privileged"
  enforce-version: "latest"
  audit: "privileged"
  audit-version: "latest"
  warn: "privileged"
  warn-version: "latest"
exemptions:
  usernames: []
  runtimeClasses: []
  namespaces: []

配置 pod 安全许可

您可以使用预定义的 pod 安全标签在名称空间级别配置 pod 安全行为。 有关配置的更多信息,请参阅 Red Hat OpenShift 文档中的 控制 pod 安全许可同步。 请注意,每个集群版本的步骤都有所不同,因此请确保您正在查看正确版本的步骤。

有关为 Red Hat OpenShift on IBM Cloud配置 apiserver 日志的更多信息,请参阅 Kubernetes API 服务器审计日志

Pod 安全许可使您能够对违反安全概要文件的 pod 实施,警告和生成审计事件。 在 OpenShift 4.11中,缺省配置强制实施特权概要文件,同时根据 restricted 概要文件生成警告和审计事件。 通过在名称空间上使用预定义的 pod 安全标号,可以在名称空间级别控制此行为。 实施 Pod 安全概要文件时,您可能会看到类似以下示例的警告。

`Warning: would violate PodSecurity "restricted:latest": host namespaces (hostNetwork=true, hostPID=true), privileged (container "container-00" must not set securityContext.privileged=true), allowPrivilegeEscalation != false (container "container-00" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "container-00" must set securityContext.capabilities.drop=["ALL"]), restricted volume types (volume "host" uses restricted volume type "hostPath"), runAsNonRoot != true (pod or container "container-00" must set securityContext.runAsNonRoot=true), runAsUser=0 (container "container-00" must not set runAsUser=0), seccompProfile (pod or container "container-00" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")`

在此示例中,仍将创建 pod,并且只要服务帐户有权使用 SecurityContextConstraint 概要文件,就可以运行该 pod。 此警告指示需要更改 pod 和容器的 securityContext 概要文件才能在指定的 pod 安全概要文件下运行,例如,设置 allowPrivilegeEscalation=false 选项,或者必须使用允许这些功能的 pod 安全概要文件。

Red Hat OpenShift 还包含一个控制器,用于根据给定名称空间中服务帐户的 SCC 许可权来应用名称空间标签。 将同时应用 pod 安全许可和 SCC。 您可以主要使用 SCC,并使用 pod 安全许可同步控制器来调整名称空间上的 pod 安全标号。 或者,您可以主要使用具有名称空间角色绑定的 Pod 安全概要文件,该绑定允许名称空间中的所有服务帐户使用同等 (或更有特权) SCC。 请勿定义全局应用的角色绑定或集群角色绑定,例如,所有名称空间中的所有授权用户或所有服务帐户,因为这些绑定会影响期望在特定 SCC 下运行的 Red Hat OpenShift 组件。

其他资源