Pod Security Policies
ACP 支持 Kubernetes Pod Security Admission (PSA) 和 Kyverno Policy,以帮助强制执行集群中运行的 Pod 的安全标准。
Pod Security Admission
参考官方 Kubernetes 文档:Pod Security Admission
Pod Security Admission (PSA) 是 Kubernetes 的一个准入控制器,通过验证 Pod 规范是否符合预定义标准,在命名空间级别强制执行安全策略。
安全模式
PSA 定义了三种模式来控制如何处理策略违规:
关键说明:
- Enforce 仅对 Pod 生效(例如拒绝 Pod,但允许非 Pod 资源如 Deployment)。
- Audit 和 Warn 同时适用于 Pod 及其控制器(例如 Deployment)。
安全标准
PSA 定义了三种安全标准来限制 Pod 权限:
配置
命名空间标签
通过为命名空间应用标签来定义 PSA 策略。
YAML 文件示例
CLI 命令
例外
对特定用户、命名空间或 runtimeClass 免除 PSA 检查。
示例配置:
Kyverno Policy
ACP 提供了多个示例,用于创建 Pod 安全的 Kyverno 策略。示例包括:
- Restricted:Restricted 拒绝访问所有主机特性,要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。
- Restricted-v2:Restricted-v2 拒绝访问所有主机特性,要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。这是最严格的策略,默认用于认证用户。基于传统的 'restricted',还要求丢弃所有能力,不允许权限提升二进制文件。若未设置,则默认 seccomp 配置为 runtime/default,否则必须使用该 seccomp 配置。
- Anyuid:Anyuid 提供了 restricted 策略的所有功能,但允许用户以任意 UID 和 GID 运行。
- Hostaccess:Hostaccess 允许访问所有主机命名空间,但仍要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。警告:此策略允许访问主机的命名空间、文件系统和 PID,仅应授予受信任的 Pod,谨慎授权。
- Hostmount-anyuid:Hostmount-anyuid 提供了 restricted 策略的所有功能,但允许 Pod 使用主机挂载和任意 UID 运行。主要用于持久卷回收器。警告:此策略允许以任意 UID(包括 UID 0)访问主机文件系统,谨慎授权。
- Hostnetwork:Hostnetwork 允许使用主机网络和主机端口,但仍要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。
- Hostnetwork-v2:Hostnetwork-v2 允许使用主机网络和主机端口,但仍要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。基于传统的 'hostnetwork' 策略,还要求丢弃所有能力,不允许权限提升二进制文件。若未设置,则默认 seccomp 配置为 runtime/default,否则必须使用该 seccomp 配置。
- Node-exporter:Node-exporter 策略用于 Prometheus 节点导出器。
- Nonroot:Nonroot 提供了 restricted 策略的所有功能,但允许用户以任意非 root UID 运行。用户必须指定 UID,或者由容器运行时清单指定。
- Nonroot-v2:Nonroot-v2 提供了 restricted 策略的所有功能,但允许用户以任意非 root UID 运行。用户必须指定 UID,或者由容器运行时清单指定。基于传统的 'nonroot' 策略,还要求丢弃所有能力,不允许权限提升二进制文件。若未设置,则默认 seccomp 配置为 runtime/default,否则必须使用该 seccomp 配置。
- Privileged:Privileged 允许访问所有特权和主机特性,并能以任意用户、任意组、任意 fsGroup 以及任意 SELinux 上下文运行。警告:这是最宽松的策略,仅应用于集群管理,谨慎授权。
NOTICE
Restricted 策略不等同于 Kubernetes Pod Security Admission 的 'restricted' 标准。 如果您想使用 kyverno 的 Restricted 策略而非 Kubernetes Pod Security Admission 的 'restricted' 标准,可能需要更改您的 Pod 安全配置。
前提条件
- 安装 Alauda Container Platform Compliance for Kyverno,参考文档:document。
- 在 ACP featuregate 设置中启用功能门控
namespace-resource-manage。
应用 Kyverno 策略
Web 控制台
- 在 ACP 控制台,导航到 Container Platform,选择要应用安全策略的命名空间。
- 进入 Advanced > Resources。
- 搜索资源类型名称为 Policy,资源组为 kyverno.io 的资源。
- 选择版本 "v2beta1",点击 Create 创建新的 Kyverno Policy。
- 在 Create Resource 对话框中,选择 Samples 标签页。
- 选择所需的 Pod 安全策略示例(例如
Restricted),然后点击 Try。 - 审核并根据需要修改策略 YAML,点击 Update 应用策略。
CLI
-
登录到要应用安全策略的 Kubernetes 集群。
-
运行以下命令从示例资源创建 Kyverno Policy:
可用的示例资源包括:
- restricted-policy
- restrictedv2-policy
- anyuid-policy
- hostaccess-policy
- hostmount-anyuid-policy
- hostnetwork-policy
- hostnetwork-v2-policy
- node-exporter-policy
- nonroot-policy
- nonroot-v2-policy
- privileged-policy