华为云对象存储服务OBS从入门到精通:全面对接与实战指南
1. 华为云对象存储服务OBS概览
对象存储服务(Object Storage Service,OBS)是华为云提供的一种基于对象的云存储服务。它具备海量、安全、高可靠、低成本的数据存储能力,适用于网站托管、大数据分析、备份归档、视频监控、移动应用等多种场景。OBS以桶(Bucket)作为存储数据的容器,用户可以将任意类型的文件(对象)上传至桶中,并通过HTTP/HTTPS协议进行访问和管理。
与传统的文件系统不同,OBS采用扁平化的数据结构,每个对象通过唯一的键(Key)进行标识,没有目录层级的概念(但可以通过模拟路径的方式组织)。这种设计使得OBS能够轻松扩展至PB级甚至EB级数据规模,同时保持极高的读写性能。OBS支持标准存储、低频访问存储、归档存储和深度归档存储四种存储类别,用户可以根据数据的访问频率和时效性要求灵活选择,从而实现存储成本与性能的最佳平衡。
在开始使用OBS之前,您需要一个已实名认证的华为云账号。新用户通常可以享受一定的免费试用额度,包括一定量的标准存储空间、请求次数和外网下行流量,具体优惠政策以华为云官网公布为准。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. 开通OBS服务与创建Bucket
2.1 开通服务
登录华为云管理控制台后,在页面左上角点击服务列表,选择"存储"分类下的"对象存储服务 OBS",进入OBS控制台。首次使用时,系统会提示开通服务,按照页面指引完成开通操作即可。OBS默认为按需计费模式,即根据实际使用的存储容量、请求次数和流量进行计费,不设最低消费标准,非常适合初期试水或流量波动较大的业务。
2.2 创建Bucket
Bucket(桶)是OBS中存储对象的容器,所有的文件都必须归属于某个桶。在OBS控制台点击"创建桶"按钮,进入配置页面。创建桶时需要关注以下几个核心参数:
- 区域:选择靠近您业务部署位置的区域,可以有效降低网络延迟并节省流量费用。桶创建成功后区域不可变更,请谨慎选择。
- 桶名称:全局唯一,不能与任何已有桶名称重复。命名规则为3-63个字符,仅支持小写字母、数字、中划线(-)和英文句号(.)。删除桶后需等待30分钟才能创建同名桶。
- 数据冗余存储策略:可选择多AZ存储或单AZ存储。多AZ存储将数据分散存储在同区域多个可用区,可靠性更高(99.995%),但存储成本也相对更高;单AZ存储成本更低,适用于对可用性要求不高的场景。
- 存储类别:标准存储适用于频繁访问的热数据;低频访问存储适用于不频繁访问(平均一年少于12次)但需快速获取的数据;归档存储和深度归档存储适用于长期保存、访问频率极低的数据。不同存储类别的单价和最低存储时长不同,低频访问存储最低30天,归档存储最低90天。
- 桶策略:推荐选择"私有",即只有桶拥有者或经过授权的用户才能访问。后续可根据需要单独为特定对象生成临时分享链接或配置更细粒度的权限。
配置完成后点击"立即创建",一个专属的存储桶就诞生了。
3. 多种方式上传文件到OBS
华为云OBS提供了丰富的文件上传方式,满足不同场景下的使用需求。
3.1 控制台上传
最直观的方式是通过OBS控制台上传。进入桶的"对象"页面,点击"上传对象"按钮,可以将本地文件拖拽至上传区域,或通过文件选择器选取文件。控制台支持单次上传单个文件(最大5GB)或批量上传最多100个文件(总大小不超过5GB)。这种方式适合少量文件的手动操作,不适用于自动化场景。
3.2 OBS Browser+图形化工具
OBS Browser+是华为云官方提供的图形化客户端工具,支持Windows、Mac等主流操作系统。它提供了比控制台更强大的文件管理功能,包括批量上传下载、文件夹同步、断点续传等。使用前需要先下载安装OBS Browser+,然后使用华为账号的访问密钥(AK/SK)登录。登录后即可像操作本地文件系统一样管理OBS中的文件和文件夹。OBS Browser+支持的有效期最长可达1年,适合需要长期管理大量文件的运维人员。
3.3 obsutil命令行工具
obsutil是华为云OBS的命令行工具,支持Windows、Linux和macOS平台。它适合在脚本和自动化部署中使用,可以实现批量上传、下载、同步、删除等操作。使用前需要下载obsutil并完成初始化配置,包括设置AK/SK和默认的Endpoint。初始化完成后,可以通过命令行快速执行各种OBS操作,例如:
# 上传单个文件
obsutil cp /local/path/file.txt obs://bucket-name/path/
# 同步整个目录
obsutil sync /local/folder/ obs://bucket-name/folder/3.4 Python SDK编程方式
对于需要将OBS集成到应用程序中的开发者,SDK是最佳选择。华为云OBS提供了Python、Java、Go、Node.js等多种语言的SDK。下面以Python SDK为例,详细介绍如何通过编程方式对接OBS。
3.4.1 安装SDK
pip install esdk-obs-python3.4.2 初始化OBS客户端
向OBS发送任何HTTP/HTTPS请求之前,必须先创建一个ObsClient实例。AK/SK是访问OBS的身份凭证,建议通过环境变量获取而非硬编码在代码中,以避免密钥泄露风险。
import os
from obs import ObsClient
# 推荐通过环境变量获取AKSK
ak = os.getenv("AccessKeyID")
sk = os.getenv("SecretAccessKey")
# server填写桶所在区域的Endpoint
# 例如华北-北京四: https://obs.cn-north-4.myhuaweicloud.com
server = "https://obs.cn-north-4.myhuaweicloud.com"
# 创建ObsClient实例
obs_client = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
# 使用完毕后关闭客户端
# obs_client.close()如果使用临时访问密钥(AK/SK + SecurityToken),可以在创建实例时传入security_token参数。临时密钥具有时效性,安全性更高,适合需要临时授权的场景。
3.4.3 创建桶
from obs import CreateBucketHeader, HeadPermission
bucket_name = "my-example-bucket-2026"
# 创建私有桶,存储类型为标准存储
try:
resp = obs_client.createBucket(
bucket_name,
header=CreateBucketHeader(
acl=HeadPermission.PRIVATE,
storageClass="STANDARD"
)
)
if resp.status < 300:
print(f"桶 {bucket_name} 创建成功")
else:
print(f"创建失败: {resp.errorCode}")
except Exception as e:
print(f"异常: {e}")桶是OBS的全局命名空间,相当于数据的容器和文件系统的根目录。上述代码创建了一个名为my-example-bucket-2026的私有桶,存储类型为标准存储。
3.4.4 上传对象
OBS Python SDK支持多种上传方式,包括流式上传、文件上传、分段上传等。对于小于5GB的文件,可以使用流式上传或文件上传;对于大文件,推荐使用分段上传以提高可靠性和性能。
# 文件上传 - 上传本地文件到OBS
bucket_name = "my-example-bucket-2026"
object_key = "folder/document.pdf"
local_file_path = "/local/path/document.pdf"
try:
resp = obs_client.putFile(bucket_name, object_key, local_file_path)
if resp.status < 300:
print(f"文件上传成功: {object_key}")
else:
print(f"上传失败: {resp.errorCode}")
except Exception as e:
print(f"异常: {e}")流式上传适用于数据来源为内存流或网络流的场景,例如从数据库读取的二进制数据或实时生成的报表。
# 流式上传 - 上传字节数据
from io import BytesIO
data = b"Hello, Huawei Cloud OBS!"
stream = BytesIO(data)
try:
resp = obs_client.putContent(bucket_name, "hello.txt", stream)
if resp.status < 300:
print("流式上传成功")
else:
print(f"上传失败: {resp.errorCode}")
except Exception as e:
print(f"异常: {e}")3.4.5 下载对象
# 下载对象到本地文件
bucket_name = "my-example-bucket-2026"
object_key = "folder/document.pdf"
local_download_path = "/local/path/downloaded.pdf"
try:
resp = obs_client.getFile(bucket_name, object_key, local_download_path)
if resp.status < 300:
print(f"文件下载成功: {local_download_path}")
else:
print(f"下载失败: {resp.errorCode}")
except Exception as e:
print(f"异常: {e}")4. 访问控制与安全配置
4.1 私有桶的临时签名URL
对于设置为"私有"权限的桶,直接通过URL访问对象会被拒绝。此时需要通过生成带签名的临时URL来实现授权访问。临时URL在Query参数中携带鉴权信息,包括AccessKeyId、Expires、Signature等。生成URL时需要指定有效期(Expires),过期后URL将自动失效。OBS控制台默认提供5分钟有效期的分享链接,而通过SDK可以自定义有效期长度。
以下是通过Python SDK生成临时签名URL的示例:
import os
from obs import ObsClient
ak = os.getenv("AccessKeyID")
sk = os.getenv("SecretAccessKey")
server = "https://obs.cn-north-4.myhuaweicloud.com"
obs_client = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
bucket_name = "my-example-bucket-2026"
object_key = "folder/document.pdf"
# 生成有效期3600秒(1小时)的GET请求签名URL
resp = obs_client.createSignedUrl(
method='GET',
bucketName=bucket_name,
objectKey=object_key,
expires=3600
)
if resp.status < 300:
print(f"临时访问URL: {resp.signedUrl}")
else:
print(f"生成失败: {resp.errorCode}")通过临时URL可以执行的操作不仅限于下载,还包括上传、列举、删除等多种操作。例如,生成PUT方法的签名URL可以授权他人直接上传文件到指定位置。
4.2 自定义域名与CDN加速
默认情况下,OBS对象的访问域名格式为 https://bucket-name.obs.region.myhuaweicloud.com/object-key。为了提升品牌形象和访问体验,可以将自定义域名(如 static.yourdomain.com)绑定到OBS桶。绑定后需要在DNS服务商处添加CNAME记录,将自定义域名指向OBS提供的域名。
如果您的业务面向全球用户或需要频繁访问静态资源,建议开启CDN加速。CDN将内容缓存到遍布全球的边缘节点,用户访问时从最近的节点获取数据,显著降低延迟并减少源站OBS的出流量费用。在OBS控制台为桶绑定加速域名后,CDN会自动配置源站信息。需要注意的是,开启CDN加速后会产生CDN流量费用和OBS回源流量费用。回源流量仅支持OBS 3.0版本的桶。
4.3 防盗链配置
为了防止其他网站盗用您存放在OBS中的资源链接(即"盗链"),OBS支持基于HTTP Referer字段的防盗链机制。您可以在桶的"数据安全 > 防盗链"页面配置白名单或黑名单。白名单模式只允许来自指定网站的请求访问资源,黑名单模式则禁止来自指定网站的请求。通过合理配置防盗链,可以有效防止流量盗刷,降低不必要的费用支出。
4.4 IAM权限最小化管理
默认情况下,新建的IAM用户没有任何OBS权限。为了满足企业对权限最小化的安全管控要求,应使用基于策略的细粒度授权方式。管理员可以精确控制IAM用户仅能对特定桶或特定对象执行特定操作。例如,可以创建一个只允许上传文件到指定桶、但不能删除或列举其他桶的策略。
OBS提供了多个系统策略:
- OBS Administrator:拥有账号下所有OBS资源的完全操作权限。
- OBS ReadOnlyAccess:拥有列举桶、获取桶信息、列举对象的只读权限。注意如果桶中存在多版本对象,需要额外授予
obs:bucket:ListBucketVersions权限才能在控制台正常查看对象列表。 - OBS OperateAccess:在只读权限基础上增加了上传、下载、删除对象等基本操作权限。
权限变更后由于缓存机制,大约需要等待10-15分钟才能生效。建议在实际生产环境中为不同角色创建独立的IAM用户并授予最小必要权限,避免使用主账号AK/SK进行日常操作。
5. 生命周期管理与存储成本优化
5.1 生命周期规则
随着业务运行时间的增长,OBS桶中的数据会不断累积,其中很大一部分可能是长期不被访问的冷数据。如果全部以标准存储保存,会产生较高的存储费用。OBS的生命周期管理功能可以帮助您自动管理数据的"生老病死"。
生命周期规则基于对象的"最后修改时间"触发,支持两种核心操作:
- 存储类别转换:将对象从标准存储自动转换为低频访问存储、归档存储或深度归档存储。例如,可以设置规则:30天未访问的对象转为低频访问存储,90天后转为归档存储。
- 对象过期删除:在指定时间后自动删除对象,适用于日志、临时文件等有明确生命周期的数据。
配置生命周期规则时,可以按前缀(如 logs/)或整个桶进行筛选。转换存储类别时,OBS在不复制原对象的情况下直接修改其存储类别。但需要注意的是,归档存储和深度归档存储不支持多AZ,因此多AZ桶中的对象无法通过生命周期转换为归档或深度归档存储。
5.2 成本优化实战策略
OBS的按量计费主要由三部分构成:存储费用(按存储容量和时长计费)、请求费用(按API调用次数计费)和流量费用(外网下行流量和跨区域复制流量等)。以下策略可以有效控制成本:
策略一:善用内网访问免流量。如果您的应用部署在华为云弹性云服务器(ECS)上,且ECS与OBS桶位于同一区域,那么ECS访问OBS所产生的流量全部免费。这是最直接、最有效的成本节省方式,建议将业务应用与OBS部署在同一区域。
策略二:合理选择存储类别。根据数据的访问频率选择合适的存储类别。对于需要频繁访问的热数据使用标准存储;对于不常访问但需要快速读取的温数据使用低频访问存储;对于长期归档的冷数据使用归档或深度归档存储。注意低频访问存储有最短30天的存储周期,如果提前删除或转换存储类别,需要补足剩余天数的费用。
策略三:配置生命周期自动转换。通过生命周期规则实现数据存储类别的自动降冷,避免人工干预的遗漏和延迟。
策略四:监控外网流量防止盗刷。通过云监控服务(Cloud Eye)实时监控OBS的流量和请求指标。云监控服务会在用户创建OBS桶后自动启动。如果发现异常流量激增,应及时检查防盗链配置或调整桶策略。
策略五:使用资源包预付费。对于用量稳定的业务,可以购买OBS资源包(存储包、流量包、请求包),资源包采用预付费模式,单价通常低于按需计费。
6. 监控与告警
OBS集成了华为云云监控服务(Cloud Eye),可以实时监控桶的各类指标。您可以查看的监控指标包括存储用量、上传流量、下载流量、各类请求次数(GET、PUT、DELETE等)、错误响应数量等。通过设置告警规则,当指标超过阈值时(如外网流量突增、错误率升高等),系统可以通过短信、邮件等方式通知运维人员,帮助及时发现问题并采取措施。
7. 常见问题解答
问:OBS中的文件可以永久公开访问吗?
可以。有两种方式:一是将桶策略设置为"公共读",此时桶内所有对象均可被匿名用户访问;二是仅将特定对象的ACL设置为公共读,其他对象保持私有。不过出于安全考虑,生产环境建议保持桶私有,通过生成临时签名URL来实现有时效性的分享。
问:上传到OBS的文件大小有限制吗?
单个对象最大支持48.8TB。通过控制台上传单个文件最大5GB,批量上传最多100个文件且总大小不超过5GB。超过5GB的大文件需要使用SDK的分段上传接口或obsutil工具。
问:如何在不同华为云账号之间迁移OBS数据?
可以使用对象存储迁移服务(OMS)或obsutil工具实现跨账号、跨区域的数据复制。OMS提供了图形化界面,配置源端和目标端的访问密钥及桶信息后即可创建迁移任务。
问:OBS支持静态网站托管吗?
支持。将静态网站文件(HTML、CSS、JS等)上传到OBS桶,设置文件为公共读权限,然后在桶的"基础配置 > 静态网站托管"中开启托管功能并配置索引页和错误页。绑定自定义域名后就可以通过自己的域名访问静态网站了。
问:删除OBS桶中的文件后,存储费用还会继续产生吗?
文件删除后即刻停止对该文件的存储计费。但低频访问存储和归档存储有最低存储时长要求(分别为30天和90天),如果文件在未满最低时长时被删除或覆盖,需要补足剩余天数的存储费用。
问:OBS的AK/SK在哪里获取?
登录华为云控制台,进入"我的凭证"页面,在"访问密钥"模块中点击"新增访问密钥"即可生成AK/SK。每个用户最多可创建两个有效的永久访问密钥。为安全起见,建议定期更换密钥,或在需要临时授权的场景下使用临时访问密钥。




