华为云对象存储 OBS 实战:从创建桶、上传下载、权限与防盗链到成本优化

举报
yd_287000593 发表于 2026/11/11 10:11:18 2026/11/11
【摘要】 本文以华为云对象存储 OBS 为例,按创建桶、上传下载、权限与防盗链、成本优化的顺序走完一次完整实战:从桶名与区域选择、三种上传方式与分段上传,到桶策略、IAM 最小权限与 Referer 防盗链,再到生命周期分层与碎片清理,附注意事项清单。

背景:对象存储适合存什么

图片、视频、备份文件、安装包、日志、静态网站资源,这类体量大、数量多、结构相对固定的非结构化数据,最适合放进对象存储。华为云对象存储服务 OBS(Object Storage Service)按量计费、容量近乎无限扩展,支持通过控制台、API、SDK 和命令行工具访问,常被用作网站图床、App 附件库、数据备份库和鸿蒙端云一体应用的云端文件层——例如云相册 App 的照片原图和缩略图,存 OBS 就比存在 ECS 磁盘里更便宜、更易扩展。

与 ECS 的云硬盘不同,OBS 不提供文件系统语义,没有目录树的真实层级:桶(Bucket)是顶层容器,对象(Object)是文件本体,键(Key)就是带“/”分隔的路径名。理解这一点,后面很多操作就顺了:所谓“文件夹”,只是按 Key 前缀做的展示。

本文按真实使用顺序,把一次完整的 OBS 上手过程走一遍:创建桶、上传下载、权限与防盗链、成本优化,并把容易踩的坑集中列在最后。

一、创建桶:先想好区域和存储类别

操作步骤

  1. 登录华为云控制台,进入对象存储服务 OBS,点击“创建桶”。
  2. 填写桶名:全局唯一,3–63 个字符,只能用小写字母、数字和连字符,且不能以连字符开头或结尾。建议用“业务-环境-用途”格式,例如 app-photos-prod。
  3. 选择区域:尽量选与业务服务器、用户群体同一个区域,例如应用部署在华北,桶也选华北,内网访问不走公网、延迟低且不收公网流量费。
  4. 选择存储类别:标准存储适合热数据;访问频率低的备份数据选低频访问存储;长期归档选归档存储或深度归档存储,单价更低但取回需要时间、取回要另外计费。
  5. 按需开启版本控制和服务端加密:版本控制能在误删、误覆盖后找回历史版本;加密建议开启,对象落盘即加密。
  6. 确认并创建,随后在桶列表里能看到新建的桶。

创建前要想清楚的三件事

  • 区域和桶名创建后不能改:区域选错只能新建桶再迁移数据;桶名被占用或命名不规范,只能换一个名字重建。
  • 存储类别不是越便宜越好:归档存储取回慢、取回贵,只适合确实很少访问的冷数据;热数据放归档反而多花钱。
  • 默认权限保持私有:新建桶默认是私有的,之后再按需放开某个目录的读权限,不要一开始就设成公共读写。

二、上传与下载:三种方式按场景选

1. 控制台网页上传:适合少量、临时文件

进入桶后点击“上传对象”,拖入文件即可。优点是零学习成本,缺点是批量、大文件时不稳定,浏览器关掉就中断。

2. OBS Browser+ 图形工具:适合日常批量管理

华为云提供的 OBS Browser+ 支持批量上传下载、断点续传、文件夹同步,适合运营同学日常搬运图片、备份包。上传前先在本地按日期、业务分子目录,同步后 Key 结构清晰,也方便以后按前缀做生命周期和权限。

3. obsutil 命令行和 SDK:适合脚本、CI 和程序接入

批量、定时、程序化场景用命令行或 SDK。obsutil 是华为云对象存储命令行工具,常用命令如下:

# 上传单个文件到桶
obsutil cp ./report.pdf obs://app-photos-prod/reports/
# 递归上传整个目录
obsutil cp ./images obs://app-photos-prod/images/ -r
# 查看桶内对象
obsutil ls obs://app-photos-prod/images/
# 下载对象到本地
obsutil cp obs://app-photos-prod/reports/report.pdf ./ -r

在程序里调用时,用 OBS SDK 直接读写对象。以 Python SDK 为例,上传一个对象只需要几行代码:

from obs import ObsClient

ak = "你的 AK"        # 建议从环境变量或凭据管理读取,不要写死在代码里
sk = "你的 SK"
server = "https://obs.cn-north-4.myhuaweicloud.com"

client = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
resp = client.putFile("app-photos-prod", "images/2026-11-11/photo.jpg",
                      file_path="./photo.jpg")
print(resp.status)   # 200 表示上传成功
client.close()

大文件上传:分段上传 + 断点续传

单个对象最大可到 48.8TB,但建议超过 100MB 就用分段上传:SDK 和 Browser+ 都会把大文件切成多个分段并行上传,某个分段失败只需重传该分段。网络不稳定的环境,一定要确认工具开启了断点续传,否则几 GB 的备份包传到 99% 断开又要重来。

下载:公开读与临时授权要分开

  • 公开读的对象,任何人用对象 URL 就能下载,适合公开图片、静态资源。
  • 私有对象不要改成公开来分享,正确做法是生成带签名的临时 URL(预签名 URL):指定过期时间,过期自动失效,既能让外部用户下载,又不会长期暴露。
  • 批量导出备份时,用 obsutil 递归下载,并校验文件大小或 ETag,避免静默损坏。

三、权限管理与防盗链:默认私有是底线

OBS 的权限分三层,从粗到细分别是桶 ACL、桶策略和 IAM 用户权限,日常按“最小权限”原则组合使用。

1. 桶 ACL:只做最粗的开关

桶 ACL 只有私有、公共读、公共读写几档。公共读意味着所有人可下载;公共读写意味着任何人可上传、删除,极其危险。生产桶应始终保持私有,只在明确需要公开访问的静态资源桶上开公共读。

2. 桶策略:按条件精细放行

桶策略是用 JSON 描述的规则,可以按账号、IP、Referer、时间等条件放行或拒绝。例如只允许公司出口 IP 下载某个目录、只允许某个 IAM 用户读写备份目录。配置前先在测试桶验证策略生效,再应用到生产桶,改完立即用匿名访问和另一账号分别验证“该放行的放行、该拒绝的拒绝”。

3. IAM 用户:给人、给程序分别授权

不要把主账号的 AK/SK 发给所有人或写进前端代码。正确做法是:

  • 给运维人员建 IAM 用户,只授予 OBS 的管理权限;
  • 给应用程序建专用的 IAM 用户或委托,只授予指定桶的读写权限;
  • 给临时协作者发临时 AK/SK 或预签名 URL,用完即废。

4. 防盗链:别让别人白嫖你的流量

图片、视频类公开资源最容易被盗链:别人把你的对象 URL 嵌进他的网页,流量费算在你头上。OBS 支持防盗链配置:

  1. 在桶设置里开启防盗链,填写允许的 Referer 白名单,即自己的域名,如 *.example.com。
  2. 空 Referer 是否放行要想好:直接访问图片、部分 App 内嵌请求可能不带 Referer,一律拦截会影响正常使用,建议先放行空 Referer 观察一段时间。
  3. 结合 CDN 使用时,防盗链规则要在 CDN 侧也同步配置,否则回源链路会被误拦。

防盗链不是加密,懂行的请求者可以伪造 Referer;真正敏感的文件不要靠防盗链保护,一定要用私有桶加签名 URL。

四、成本优化:存储费、请求费、流量费分开算

OBS 的账单主要由三部分组成,优化要对症下药。

1. 存储费:用生命周期做冷热分层

数据越放越冷是常态,靠人工定期搬运不现实,用生命周期规则自动流转:

  • 新上传的热数据放在标准存储;
  • 30 天无人访问后自动转低频访问存储;
  • 90 天后转归档存储;
  • 历史版本和过期日志到期自动删除。

配置时注意最小存储时长:低频、归档类存储一般有最短存储期限,提前删除仍按最短期限计费,频繁更新的热文件不要过早转冷。

2. 碎片清理:别让失败的分段上传一直占空间

分段上传中途失败或取消后,未完成的分段会一直占用存储空间并计费。在桶的生命周期规则里开启“删除未完成的分段上传”,例如 7 天后自动清理,能长期省下一笔不小的费用。

3. 流量费:内网走内网,热点走 CDN

  • ECS 与 OBS 在同一区域时走内网域名访问,不收公网流量费,也更快。
  • 对外分发图片、视频、安装包时,前面挂 CDN:用户命中 CDN 缓存后不再回源到 OBS,既省了 OBS 的流出流量费,访问速度也更好。
  • 跨区域复制、回源流量会产生费用,跨区域同步前先评估量级。

4. 请求费与监控:小钱也要看得见

GET、PUT 等请求按次数计费,单价很低,但高频轮询、死循环重试、日志海量小文件写入都可能把请求量推高。做法是:程序里对不存在的对象做缓存、失败重试加退避上限;同时在云监控里看桶的存储量、请求数和流量趋势,设置用量告警,异常增长第一时间收到通知。

五、注意事项清单

  • 桶名全局唯一:命名前先确认未被占用,重要业务桶尽早创建占位。
  • 删除桶之前先清空:桶内有对象、历史版本或未完成分段时删不掉,要先清空再删除;开版本控制的桶,删除对象只产生删除标记,历史版本仍在计费,需要生命周期或手动清理。
  • 跨域访问要配 CORS:浏览器端 JS 直接上传、下载 OBS 对象时,须在桶上配置跨域规则,否则浏览器会被拦截;规则按域名、方法最小化配置。
  • 开启访问日志:把访问日志存到专门的日志桶,出问题时能按时间、IP、对象追溯,也方便审计盗链和异常下载。
  • AK/SK 是最高机密:不要写进前端代码、不要提交到代码仓、定期轮换;泄露后立即在控制台禁用并重新生成。
  • 先验证再推广:权限、生命周期、防盗链这类配置,改动前先在测试桶验证,生产桶改完要做正反两向验证,并保留回滚步骤。

小结

用好 OBS 的关键只有四句话:创建桶时想好区域、命名和存储类别;上传下载按场景选工具,大文件走分段上传;权限默认私有、按最小权限放行,公开资源用防盗链加签名 URL 兜底;成本靠生命周期分层、碎片清理和 CDN 分发持续优化。把这四件事做扎实,一个桶从几 MB 用到几 TB 都能保持安全、可控、不超支。下一步可以试着把本文的步骤在自己的测试桶里完整走一遍:创建一个桶、上传一张图片、生成一个 1 小时有效的签名 URL、再配一条 30 天转低频的生命周期规则,半小时就能对 OBS 建立起完整的手感。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。