架构

对象存储 OSS 最佳实践:安全、成本与性能

OSS 用起来简单,但用好需要设计。本文覆盖权限与防盗链、生命周期降本、CDN 加速、跨域配置与常见安全风险防范。

  • 约 12 分钟
  • 更新于 2026-09-21
  • 7 个小节

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 使用就达到了生产级水准。

把教程里的配置真正跑起来

先领免费额度验证,再决定正式采购的规格与时长。