6.6 KiB
6.6 KiB
MinIO Bucket密码安全功能实施记录
📅 变更信息
- 变更时间: 2025-01-27 16:30:00
- 变更类型: 安全加固 - Bucket密码验证
- 影响范围: 文件存储系统安全机制
- 变更人员: 系统管理员
🔐 功能概述
新增安全层
为私有bucket添加访问密码验证机制,在原有预签名URL基础上增加额外的安全保护层。
安全机制
- 预签名URL: 临时有效的文件访问链接
- Bucket密码验证: 额外的访问密码验证
- 访问限制: 支持访问次数限制和过期时间
- 访问日志: 完整的访问记录和审计
📋 实施内容
1. 数据库表结构 ✅
文件: script/minio-security-implementation.sql
新增表:
sys_bucket_access_password- bucket访问密码表sys_bucket_access_record- bucket访问记录表
表结构特点:
- 支持密码加密存储(MD5 + 盐值)
- 支持访问次数限制
- 支持密码过期时间
- 支持访问记录审计
2. 实体类创建 ✅
文件:
backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysBucketAccessPassword.javabackend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysBucketAccessRecord.java
功能:
- bucket密码信息管理
- 访问记录数据模型
- 完整的审计字段
3. 服务层实现 ✅
文件:
backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysBucketAccessPasswordService.javabackend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysBucketAccessPasswordServiceImpl.java
核心功能:
validateBucketPassword()- bucket密码验证recordBucketAccess()- 访问记录checkAccessLimit()- 访问次数限制resetBucketPassword()- 密码重置
4. Mapper接口 ✅
文件:
backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysBucketAccessPasswordMapper.javabackend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysBucketAccessRecordMapper.java
5. 控制器更新 ✅
文件: backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysFileAccessController.java
更新内容:
- 所有文件访问接口增加bucket密码参数
- 添加密码验证逻辑
- 保持向后兼容性(密码为空时跳过验证)
6. 前端API更新 ✅
文件: web/src/api/system/file.ts
更新内容:
- 所有API方法增加bucketPassword参数
- 添加密码验证和提示功能
- 保持向后兼容性
🔐 安全机制详解
密码验证流程
- 用户身份验证: 检查用户是否已登录
- 文件权限检查: 验证用户是否有权限访问文件
- Bucket密码验证: 验证bucket访问密码
- 访问限制检查: 检查访问次数和过期时间
- 预签名URL生成: 生成临时访问链接
- 访问记录: 记录所有访问行为
密码安全特性
- 加密存储: MD5 + 盐值加密
- 盐值策略: 基于bucket名称的盐值
- 访问限制: 支持最大访问次数限制
- 过期机制: 支持密码过期时间设置
- 审计日志: 完整的访问记录
访问控制策略
- 启用状态: 可启用/禁用密码验证
- 过期时间: 支持密码过期设置
- 访问次数: 支持访问次数限制
- IP追踪: 记录访问者IP地址
- 用户代理: 记录浏览器信息
📊 技术实现细节
后端安全特性
- ✅ 密码验证: 基于MD5 + 盐值的密码验证
- ✅ 访问限制: 支持访问次数和过期时间限制
- ✅ 访问日志: 完整的访问行为记录
- ✅ IP追踪: 记录访问者IP地址
- ✅ 错误处理: 完善的异常处理机制
- ✅ 向后兼容: 密码为空时跳过验证
前端安全特性
- ✅ 密码参数: 支持bucket密码参数传递
- ✅ 密码验证: 前端密码格式验证
- ✅ 错误处理: 友好的错误提示
- ✅ 向后兼容: 保持现有接口兼容性
🚀 使用方式
1. 设置Bucket密码
-- 为ruoyi bucket设置访问密码
INSERT INTO sys_bucket_access_password (bucket_name, access_password, password_salt, is_active, max_access_count, create_by, tenant_id) VALUES
('ruoyi', 'e10adc3949ba59abbe56e057f20f883e', 'ruoyi_salt_2025', 1, 0, 1, 0);
2. 前端调用示例
// 带密码的文件下载
const { data: downloadUrl } = await getFileDownloadUrl(ossId, 'your_bucket_password')
// 带密码的文件预览
const { data: previewUrl } = await getFilePreviewUrl(ossId, 'your_bucket_password')
// 安全下载文件
await secureDownloadFile(ossId, fileName, 'your_bucket_password')
3. 密码管理
// 验证密码格式
const isValid = validateBucketPassword('your_password')
// 获取密码提示
const hint = getBucketPasswordHint('ruoyi')
⚠️ 注意事项
1. 密码安全
- 默认密码: 当前默认密码为
123456(MD5加密后) - 密码强度: 建议使用强密码,至少6位字符
- 定期更换: 建议定期更换bucket访问密码
2. 兼容性考虑
- 向后兼容: 密码参数为可选,不传密码时跳过验证
- 渐进式升级: 可以逐步为不同bucket启用密码验证
- 错误处理: 密码验证失败时返回友好错误信息
3. 性能考虑
- 密码验证: 每次文件访问都会进行密码验证
- 访问记录: 所有访问都会记录到数据库
- 缓存策略: 可以考虑缓存密码验证结果
📈 安全效果
安全层级
- 第一层: 用户身份验证(Sa-Token)
- 第二层: 文件权限检查
- 第三层: Bucket密码验证 ⭐ 新增
- 第四层: 预签名URL(临时有效)
- 第五层: 访问次数和过期限制
安全提升
- 额外保护: 在预签名URL基础上增加密码验证
- 访问控制: 支持访问次数和过期时间限制
- 审计能力: 完整的访问记录和审计功能
- 风险降低: 即使URL泄露,也需要密码才能访问
🔄 后续优化
1. 密码管理界面
- 🔄 添加bucket密码管理界面
- 🔄 支持密码重置和修改
- 🔄 密码强度检测
2. 访问监控
- 🔄 实时访问监控大屏
- 🔄 异常访问告警
- 🔄 访问统计分析
3. 安全增强
- 🔄 支持更安全的加密算法(如bcrypt)
- 🔄 支持多因素认证
- 🔄 支持IP白名单
📝 备注: 本次变更为MinIO文件存储增加了bucket密码验证层,在原有安全机制基础上提供了额外的保护。建议在测试环境充分验证后再部署到生产环境。