## 概述
Pod安全依赖命名空间级策略与容器级安全上下文协同。PSA在准入时拦截违规配置,容器内使用Seccomp、AppArmor与能力降级减少攻击面,配合非root与禁止提权,形成稳健隔离基线。
## 关键实践与参数
- PSA等级:`baseline` 或 `restricted`,按命名空间标签生效
- 非root:`runAsNonRoot=true` `runAsUser=1000`
- 能力降级:`capabilities.drop=["ALL"]`
- 禁止提权:`allowPrivilegeEscalation=false`
- Seccomp:`seccompProfile.type=RuntimeDefault`
- AppArmor:为容器设置 `container.apparmor.security.beta.kubernetes.io/=runtime/default`
## 示例/配置/实现
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: secure
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/enforce-version: latest
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
namespace: secure
spec:
replicas: 2
selector:
matchLabels: { app: api }
template:
metadata:
labels: { app: api }
annotations:
container.apparmor.security.beta.kubernetes.io/app: runtime/default
spec:
containers:
- name: app
image: alpine:3.19
command: ["sleep", "3600"]
securityContext:
runAsNonRoot: true
runAsUser: 1000
allowPrivilegeEscalation: false
seccompProfile: { type: RuntimeDefault }
capabilities: { drop: ["ALL"] }
```
## 验证
- 准入拦截:尝试部署 `privileged=true` 容器应被PSA拒绝并给出原因
- 非root校验:容器内执行 `id -u` 返回非0,无法执行需要特权的操作
- 能力降级:执行 `capsh --print` 或运行需要NET_ADMIN能力的命令失败
- Seccomp/AppArmor:启用后敏感系统调用被限制,查看事件与日志
## 注意事项
- AppArmor需在节点内核与CNI支持下生效
- PSA标签需精确配置并与团队协作流程对齐
- 个别镜像可能需要额外权限,应改造镜像降低需求
- 定期合规扫描与演练,确保策略未被绕过
发表评论 取消回复