12 KiB
Kubernetes 集群安全分析报告
生成时间: 2025-12-30 23:50 工具: Trivy Operator v0.31.0 扫描范围: 全命名空间
📊 执行摘要
部署状态
✅ Trivy Operator: 已成功部署并运行
- Operator Pod: Running (1/1)
- ServiceMonitor: 已创建并集成到 Prometheus
- 命名空间: trivy-system
扫描覆盖范围
| 扫描类型 | 状态 | 报告数量 | 说明 |
|---|---|---|---|
| 配置审计 | ✅ 已完成 | 211 | 所有资源的安全配置检查 |
| 漏洞扫描 | ⏳ 进行中 | 0 | 等待 Trivy 扫描器镜像拉取完成 |
🔍 配置审计结果
总体统计
总报告数: 211
├── 严重 (Critical): 0 ✅
├── 高危 (High): 144 ⚠️
├── 中危 (Medium): 271 ⚠️
└── 低危 (Low): 0 ✅
按命名空间分布
| 命名空间 | 报告数 | 主要问题 |
|---|---|---|
| infra | 29 | MinIO, MySQL, Redis, Ingress NGINX |
| argocd | 22 | ArgoCD Server, Repo Server, Dex |
| kube-system | 20 | 系统组件, LoadBalancer Pods |
| monitoring | 19 | Prometheus, Grafana, AlertManager |
| ljwx-project | 15 | 业务应用 |
| zhishiku | 14 | 知识库应用 |
| stock | 11 | 股票应用 |
| data | 11 | PostgreSQL, Redis |
| ljwx-stock | 9 | 股票相关服务 |
| learn | 8 | 学习环境 |
高危问题资源 Top 10
| 资源 | 命名空间 | 类型 | 高危 | 中危 |
|---|---|---|---|---|
| gitea-runner | gitea-runner | ReplicaSet | 4 | 5 |
| cert-manager-webhook-dnspod | cert-manager | ReplicaSet | 3 | 5 |
| mysql-backup-cronjob | infra | CronJob | 3 | 4 |
| minio | infra | ReplicaSet | 3 | 5 |
| mysql-infra | infra | StatefulSet | 3 | 3 |
| redis | infra | ReplicaSet | 3 | 3 |
| postgres-backup-cronjob | infra | CronJob | 2 | 4 |
| ingress-nginx-controller | infra | ReplicaSet | 2 | 3 |
| svclb-* (多个) | kube-system | DaemonSet | 2 | 7-8 |
| argocd-server | argocd | ReplicaSet | 1 | 1 |
⚠️ 主要安全问题详解
1. KSV118: 使用默认安全上下文 (HIGH)
问题描述:
- 144 个资源未配置 securityContext
- 容器以默认权限运行,可能存在权限过大的风险
影响范围:
- argocd: Server, Repo Server, Dex, ApplicationSet Controller
- infra: MinIO, Redis, MySQL, Ingress NGINX
- gitea-runner: Gitea Runner
- cert-manager: Webhook, CA Injector
修复建议:
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000
capabilities:
drop:
- ALL
优先级: P1 - 建议尽快修复
2. KSV014: 根文件系统不是只读 (HIGH)
问题描述:
- 容器的根文件系统可写
- 可能被恶意代码修改容器文件系统
影响范围:
- MinIO (3 个容器)
- Redis
- MySQL
修复建议:
securityContext:
readOnlyRootFilesystem: true
# 为需要写入的目录挂载 emptyDir
volumeMounts:
- name: tmp
mountPath: /tmp
- name: var-log
mountPath: /var/log
volumes:
- name: tmp
emptyDir: {}
- name: var-log
emptyDir: {}
优先级: P1 - 建议尽快修复
3. 其他常见问题
中危问题 (271 个)
常见的中危问题包括:
- KSV003: 缺少资源限制 (limits)
- KSV011: 缺少 CPU 资源限制
- KSV012: 缺少内存资源限制
- KSV015: CPU 资源请求未设置
- KSV016: 内存资源请求未设置
- KSV020: 容器以 root 用户运行
- KSV106: 容器具有额外的 capabilities
修复建议:
-
添加资源限制:
resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 512Mi -
配置非 root 用户:
securityContext: runAsNonRoot: true runAsUser: 1000 -
移除不必要的 capabilities:
securityContext: capabilities: drop: - ALL add: - NET_BIND_SERVICE # 仅在需要时添加
🚧 漏洞扫描状态
当前状态
扫描任务: 4 个扫描 Job 处于 Init:ErrImagePull 状态
根本原因:
- 扫描器镜像
mirror.gcr.io/aquasec/trivy:0.66.0无法拉取 - 镜像较大(约 500MB+),网络受限导致拉取超时
尝试的解决方案:
- ✅ 使用 cache-image.sh 缓存 Operator 镜像 (aquasec/trivy-operator:0.29.0) - 成功
- ❌ 使用 cache-image.sh 缓存扫描器镜像 (aquasec/trivy:0.66.0) - 超时
- ❌ 直接从 EU Harbor 拉取 - 超时
- ❌ 直接从 Docker Hub 拉取 - 超时
下一步行动
方案 1: 延长超时并重试 (推荐)
修改 cache-image.sh 的超时时间:
# 编辑 cache-image.sh
# 将第 168 行和 181 行的 timeout 60 改为 timeout 300
# 重新缓存
./cache-image.sh aquasec/trivy:0.66.0
方案 2: 使用小版本镜像
尝试使用更小的 Trivy 版本:
# 缓存较小的版本
./cache-image.sh aquasec/trivy:0.50.0
# 更新 Trivy Operator 配置
helm upgrade trivy-operator aqua/trivy-operator \
--namespace trivy-system \
--reuse-values \
--set trivy.image.registry=harbor.omniverseai.net \
--set trivy.image.repository=library/aquasec-trivy \
--set trivy.image.tag=0.50.0
方案 3: 分段下载
在网络条件较好的时间段(如凌晨)进行拉取:
# 设置更长的超时
timeout 900 docker pull harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0
# 标记并推送到本地 Harbor
docker tag harbor.eu.lingjingwanxiang.cn/dockerhub-proxy/aquasec/trivy:0.66.0 \
harbor.omniverseai.net/library/aquasec-trivy:0.66.0
docker push harbor.omniverseai.net/library/aquasec-trivy:0.66.0
# 更新 Trivy Operator 配置
helm upgrade trivy-operator aqua/trivy-operator \
--namespace trivy-system \
--reuse-values \
--set trivy.image.registry=harbor.omniverseai.net \
--set trivy.image.repository=library/aquasec-trivy \
--set trivy.image.tag=0.66.0
方案 4: 暂时禁用漏洞扫描
如果漏洞扫描不是当前优先级,可以禁用:
helm upgrade trivy-operator aqua/trivy-operator \
--namespace trivy-system \
--reuse-values \
--set operator.scanJobsConcurrentLimit=0
📋 安全加固建议
立即执行 (P0)
无严重 (Critical) 问题需要立即修复。
短期计划 (P1 - 1-2 周)
-
修复高危配置问题 (144 个 HIGH issues)
优先修复以下服务的 securityContext:
# 1. 核心基础设施 - ArgoCD Server, Repo Server - Ingress NGINX Controller - MinIO - MySQL Infra - Redis # 2. 备份服务 - MySQL Backup CronJob - Postgres Backup CronJob # 3. CI/CD - Gitea Runner - cert-manager Webhook -
添加资源限制 (271 个 MEDIUM issues)
为所有服务添加合理的资源 requests 和 limits:
# 参考已优化的资源配额 kubectl get resourcequota -A -
启用漏洞扫描
完成 Trivy 扫描器镜像缓存,启用容器漏洞扫描:
# 使用方案 1 或方案 3
中期计划 (P2 - 1 个月)
-
实施 Pod Security Admission
在 OrbStack 支持的情况下,启用 Pod Security Standards:
apiVersion: v1 kind: Namespace metadata: name: production labels: pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/audit: restricted pod-security.kubernetes.io/warn: restricted -
增强 Network Policies
为每个应用创建更严格的 Network Policies:
# 实现默认拒绝策略 # 仅允许必要的流量 -
定期安全审计
建立定期安全审计流程:
# 每周查看新的漏洞报告 kubectl get vulnerabilityreports -A # 每月审查配置审计报告 kubectl get configauditreports -A
长期优化 (P3 - 按需)
-
集成 Falco 运行时安全
部署 Falco 进行运行时威胁检测:
helm install falco falcosecurity/falco \ --namespace falco-system \ --create-namespace -
实施镜像签名验证
使用 Sigstore/Cosign 进行镜像签名和验证:
# 为关键镜像实施签名策略 -
启用审计日志
配置 Kubernetes Audit Policy 记录关键操作:
# 审计关键 API 调用 # 记录 Secret 访问 # 追踪权限变更
📊 持续监控
Prometheus 集成
Trivy Operator 已集成 Prometheus,可监控以下指标:
# 漏洞数量趋势
trivy_operator_vulnerabilities_total
# 按严重性分类
trivy_operator_vulnerabilities_total{severity="CRITICAL"}
trivy_operator_vulnerabilities_total{severity="HIGH"}
# 配置审计问题
trivy_operator_configaudit_checks_total
Grafana Dashboard
建议创建 Trivy 安全 Dashboard 监控:
- 漏洞趋势图 - 显示漏洞数量随时间的变化
- 严重性分布 - 饼图显示不同严重性的分布
- 命名空间对比 - 各命名空间的安全得分
- Top 10 脆弱服务 - 漏洞最多的 10 个服务
告警规则
建议配置以下 Prometheus 告警规则:
# 新增严重漏洞告警
- alert: CriticalVulnerabilityDetected
expr: trivy_operator_vulnerabilities_total{severity="CRITICAL"} > 0
for: 5m
annotations:
summary: "检测到严重漏洞"
# 高危配置问题告警
- alert: HighConfigurationIssue
expr: trivy_operator_configaudit_checks_total{severity="HIGH"} > 100
for: 10m
annotations:
summary: "高危配置问题超过阈值"
📁 相关文件
生成的报告
- /tmp/configaudit-reports.json - 完整的配置审计报告(JSON 格式)
- 本文件 - 安全分析报告
配置文件
- /tmp/trivy-operator-values.yaml - Trivy Operator Helm values
- deploy-trivy-operator-cn.sh - 部署脚本(含国内网络优化)
- TRIVY-DEPLOYMENT-GUIDE.md - 部署指南
工具脚本
- cache-image.sh - 镜像缓存工具(已修复组织名解析问题)
- CACHE-IMAGE-FIX.md - 镜像缓存工具修复说明
🎯 下一步行动
立即执行
-
增加超时并重新拉取 Trivy 镜像
# 编辑 cache-image.sh,增加 timeout 到 300 秒 vim cache-image.sh # 重新拉取 ./cache-image.sh aquasec/trivy:0.66.0 -
查看详细的配置审计问题
# 导出完整报告 kubectl get configauditreports -A -o json > /tmp/full-audit-report.json # 查看 MinIO 的详细问题 kubectl describe configauditreport -n infra replicaset-minio-5c644bf96b
本周内
-
修复核心服务的 securityContext
- ArgoCD Server
- Ingress NGINX
- MinIO
- MySQL/Redis
-
为所有服务添加资源限制
- 参考已优化的 ResourceQuota
- 使用合理的 requests/limits
本月内
-
完成漏洞扫描部署
- 确保 Trivy 扫描器镜像可用
- 验证漏洞报告生成
- 创建 Grafana Dashboard
-
制定安全加固计划
- 优先修复高危配置问题
- 建立定期审计流程
- 配置安全告警
📞 问题反馈
如需查看更详细的信息:
# 查看 Trivy Operator 日志
kubectl logs -n trivy-system deployment/trivy-operator
# 查看扫描任务状态
kubectl get pods -n trivy-system
# 查看特定资源的配置审计
kubectl describe configauditreport -n <namespace> <report-name>
# 导出所有报告
kubectl get configauditreports -A -o json > audit-reports.json
kubectl get vulnerabilityreports -A -o json > vuln-reports.json
生成时间: 2025-12-30 23:50 Trivy Operator 版本: v0.31.0 扫描覆盖: 211 个资源 状态: 配置审计完成 ✅ | 漏洞扫描待启用 ⏳