Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-27-minio-security-solution.md
T
2025-08-02 21:06:47 +08:00

5.2 KiB
Raw Blame History

MinIO文件存储安全解决方案实施记录

📅 变更信息

  • 变更时间: 2025-01-27 15:30:00
  • 变更类型: 安全加固
  • 影响范围: 文件存储系统
  • 变更人员: 系统管理员

🚨 问题背景

当前安全风险

  1. MinIO Bucket策略: public - 任何人都可以访问
  2. 直接文件访问: 通过HTTP链接直接获取文件,无权限控制
  3. 安全漏洞: 文件URL泄露可能导致未授权访问敏感数据

风险场景

  • 学生信息文件可能被恶意访问
  • 财务数据文件URL被分享到外部
  • 无法追踪文件访问记录
  • 敏感文件绕过系统权限控制

🔐 解决方案

方案选择:预签名URL + 私有桶策略

  • 安全性: ⭐⭐⭐⭐⭐ (最高)
  • 实现复杂度: ⭐⭐ (中等)
  • 性能影响: ⭐⭐ (轻微)
  • 推荐指数: ⭐⭐⭐⭐⭐ (强烈推荐)

核心改进

  1. Bucket策略: public → private
  2. 访问方式: 直接HTTP链接 → 预签名URL
  3. 权限控制: 无权限控制 → 基于用户身份验证
  4. 访问追踪: 无记录 → 完整访问日志

📋 实施步骤

1. 数据库配置更新 ✅

  • 文件: script/minio-security-implementation.sql
  • 操作: 更新OSS配置访问策略为PRIVATE
  • 新增表:
    • sys_file_permission - 文件权限表
    • sys_file_access_log - 文件访问日志表

2. 后端代码实现 🔄

  • 新增控制器: SysFileAccessController - 文件访问控制器
  • 新增服务方法:
    • getFileAccessUrl() - 获取临时访问URL
    • checkFileAccessPermission() - 权限检查
  • 权限控制: 基于Sa-Token用户身份验证

3. 前端代码更新 🔄

  • 新增API: web/src/api/system/file.ts
    • getFileAccessUrl() - 获取文件访问URL
    • getBatchFileAccessUrl() - 批量获取访问URL
  • 更新组件: web/src/components/FileUpload/index.vue
    • 下载逻辑改为先获取预签名URL
    • 预览逻辑改为临时URL访问

4. MinIO配置更新 🔄

  • Docker配置: 更新docker-compose.yml
  • Bucket策略: 手动设置为private
  • 访问控制: 启用基于身份的访问控制

🔧 技术实现细节

预签名URL机制

// 生成临时访问URL(默认5分钟有效期)
String presignedUrl = storage.getPrivateUrl(
    oss.getFileName(), 
    Duration.ofSeconds(300)
);

权限检查流程

  1. 用户请求文件访问
  2. 后端验证用户身份(Sa-Token)
  3. 检查文件访问权限
  4. 生成预签名URL
  5. 记录访问日志
  6. 返回临时访问链接

前端访问流程

  1. 用户点击下载/预览
  2. 前端调用后端获取临时URL
  3. 使用临时URL访问文件
  4. URL过期后自动失效

📊 安全效果对比

安全指标 实施前 实施后 改进程度
文件访问控制 ❌ 无控制 ✅ 身份验证 ⭐⭐⭐⭐⭐
访问权限管理 ❌ 无权限 ✅ 基于角色 ⭐⭐⭐⭐
访问日志记录 ❌ 无记录 ✅ 完整日志 ⭐⭐⭐⭐⭐
URL安全性 ❌ 永久有效 ✅ 临时过期 ⭐⭐⭐⭐⭐
数据泄露风险 🔴 高风险 🟢 低风险 ⭐⭐⭐⭐⭐

🚀 实施计划

第一阶段:核心安全加固(立即实施)

  • 数据库配置更新
  • 后端预签名URL接口实现
  • 前端文件访问逻辑更新
  • MinIO bucket策略修改

第二阶段:权限控制完善(1周内)

  • 基于角色的文件权限控制
  • 文件访问日志记录
  • 权限管理界面开发

第三阶段:监控审计(2周内)

  • 文件访问监控告警
  • 异常访问检测
  • 访问统计分析

⚠️ 注意事项

1. 兼容性考虑

  • 现有文件: 需要为现有文件添加默认权限
  • URL变更: 前端需要适配新的文件访问方式
  • 性能影响: 预签名URL生成会增加少量延迟

2. 用户体验

  • 访问延迟: 每次访问需要先获取临时URL
  • 过期处理: URL过期后需要重新获取
  • 错误处理: 网络异常时的友好提示

3. 运维考虑

  • 监控告警: 添加文件访问异常监控
  • 日志管理: 定期清理访问日志
  • 备份策略: 确保权限数据备份

📈 预期效果

安全性提升

  • ✅ 消除文件直接访问安全风险
  • ✅ 实现基于身份的文件访问控制
  • ✅ 提供完整的访问审计能力
  • ✅ 防止文件URL泄露导致的未授权访问

合规性改善

  • ✅ 满足数据保护法规要求
  • ✅ 提供文件访问追踪能力
  • ✅ 支持数据安全审计需求

运维能力增强

  • ✅ 实时监控文件访问情况
  • ✅ 快速识别异常访问行为
  • ✅ 支持文件访问统计分析

🔄 后续优化

1. 性能优化

  • 实现权限缓存机制
  • 优化预签名URL生成性能
  • 添加CDN加速支持

2. 功能扩展

  • 文件版本控制
  • 文件完整性校验
  • 文件加密存储

3. 监控完善

  • 实时访问监控大屏
  • 异常行为自动告警
  • 访问趋势分析报告

📝 备注: 本方案采用预签名URL机制,在保证安全性的同时,对用户体验影响最小,是当前最佳的安全解决方案。