☁ 对象存储最佳实践这两天学习的心得1 核心概念速查术语一句话解释Bucket存储桶最顶层的容器类似硬盘分区Object / Key存储的文件用路径字符串Key唯一标识AK / SK访问密钥对相当于账号密码绝不能泄露预签名 URL后端用 SK 签名生成的带时限临时访问链接SAS TokenAzure 叫法和预签名 URL 本质一样Bucket Policy桶级别的访问策略控制谁能做什么操作CORS跨域配置浏览器直传时必须正确配置CDN内容分发网络公开文件加速利器省流量费TTL预签名 URL 的有效时间过期自动失效2 URL 怎么存只存 Key不存完整 URL✅ 正确做法数据库只存Bucket Key例如avatars/user_123/photo.jpg对外暴露时按场景动态拼接或生成 URL公开文件 → 拼 CDN 域名私有文件 → 生成预签名 URL❌ 禁止做法不要把预签名 URL 存入数据库带 TTL过期即 404不要存带域名的完整路径换域名时历史数据全部报废为什么Key 是永久的域名和签名都是会变的。Key 存一次URL 每次动态生成灵活且安全。3 权限记住这三层优先级层级作用第一层IAM / AK·SK账号级身份认证控制谁能调用 API第二层Bucket Policy桶级策略控制路径前缀、操作类型、来源 IP第三层Object ACL单文件覆盖优先级最高尽量少用关键原则Bucket 默认设为Private不要图省事设成 Public公开内容头像、商品图单独用一个 Bucket 或路径前缀AK/SK绝不出现在前端代码和 Git 仓库生产环境用实例角色Instance Role / RAM Role做到密钥不落地CORS 的AllowedOrigin不要写*精确到业务域名4 预签名 URL / SAS最常用的临时授权各厂商叫法对照厂商叫法过期参数AWS S3Presigned URLX-Amz-Expires秒Azure BlobSAS Tokense过期时间戳sig阿里云 OSS签名 URLExpiresUnix 时间戳Google GCSSigned URLX-Goog-Expires秒工作流程客户端向业务后端请求授权后端用 SK 签名生成带时限的 URL 返回给客户端客户端拿到 URL 直接与 OSS 通信上传或下载后端不再转发文件省带宽、省服务器资源常见坑⚠️时钟偏差服务器和 OSS 时间不同步会导致签名立即失效确保 NTP 同步TTL 留足 buffer。⚠️Content-Type 不一致PUT 直传时前端请求头的Content-Type必须与签名时一致否则 403。⚠️URL 泄露无法撤销预签名 URL 本质是公开的拿到就能访问。不能依赖它做细粒度的人员权限控制。5 TTL有效期怎么定场景推荐 TTL说明用户上传PUT5 15 分钟越短越安全够用即可文件预览 / 下载15 分钟 1 小时按用户操作时长估算邮件 / 分享链接1 7 天需配合业务层吊销机制公开静态资源不设 TTL走 CDN 永久 URL不用签名黄金原则TTL 太短 用户体验差TTL 太长 泄露风险大。按场景卡最短够用的值。6 直传 vs 代理传怎么选方式优点适用场景直传Client → OSS省带宽、服务器压力小头像、普通文档等低敏文件代理传Client → Server → OSS可审查内容、更安全合同、医疗、高敏感文件实践建议两者结合使用。小文件、低敏感度 → 直传高安全要求 → 代理传。7 高频踩坑速查问题等级解决方案前端代码含 AK/SK 严重立刻轮换密钥改用后端签名或实例角色CORS 没配 AllowedOrigin 常见浏览器直传报跨域错误精确配置来源域名ETag 未在 Expose-Headers 里 常见前端拿不到上传后的文件指纹加上即可公开文件用预签名 URL 成本请求全部打到 OSS Origin费用暴增改走 CDN数据库存完整预签名 URL 设计TTL 过期即 404改存 Key动态生成 URL文件名未加 hash/版本号 缓存CDN 缓存旧文件内容更新但 URL 不变不生效Bucket 全局 Public Read 严重任何人可遍历所有文件立刻改为 Private上传后未校验文件类型 安全服务端签名前检查扩展名和 MIME 类型8 上线前决策清单数据库存的是 Key不是完整 URLAK/SK 没有硬编码在代码或配置文件里Bucket 默认 Private公开内容单独隔离CORSAllowedOrigin配置了精确域名ETag在Expose-Headers中暴露各场景的 TTL 按最短够用值设置高敏文件走代理传普通文件走直传公开静态资源走 CDN不用预签名 URL文件名包含 hash 或版本避免 CDN 缓存问题上传完成后有服务端校验类型、大小、病毒扫描✅记住一句话AK/SK 不落地Key 进库URL 动态生成公开走 CDN私有用签名TTL 越短越好。