华为云 CCE 容器集群生产环境安全加固实战指南
一、为什么需要对 CCE 集群做安全加固
华为云 CCE(云容器引擎)开箱即用,默认配置优先保证易用性。但在生产环境中,默认配置往往存在安全隐患:Pod 间网络无隔离、容器以 root 运行、镜像来源未校验、RBAC 权限过大等。
本文基于一次真实生产环境加固经历,总结出六个关键加固项,覆盖网络、容器、镜像、权限、审计五个层面,供大家参考。
二、加固项一:Pod 间网络隔离(NetworkPolicy)
默认情况下,CCE 集群内所有 Pod 可以互相访问。生产环境中,前端服务不应该直接访问数据库 Pod。
操作方式: 启用 NetworkPolicy 插件后,通过声明式策略限制访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-isolate
namespace: production
spec:
podSelector:
matchLabels:
app: postgres
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: backend
ports:
- protocol: TCP
port: 5432
这段策略的含义:仅允许 app=backend 的 Pod 访问 app=postgres 的 5432 端口,其他所有入站流量被拒绝。
注意事项: NetworkPolicy 是默认拒绝模型——一旦对某个 Pod 创建了策略,没有显式允许的流量全部被阻断。建议先在测试命名空间验证,再推到生产。
三、加固项二:禁止容器以 root 用户运行
很多基础镜像默认以 root 启动容器进程。如果容器被攻破,攻击者直接获得 root 权限,可能逃逸到宿主机。
操作方式: 在 Deployment 中设置 securityContext。
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: backend
image: my-registry/backend:v2.1.0
securityContext:
runAsNonRoot: true
runAsUser: 1000
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
ports:
- containerPort: 8080
四个字段的含义:
runAsNonRoot: true— 强制以非 root 用户运行,如果镜像指定了 USER 0 会直接启动失败runAsUser: 1000— 指定 UID 为 1000readOnlyRootFilesystem: true— 根文件系统只读,防止恶意写入allowPrivilegeEscalation: false— 禁止子进程提权
踩坑提醒: readOnlyRootFilesystem: true 开启后,应用如果往 /tmp 写临时文件会报错。解决方式是挂载一个 emptyDir 到 /tmp:
volumeMounts:
- name: tmp
mountPath: /tmp
volumes:
- name: tmp
emptyDir: {}
四、加固项三:镜像来源管控与漏洞扫描
生产环境绝不应该直接拉取公网未知镜像。建议搭建私有镜像仓库,所有镜像经过扫描后才允许部署。
华为云 SWR(容器镜像服务) 提供了镜像漏洞扫描能力。加固流程如下:
- 开发人员推送镜像到 SWR 私有组织
- CI 流水线触发 SWR 漏洞扫描
- 扫描结果中存在高危漏洞则阻断部署
- 通过准入检查的镜像打上
verified标签 - 集群中通过准入控制器(Admission Controller)拒绝未带
verified标签的镜像
准入控制器示例策略(用 OPA Gatekeeper):
apiVersion: templates.gatekeeper.sh/v1
kind: ConstraintTemplate
metadata:
name: require-verified-image
spec:
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package requireverifiedimage
violation[{"msg": msg}] {
container := input.review.object.spec.containers[_]
not contains(container.image, ":verified")
msg := sprintf("镜像 %v 未通过安全扫描,禁止部署", [container.image])
}
五、加固项四:收紧 RBAC 权限
CCE 默认会给集群管理员绑定 cluster-admin 角色,这在生产环境中过于宽泛。加固原则:最小权限 + 按命名空间隔离。
为开发团队创建受限 Role:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer-role
namespace: production
rules:
- apiGroups: [""]
resources: ["pods", "pods/log", "services", "configmaps"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "update", "patch"]
这个 Role 只允许在 production 命名空间内查看 Pod 日志、更新 Deployment,不能删除资源、不能操作其他命名空间、不能管理集群级资源。
绑定到开发组:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: developer-binding
namespace: production
subjects:
- kind: Group
name: dev-team
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer-role
apiGroup: rbac.authorization.k8s.io
六、加固项五:启用审计日志
审计日志记录"谁在什么时间对什么资源做了什么操作",是事后追责和安全合规的基础。
在 CCE 控制台启用审计日志:
进入 CCE 集群详情页,在「集群配置 → 参数配置」中开启 audit-log 参数,日志会输出到集群节点的 /var/log/host/audit/ 目录。
建议配合华为云 AOM(应用运维管理)将审计日志采集到 LTS(日志服务),设置告警规则,对以下高危操作实时告警:
delete命名空间createprivileged Podescalate或bindRBAC 权限- 修改
kube-system命名空间下的资源
七、加固项六:节点安全组收敛
CCE 创建集群时会自动生成安全组,默认规则有时过于宽松。加固建议:
| 方向 | 端口 | 来源 | 用途 |
|---|---|---|---|
| 入站 | 30000-32767 | 仅 VPC 内网 | NodePort 范围 |
| 入站 | 10250 | 仅集群节点内网 | kubelet |
| 入站 | 443 | 仅 ELB 后端地址 | Ingress 流量 |
| 出站 | 全部 | 全部 | 容器拉镜像等 |
关键原则:入站规则尽量收敛到内网,不要对公网开放节点端口。 外部流量统一走 ELB → Ingress 的路径。
八、加固效果验证
加固完成后,建议做一轮验证:
- 网络隔离验证: 在一个非 backend Pod 中尝试
curl postgres:5432,应被拒绝 - 非 root 验证:
kubectl exec进入容器执行id,应显示 uid=1000 - RBAC 验证: 用开发组账号尝试
kubectl delete pod,应返回 Forbidden - 审计日志验证: 执行一次部署操作,在 LTS 中能查到对应审计记录
九、总结
CCE 集群安全加固不是一次性工作,而是贯穿集群全生命周期的持续过程。本文涉及的六个加固项可以作为一个 checklist:
- ✅ Pod 间网络隔离
- ✅ 禁止 root 运行 + 只读根文件系统
- ✅ 镜像来源管控与漏洞扫描
- ✅ RBAC 最小权限
- ✅ 审计日志开启
- ✅ 节点安全组收敛
实际生产中还可以进一步考虑:Pod 安全标准(Pod Security Standards)、密钥管理用华为云 DEW 替代明文 Secret、节点定期漏洞修复等。安全没有终点,持续改进才是正道。
希望这篇实战指南对大家有帮助,欢迎在评论区交流你们的加固经验。
- 点赞
- 收藏
- 关注作者
评论(0)