华为云对象存储 OBS 实战:从创建桶、上传下载、权限与防盗链到成本优化
背景:对象存储适合存什么
图片、视频、备份文件、安装包、日志、静态网站资源,这类体量大、数量多、结构相对固定的非结构化数据,最适合放进对象存储。华为云对象存储服务 OBS(Object Storage Service)按量计费、容量近乎无限扩展,支持通过控制台、API、SDK 和命令行工具访问,常被用作网站图床、App 附件库、数据备份库和鸿蒙端云一体应用的云端文件层——例如云相册 App 的照片原图和缩略图,存 OBS 就比存在 ECS 磁盘里更便宜、更易扩展。
与 ECS 的云硬盘不同,OBS 不提供文件系统语义,没有目录树的真实层级:桶(Bucket)是顶层容器,对象(Object)是文件本体,键(Key)就是带“/”分隔的路径名。理解这一点,后面很多操作就顺了:所谓“文件夹”,只是按 Key 前缀做的展示。
本文按真实使用顺序,把一次完整的 OBS 上手过程走一遍:创建桶、上传下载、权限与防盗链、成本优化,并把容易踩的坑集中列在最后。
一、创建桶:先想好区域和存储类别
操作步骤
- 登录华为云控制台,进入对象存储服务 OBS,点击“创建桶”。
- 填写桶名:全局唯一,3–63 个字符,只能用小写字母、数字和连字符,且不能以连字符开头或结尾。建议用“业务-环境-用途”格式,例如
app-photos-prod。 - 选择区域:尽量选与业务服务器、用户群体同一个区域,例如应用部署在华北,桶也选华北,内网访问不走公网、延迟低且不收公网流量费。
- 选择存储类别:标准存储适合热数据;访问频率低的备份数据选低频访问存储;长期归档选归档存储或深度归档存储,单价更低但取回需要时间、取回要另外计费。
- 按需开启版本控制和服务端加密:版本控制能在误删、误覆盖后找回历史版本;加密建议开启,对象落盘即加密。
- 确认并创建,随后在桶列表里能看到新建的桶。
创建前要想清楚的三件事
- 区域和桶名创建后不能改:区域选错只能新建桶再迁移数据;桶名被占用或命名不规范,只能换一个名字重建。
- 存储类别不是越便宜越好:归档存储取回慢、取回贵,只适合确实很少访问的冷数据;热数据放归档反而多花钱。
- 默认权限保持私有:新建桶默认是私有的,之后再按需放开某个目录的读权限,不要一开始就设成公共读写。
二、上传与下载:三种方式按场景选
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 支持防盗链配置:
- 在桶设置里开启防盗链,填写允许的 Referer 白名单,即自己的域名,如
*.example.com。 - 空 Referer 是否放行要想好:直接访问图片、部分 App 内嵌请求可能不带 Referer,一律拦截会影响正常使用,建议先放行空 Referer 观察一段时间。
- 结合 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 建立起完整的手感。
- 点赞
- 收藏
- 关注作者
评论(0)