Kubernetes 安全体系全景
安全层次
┌─────────────────────────────────────────────────────┐
│ 集群安全 │
│ ┌─────────────────────────────────────────────────┐│
│ │ API Server 安全 ││
│ │ 认证(Authentication) ││
│ │ 授权(Authorization / RBAC) ││
│ │ 准入控制(Admission Control) ││
│ └─────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────┐│
│ │ 工作负载安全 ││
│ │ Pod Security Standards ││
│ │ SecurityContext ││
│ │ ServiceAccount ││
│ └─────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────┐│
│ │ 网络安全 ││
│ │ NetworkPolicy ││
│ │ mTLS(Istio/Linkerd) ││
│ └─────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────┐│
│ │ 数据安全 ││
│ │ etcd 加密 ││
│ │ Secret 管理(Vault/External Secrets) ││
│ └─────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────┘4C 安全模型
Cloud(云/基础设施)
└── Cluster(集群)
└── Container(容器)
└── Code(代码)每一层都需要独立的安全措施,内层依赖外层的安全基础。
安全加固清单
集群级别
bash
# 1. 启用 RBAC
--authorization-mode=Node,RBAC
# 2. 禁用匿名访问
--anonymous-auth=false
# 3. 启用审计日志
--audit-log-path=/var/log/audit.log
--audit-policy-file=/etc/kubernetes/audit-policy.yaml
# 4. etcd 加密
--encryption-provider-config=/etc/kubernetes/encryption-config.yaml
# 5. 启用 Pod Security Admission
--enable-admission-plugins=...,PodSecurity
# 6. 限制 API Server 访问
--bind-address=127.0.0.1 # 只监听本地(通过 LB 暴露)节点级别
bash
# 禁用 kubelet 匿名访问
--anonymous-auth=false
--authorization-mode=Webhook
# 限制 kubelet API 访问
--read-only-port=0 # 禁用只读端口工作负载级别
yaml
# 最小权限原则
spec:
serviceAccountName: minimal-sa # 使用专用 SA
automountServiceAccountToken: false # 不需要时禁用
securityContext:
runAsNonRoot: true
runAsUser: 1000
seccompProfile:
type: RuntimeDefault
containers:
- name: app
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop: ["ALL"]审计策略
yaml
# /etc/kubernetes/audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
# 记录 Secret 的读取操作
- level: Metadata
resources:
- group: ""
resources: ["secrets"]
verbs: ["get", "list", "watch"]
# 记录所有写操作
- level: RequestResponse
verbs: ["create", "update", "patch", "delete"]
# 忽略健康检查
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: ""
resources: ["endpoints", "services"]
# 默认记录元数据
- level: Metadata