花苞安全接纳
Pod 安全许可实施限制 pod 行为的 Kubernetes pod 安全标准,对违反为相关命名空间配置的 pod 安全配置文件策略的 pod 提供警告消息和 kube-apiserver 审核事件。
Red Hat OpenShift on IBM Cloud 4.11 及更高版本包括对 pod 安全接纳的支持。Kubernetes 更多信息,请参阅 Kubernetes 文档中的 Pod Security Admission 和 Pod Security Standards。
Red Hat OpenShift on IBM Cloud 4.11 及更高版本始终启用 Pod Security Admission。 Kubernetes 的早期版本使用 pod 安全策略。
了解安全配置文件
Kubernetes pod 安全标准定义了以下三个配置文件。
- 特权
- 默认 pod 安全配置全局执行
privilegedKubernetes pod 安全配置文件,该配置文件不受限制,允许已知权限升级,并根据restricted配置文件设置的策略生成警告和审计事件。 - 基线
baseline配置文件是一种限制性配置文件,可防止已知的权限升级。 允许默认(最少指定)的 Pod 配置。- 受限制
restricted配置文件受到严格限制,并遵循当前的 pod 加固最佳实践。
有关 pod 安全配置文件的更多信息,请参阅 Kubernetes 文档中的 配置文件详细信息。
Pod Security Admission 包含三种模式,可定义控制平面在检测到潜在违规时采取的行动。
- 强制执行
- 违反政策会导致 pod 被拒绝。
- 审计
- 违反政策会导致在审计日志中记录的事件中添加审计注释,但在其他情况下是允许的。
- warn
- 违反政策会触发面向用户的警告,但在其他方面是允许的。
当安全标准或配置文件实施发生变化以应对新功能时,您可以将 Pod Security Admission 配置为使用特定版本的角色。 支持以下版本。
- Kubernetes major.minor 版本(例如
v1.25) latest
如果豌豆荚安全入学不适合我怎么办?
虽然 Pod 安全接入始终处于启用状态,但它可以是多个接入控制器之一。 您可以配置第三方 Kubernetes 准入控制器,以实施适合您使用情况的其他安全策略模型。
如果使用 privileged 配置文件将 Pod Security Admission 配置为强制执行、警告和审计,那么控制平面就会允许所有 pod 运行。 然后,您可以配置其他接纳控制器来拒绝它们。
只要不进行以下操作,您就可以安装第三方接纳控制器。
- 它不会安装自己的 pod 安全策略 (PSP)。
- 它不依赖于 PSP 来执行部分政策。
配置 Pod 安全接纳命名空间标签
您可以在每个命名空间中定义 pod 安全所要使用的许可控制模式。 Kubernetes 定义了一组标签,您可以设置这些标签来定义要在命名空间中使用的预定义 Pod 安全标准配置文件。 您选择的标签定义了控制平面在检测到潜在违规时采取的措施。
默认情况下,Red Hat OpenShift on IBM Cloud 会将 privileged Pod Security 标签添加到以下命名空间。 通过使用 privileged 配置文件,这些命名空间被标记为 enforce、audit 和 warn。
kube-systemibm-systemibm-operatorscalico-systemtigera-operatorcalico-apiserver( 4.16 及更高版本)
请勿删除或更改这些命名空间或任何 openshift-* 命名空间的标签。
可为命名空间贴标签,以便为任何或所有 Pod Security Admission modes 设置 pod 安全配置文件。
例如,除了使用 warn 或 audit 外,还可以使用 baseline 配置文件对命名空间进行标记,以执行 privileged 配置文件。
该标签允许管理员和应用程序开发人员在不拒绝 pod 的情况下,仅根据 baseline 配置文件查找警告和审核记录,从而对应用程序进行试运行。 然后,在将执行模式更改为 baseline 之前,可以对工作负载进行必要的更改。
Pod 安全接纳命名空间标签的形式为 pod-security.kubernetes.io/<MODE>: <LEVEL> 和 pod-security.kubernetes.io/<MODE>-version: <VERSION>。
pod-security.kubernetes.io/enforcepod-security.kubernetes.io/enforce-versionpod-security.kubernetes.io/auditpod-security.kubernetes.io/audit-versionpod-security.kubernetes.io/warnpod-security.kubernetes.io/warn-version
要给命名空间贴标签以执行 privileged 配置文件,并对违反 baseline 配置文件的行为生成警告和审计事件,请使用以下标签。
pod-security.kubernetes.io/enforce: privilegedpod-security.kubernetes.io/enforce-version: latestpod-security.kubernetes.io/audit: baselinepod-security.kubernetes.io/audit-version: latestpod-security.kubernetes.io/warn: baselinepod-security.kubernetes.io/warn-version: latest
默认 Pod Security Admission 插件配置
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")`
在此示例中,只要服务账户被授权到 SecurityContextConstraint 配置文件,pod 仍会被创建并运行。 警告表示,要使 pod 在指定的 pod 安全配置文件下运行,需要更改 pod 和容器的 securityContext 配置文件,例如设置 allowPrivilegeEscalation=false 选项,或者必须使用允许这些功能的 pod 安全配置文件。
Red Hat OpenShift 还包括一个控制器,可根据给定命名空间中服务账户的 SCC 权限应用命名空间标签。 pod 安全接入和 SCC 均适用。 您可以主要使用 SCC,并使用 pod 安全接纳同步控制器来调整命名空间上的 pod 安全标签。 或者,可以主要使用 pod 安全配置文件与命名空间角色绑定,使命名空间中的所有服务账户都能使用同等(或更高权限)的 SCC。 请勿定义全局适用的角色绑定或群集角色绑定,例如所有命名空间中的所有授权用户或所有服务账户,因为这些绑定可能会影响 Red Hat OpenShift 组件,而这些组件希望在特定 SCC 下运行。
其他资源
- 了解并管理 pod 安全接入。
- Pod Security Admission in Red Hat OpenShift 4.11.
- Kubernetes API 服务器审计日志 介绍如何在 Red Hat OpenShift on IBM Cloud 服务中配置 API 服务器审计日志。