Pod 安全策略
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,但允许 Deployment 等非 Pod 资源)。
- Audit 和 Warn 同时适用于 Pod 及其控制器(例如 Deployment)。
安全标准
PSA 定义了三种用于限制 Pod 权限的安全标准:
配置
命名空间标签
为命名空间应用标签,以定义 PSA 策略。
YAML 文件示例
CLI 命令
豁免
将特定用户、命名空间或运行时类豁免于 PSA 检查。
配置示例:
Kyverno Policy
ACP 提供了多个用于创建 Pod 安全 Kyverno policy 的示例。这些示例包括:
- Restricted:Restricted 拒绝访问所有主机功能,并要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。
- Restricted-v2:Restricted-v2 拒绝访问所有主机功能,并要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。这是限制最严格的 policy,默认用于已认证用户。除了旧版的“restricted”之外,它还要求删除所有 capabilities,并且不允许使用权限提升二进制文件。如果未设置 seccomp profile,它还会默认使用 runtime/default;否则必须指定此 seccomp profile。
- Anyuid:Anyuid 提供 Restricted policy 的所有功能,但允许用户使用任意 UID 和任意 GID 运行。
- Hostaccess:Hostaccess 允许访问所有主机命名空间,但仍要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。警告:此 policy 允许访问主机命名空间、文件系统和 PIDS。仅应将其用于受信任的 Pod。请谨慎授予。
- Hostmount-anyuid:Hostmount-anyuid 提供 Restricted policy 的所有功能,但允许 Pod 使用主机挂载和任意 UID。此 policy 主要由 persistent volume recycler 使用。警告:此 policy 允许以任意 UID(包括 UID 0)访问主机文件系统。请谨慎授予。
- Hostnetwork:Hostnetwork 允许使用主机网络和主机端口,但仍要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。
- Hostnetwork-v2:Hostnetwork-v2 允许使用主机网络和主机端口,但仍要求 Pod 使用分配给命名空间的 UID 和 SELinux 上下文运行。除了旧版的“hostnetwork” policy 之外,它还要求删除所有 capabilities,并且不允许使用权限提升二进制文件。如果未设置 seccomp profile,它还会默认使用 runtime/default;否则必须指定此 seccomp profile。
- Node-exporter:Node-exporter policy 用于 Prometheus node exporter。
- Nonroot:Nonroot 提供 Restricted policy 的所有功能,但允许用户使用任意非 root UID 运行。用户必须指定 UID,或者必须在容器运行时的 manifest 中指定 UID。
- Nonroot-v2:Nonroot-v2 提供 Restricted policy 的所有功能,但允许用户使用任意非 root UID 运行。用户必须指定 UID,或者必须在容器运行时的 manifest 中指定 UID。除了旧版的“nonroot” policy 之外,它还要求删除所有 capabilities,并且不允许使用权限提升二进制文件。如果未设置 seccomp profile,它还会默认使用 runtime/default;否则必须指定此 seccomp profile。
- Privileged:Privileged 允许访问所有特权功能和主机功能,并能够以任意用户、任意组、任意 fsGroup 以及任意 SELinux 上下文运行。警告:这是限制最宽松的 policy,仅应将其用于集群管理。请谨慎授予。
NOTICE
Restricted policy 不等同于 Kubernetes Pod Security Admission 的“restricted”标准。 如果要使用 kyverno Restricted policy,而不是 Kubernetes Pod Security Admission 的“restricted”标准,可能需要更改 Pod 安全配置。
前提条件
- 安装 Alauda Container Platform Policy Management,参阅文档。
- 在 ACP featuregate 设置中启用 feature gate
namespace-resource-manage。
应用 Kyverno Policies
Web Console
- 在 ACP 控制台中,导航到 Container Platform,选择要应用安全 policy 的命名空间。
- 转到 Advanced > Resources。
- 搜索资源类型名称为 Policy 且组为 kyverno.io 的 Policy 资源。
- 选择版本“v2beta1”,点击 Create 以创建新的 Kyverno Policy。
- 在 Create Resource 对话框中,选择 Samples 选项卡。
- 选择所需的 Pod 安全 policy 示例(例如
Restricted),然后点击 Try。 - 根据需要查看并修改 policy YAML,然后点击 Update 以应用 policy。
CLI
-
登录要应用安全 policy 的 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