Pod 安全许可
Pod 安全许可实现限制 pod 行为的 Kubernetes pod 安全标准,为违反为相关名称空间配置的 pod 安全概要文件策略的 pod 提供警告消息和 kube-apiserver
审计事件。
IBM Cloud Kubernetes Service V 1.25 和更高版本包含对 Kubernetes pod 安全许可的支持。 有关更多信息,请参阅 Kubernetes 文档中的 Pod 安全许可 和 Pod 安全标准。
IBM Cloud Kubernetes Service 1.25 及更高版本始终启用 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 安全标准概要文件。 您选择的标签定义在检测到潜在违例时控制平面执行的操作。
缺省情况下,IBM Cloud Kubernetes Service 会将 privileged
Pod 安全标签添加到以下名称空间。 使用 privileged
概要文件将这些名称空间标记为 enforce
,audit
和 warn
。
kube-system
ibm-system
ibm-operators
calico-system
(V 1.29 和更高版本)tigera-operator
(V 1.29 和更高版本)calico-apiserver
(版本 ) 1.31
请勿除去或更改这些名称空间的标签。
可以对名称空间进行标记,以便为任何或所有 Pod 安全许可 modes
设置 pod 安全概要文件。
例如,除了使用 warn
或 audit
之外,您还可以使用 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 安全许可插件配置
缺省情况下,IBM Cloud Kubernetes Service 使用以下 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 安全标签或免除的名称空间设置 enforce
,audit
和 warn
行为。
对于 Kubernetes 1.24 集群,apiVersion
必须为 pod-security.admission.config.k8s.io/v1beta
。 对于 1.25 和更高版本 pod-security.admission.config.k8s.io/v1
是首选,但仍可以使用 v1beta
API 版本。
-
创建包含
PodSecurityConfiguration
资源的 YAML 文件。 您可以使用缺省配置来启动。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: []
-
定制您想要使用的功能。 查看有关配置的每个部分的以下信息。
defaults
-
配置的
defaults
部分为没有 pod 安全标号的名称空间定义集群范围的缺省值。 这些字段可以具有与相应名称空间标签相同的值。 exemptions
-
配置的
exemptions
部分允许您创建由于与特定名称空间关联的策略而禁止的 pod。 豁免维度包括以下情况。-
用户名: 将忽略来自具有免除认证 (或模拟) 用户名的用户的请求。 用户名通常是 IAM 用户或服务帐户。 例如,
usernames: [ "IAM#user@example.com" ]
。 您还可以免除与admin kubeconfig
客户机证书关联的用户名。 如果要指定admin kubeconfig
证书,那么用户名是当前客户机证书的CN
组件。kubectl config view --minify -o jsonpath='{.users[0].user.client-certificate}' /home/user/.bluemix/plugins/container-service/clusters/mycluster-cheku1620qbs90gq6mdg-admin/admin.pem
在以下示例中,用户名为
IBMid-27000xxxxx-admin-2023-05-12
。 如果您获得新的admin kubeconfig
,那么用户名可能不同。openssl x509 -in <client-certificate> -subject -noout` subject=C = US, ST = San Francisco, L = CA, O = ibm-admins, CN = IBMid-27000xxxxx-admin-2023-05-12
-
RuntimeClassNames:指定免责运行时类名称的 Pod 和工作负载资源将被忽略。
-
名称空间: 忽略豁免名称空间中的 Pod 和工作负载资源。
-
-
保存定制 YAML 文件。
-
运行
ibmcloud ks cluster master pod-security set
命令。ibmcloud ks cluster master pod-security set --cluster CLUSTER --config-file CONFIG-FILE
运行 ibmcloud ks cluster master pod-security set
命令时,如果未指定配置文件,那么 pod 安全许可将重置为缺省配置。