Pod Security Admission
参考官方 Kubernetes 文档:Pod Security Admission
Pod Security Admission(PSA)是一个 Kubernetes 的 admission controller,通过验证 Pod 规范是否符合预定义标准,在命名空间级别强制执行安全策略。
目录
Security Modes
PSA 定义了三种模式来控制如何处理策略违规:
Mode | 行为 | 使用场景 |
---|
Enforce | 拒绝创建/修改不合规的 Pod。 | 需要严格安全执行的生产环境。 |
Audit | 允许创建 Pod,但在审计日志中记录违规行为。 | 监控和分析安全事件而不阻止工作负载。 |
Warn | 允许创建 Pod,但向客户端返回违规警告。 | 测试环境或策略调整的过渡阶段。 |
关键说明:
- Enforce 仅作用于 Pod(例如,拒绝 Pod,但允许非 Pod 资源如 Deployment)。
- Audit 和 Warn 作用于 Pod 及其控制器(例如 Deployment)。
Security Standards
PSA 定义了三种安全标准来限制 Pod 权限:
Standard | 描述 | 主要限制 |
---|
Privileged | 不受限制的访问,适用于受信任的工作负载(如系统组件)。 | 不验证 securityContext 字段。 |
Baseline | 最小限制以防止已知的权限提升。 | 阻止 hostNetwork 、hostPID 、特权容器和不受限制的 hostPath 卷。 |
Restricted | 最严格的策略,执行安全最佳实践。 | 要求: - runAsNonRoot: true - seccompProfile.type: RuntimeDefault - 丢弃 Linux 能力。 |
Configuration
Namespace Labels
通过给命名空间应用标签来定义 PSA 策略。
YAML 文件示例
apiVersion: v1
kind: Namespace
metadata:
name: example-namespace
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: baseline
pod-security.kubernetes.io/warn: baseline
CLI 命令
# 第一步:更新 Pod Admission 标签
kubectl label namespace <namespace-name> \
pod-security.kubernetes.io/enforce=baseline \
pod-security.kubernetes.io/audit=restricted \
--overwrite
# 第二步:验证标签
kubectl get namespace <namespace-name> --show-labels
Exemptions
对特定用户、命名空间或 runtime classes 免除 PSA 检查。
示例配置:
apiVersion: pod-security.admission.config.k8s.io/v1
kind: PodSecurityConfiguration
exemptions:
usernames: ['admin']
runtimeClasses: ['nvidia']
namespaces: ['kube-system']