OSS 是上云最常用的存储服务,但「能用」和「用好」之间差距很大。这篇文章总结 OSS 在生产环境中的最佳实践,重点是安全与成本。
一、权限设计:不要用公共读
很多教程为了简单直接建议把 Bucket 设为「公共读」。这在生产环境是危险的——一旦被扫描到,Bucket 内所有文件都可被任意下载,且会产生大量流量费用。
正确做法:
- 私有 Bucket + 签名 URL:默认全部私有,需要访问时由后端生成带签名的临时 URL(有效期可设几分钟到几小时)。这是最安全的方案。
- 公共读仅用于纯静态资源:如网站 logo、公开的图片。即便如此也应配合 Referer 防盗链。
- RAM 精细化授权:给不同应用分配不同的 RAM 角色,只授予其需要的 Bucket 与操作权限。绝不要在代码中硬编码主账号 AK。
二、防盗链:防止流量被白嫖
即使 Bucket 是公共读,也必须配置防盗链,否则任何网站都可以直接引用你的 OSS 资源,流量费用由你承担。
配置方式:
- Referer 白名单:只允许你自己的域名引用,其余返回 403。
- 允许空 Referer:如果需要支持用户直接在浏览器打开链接,需允许空 Referer(但这会降低防护效果)。
- 签名 URL:对敏感资源使用签名 URL,从根本上杜绝盗链。
还要配置流量告警:在云监控中对 OSS 的外网流出流量设置阈值告警,一旦异常激增立即通知。这是应对刷流量的最后一道防线。
三、生命周期:让冷数据自动降本
OSS 的五种存储类型价格相差 8 倍以上,而多数业务的数据访问呈现明显的「热-冷」分布:上传后一周内频繁访问,之后访问频率急剧下降。
配置生命周期规则的典型策略:
| 时间 | 操作 | 存储类型 | 单价(元/GB/月) |
|---|---|---|---|
| 0–30 天 | 标准存储 | 标准型 | 0.12 |
| 30–90 天 | 自动转低频 | 低频访问型 | 0.08 |
| 90–180 天 | 自动转归档 | 归档型 | 0.033 |
| 180 天以上 | 转冷归档或删除 | 冷归档型 | 0.015 |
对备份、日志、历史附件这类数据,这套策略通常能降低 70% 以上的存储成本,且完全自动执行。
四、CDN 加速:既提速又省钱
OSS 的外网流出流量单价约 0.50 元/GB,而 CDN 流量单价通常更低(0.24 元/GB 起)。因此把 OSS 作为 CDN 源站,不仅让用户访问更快,成本也更低。
配置要点:
- 回源 Host:设置为 OSS 的 Bucket 域名。
- 缓存规则:图片、视频等静态资源设置长缓存(如 30 天),HTML 等易变内容设置短缓存或不缓存。
- 回源流量:CDN 回源到 OSS 的流量单价低于公网流出,进一步降低成本。
五、跨域(CORS)配置
如果前端 JavaScript 需要直接上传文件到 OSS,或从 OSS 读取资源,必须配置 CORS 规则,否则浏览器会拦截请求。
配置要点:
- 来源(AllowedOrigin):只填写你自己的域名,不要图省事写
*。 - 方法(AllowedMethod):按需开放,只上传就只开 PUT/POST。
- 暴露 Headers:需要前端读取 ETag 等响应头时要显式暴露。
前端直传 OSS 的正确做法是:后端生成临时 STS 凭证或签名 Policy 给前端,前端用该凭证直传,避免把长期密钥暴露在浏览器中。
六、数据保护
- 版本控制:开启后误删或误覆盖可以恢复历史版本。适合存放重要数据的 Bucket。
- 跨区域复制:把数据异步复制到另一地域的 Bucket,实现异地容灾。
- 同城冗余:使用同城冗余存储类型,数据在多个可用区冗余,提升本地容灾能力。
- WORM 合规保留:金融、医疗等需要满足合规留存要求的场景,可开启一次写入多次读取策略,防止数据被篡改或删除。
七、常见风险清单
- ❌ Bucket 设为公共读且无防盗链 → 流量被盗刷
- ❌ AK 硬编码在前端代码 → 密钥泄露,Bucket 被清空
- ❌ 未配置生命周期 → 冷数据长期按标准型计费
- ❌ 未配置流量告警 → 被刷流量后才发现
- ❌ 直接删除而非通过生命周期 → 无法追溯且不可恢复
- ❌ 静态资源不经 CDN → 流量成本高且访问慢
把这七项检查一遍,你的 OSS 使用就达到了生产级水准。