华为云对象存储服务OBS对接使用全攻略:从开通到成本优化
一、认识华为云对象存储服务OBS
对象存储服务(Object Storage Service,OBS)是华为云提供的一种海量、安全、高可靠、低成本的云存储服务。与传统的文件系统不同,OBS采用扁平化的存储结构,所有数据都以对象的形式存储在桶(Bucket)中,去除了多层级树形目录结构。这种设计使得OBS能够轻松应对EB级别的数据存储需求,广泛应用于企业备份归档、视频点播、大数据分析、静态网站托管等场景。
OBS的核心概念包括桶和对象。桶是存储对象的容器,类似于文件系统中的根目录,每个桶都有自己的存储类别、访问权限和所属区域等属性。对象则是OBS中存储的基本数据单元,可以是任何类型的文件——文本、图片、视频、备份数据等。对象由对象键(Key)和对象数据两部分组成,对象键是对象在桶中的唯一标识。
OBS提供了四种存储类别以满足不同业务场景的需求:标准存储适用于频繁访问的热点数据,访问时延低、吞吐量高;低频访问存储适用于不频繁访问(平均一年少于12次)但需要快速获取的数据;归档存储适用于很少访问(平均一年一次)的数据归档和长期备份场景;深度归档存储则针对极冷数据提供了更低的存储成本。用户可以在创建桶时指定存储类别,也可以在上传对象时为单个对象单独指定。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
二、开通OBS服务与准备工作
2.1 开通服务
使用OBS之前,需要先拥有一个华为云账号并完成实名认证。登录华为云官网后,在服务列表中选择"存储"分类下的"对象存储服务 OBS",进入OBS控制台页面。首次使用时,系统会提示开通服务,按照页面指引完成开通操作即可。新用户通常可以享受一定额度的免费试用资源,具体政策以华为云官网公布为准。
2.2 获取访问密钥(AK/SK)
访问密钥(Access Key ID和Secret Access Key)是调用OBS API接口或使用SDK/工具时的身份凭证。获取AK/SK的步骤如下:在华为云控制台右上角点击用户名,选择"我的凭证",进入"访问密钥"页面,点击"新增访问密钥"。系统会生成一对AK/SK,请务必下载保存好密钥文件(如credentials.csv),因为Secret Access Key仅在生成时可见一次。
安全提示:Access Key ID和Secret Access Key相当于账号的密码,切勿硬编码在代码中或以明文形式存储。推荐使用环境变量或IAM委托方式获取凭证。
三、创建Bucket(桶)
桶是OBS中存储对象的容器,所有数据都需要先放入桶中。创建桶时需要注意以下几点关键配置:
3.1 区域选择
区域(Region)指桶所在的物理数据中心位置。建议选择靠近您业务所在地的区域,以降低网络延迟、提高访问速度。桶创建成功后不支持变更区域,因此需要谨慎选择。如果计划通过华为云内网访问OBS(例如从弹性云服务器ECS访问),必须确保桶和ECS属于同一个区域。
3.2 存储类别选择
存储类别决定了数据的存储性能和成本。标准存储适合需要频繁访问的热点数据;低频访问存储适合访问频率较低但需要快速响应的数据;归档存储适合长期保存、极少访问的数据。创建桶时选择的存储类别会成为上传对象的默认存储类别。此外,OBS还支持多AZ(可用区)冗余存储,数据会同步存储在同一个区域内的多个可用区中,可靠性更高。
3.3 访问权限设置
桶的访问权限通过桶ACL(访问控制列表)控制。主要有三种权限级别:私有——只有桶拥有者可以访问;公共读——任何用户都可以读取桶内的对象;公共读写——任何用户都可以读写和删除桶内的对象。出于安全考虑,生产环境推荐使用"私有"权限,然后通过签名URL或桶策略进行精细化授权。
3.4 桶命名规则
桶名称在OBS中必须全局唯一,不能与其他用户创建的桶重名。命名规则如下:3至63个字符,只能包含小写字母、数字、连字符(-)和点号(.),必须以字母或数字开头和结尾。桶名称不支持大写字母,因为URL解析时会将大写转为小写。
3.5 通过控制台创建桶
在OBS管理控制台点击"创建桶"按钮,在弹出的对话框中依次填写区域、桶名称、存储类别、桶ACL等参数,点击"立即创建"即可完成。创建成功后,桶会立即显示在桶列表中。
四、上传文件到OBS
OBS支持多种文件上传方式,用户可以根据使用习惯和业务场景灵活选择。
4.1 通过控制台上传
OBS管理控制台提供了网页版的上传功能,适合小文件或临时上传需求。进入目标桶的"对象"页面,点击"上传对象"按钮,选择本地文件即可上传。控制台支持拖拽上传和批量上传,操作直观简单。
4.2 通过OBS Browser+图形化工具上传
OBS Browser+是一款跨平台的图形化管理工具,支持Windows、macOS等操作系统。使用前需要下载安装客户端,然后用AK/SK登录。登录后可以方便地创建桶、上传下载文件、分享对象等。OBS Browser+支持断点续传和并发上传,适合管理大量文件。
4.3 通过obsutil命令行工具上传
obsutil是OBS提供的命令行工具,适用于Linux环境下的自动化运维场景。obsutil支持创建桶、上传/下载文件/文件夹、删除文件等常用操作。在Linux ECS上通过内网使用obsutil访问OBS,可以享受免流量费用且速度更快。
4.4 通过Python SDK上传
对于开发者而言,使用SDK将OBS集成到应用程序中是最灵活的方式。OBS提供了多种编程语言的SDK,包括Python、Java、Go等。以下通过Python SDK演示文件上传的完整流程。
# 安装OBS Python SDK
# pip install esdk-obs-python
# 导入OBS客户端模块
from obs import ObsClient
import os
# 从环境变量获取AK/SK(推荐方式,避免硬编码)
ak = os.getenv("HUAWEICLOUD_AK")
sk = os.getenv("HUAWEICLOUD_SK")
# 创建OBS客户端实例
# endpoint格式:obs.{region}.myhuaweicloud.com
obs_client = ObsClient(
access_key_id=ak,
secret_access_key=sk,
server="obs.cn-north-4.myhuaweicloud.com"
)
# 上传文件到指定桶
bucket_name = "your-bucket-name"
object_key = "example/uploaded_file.txt" # 对象在桶中的完整路径
local_file_path = "/path/to/local/file.txt"
try:
resp = obs_client.putFile(bucket_name, object_key, local_file_path)
if resp.status < 300:
print(f"文件上传成功!ETag: {resp.body.etag}")
else:
print(f"上传失败,错误码: {resp.status}")
except Exception as e:
print(f"上传异常: {e}")
# 关闭客户端
obs_client.close()
上述代码中,putFile方法用于上传本地文件。单次上传的文件大小不能超过5GB。如果需要上传超过5GB的大文件,必须使用分段上传(Multipart Upload)功能。OBS Python SDK还提供了断点续传上传接口,在网络不稳定或程序中断时可以从断点处恢复上传,避免重复传输已成功的分片。
4.4.1 分段上传示例
# 分段上传大文件(适用于大于5GB的文件)
from obs import ObsClient, CompleteMultipartUploadRequest, CompletePart
obs_client = ObsClient(access_key_id=ak, secret_access_key=sk, server=endpoint)
# 1. 初始化分段上传任务
init_resp = obs_client.initiateMultipartUpload(bucket_name, object_key)
upload_id = init_resp.body.uploadId
# 2. 上传各个分段(每段最大5GB)
parts = []
part_number = 1
for chunk in file_chunks: # 将大文件切分成多个chunk
upload_resp = obs_client.uploadPart(
bucket_name, object_key, upload_id,
part_number, chunk
)
parts.append(CompletePart(part_number, upload_resp.body.etag))
part_number += 1
# 3. 完成分段上传,合并所有分段
complete_req = CompleteMultipartUploadRequest(parts)
obs_client.completeMultipartUpload(
bucket_name, object_key, upload_id, complete_req
)
obs_client.close()
五、访问OBS中的文件
5.1 私有桶的访问方式——签名URL
如果桶的权限设置为"私有",那么直接通过对象URL访问会被拒绝。此时需要生成一个带签名的临时URL(也称为预签名URL),任何持有该URL的人都可以在有效期内访问对应的对象。
签名URL的核心参数包括:AccessKeyId(访问密钥ID)、Expires(过期时间戳)、Signature(签名值)。用户可以通过控制台的"分享"功能快速生成临时链接,默认有效期为5分钟。控制台分享的有效期范围为1分钟到18小时。如果需要更长的有效期,可以使用OBS Browser+(最长支持1年)或通过SDK编程生成。
5.1.1 Python SDK生成签名URL
# 生成对象的临时访问URL
from obs import ObsClient
obs_client = ObsClient(access_key_id=ak, secret_access_key=sk, server=endpoint)
# 生成有效期为一小时的GET请求签名URL
expires = 3600 # 单位:秒
resp = obs_client.createSignedUrl(
method='GET',
bucketName=bucket_name,
objectKey=object_key,
expires=expires
)
if resp.status < 300:
signed_url = resp.body.signUrl
print(f"临时访问链接(有效期1小时):\n{signed_url}")
else:
print(f"生成签名URL失败: {resp.status}")
obs_client.close()
5.2 绑定自定义域名
默认情况下,OBS对象的访问域名格式为`https://bucket-name.obs.region.myhuaweicloud.com/object-key`。为了提升品牌形象和用户体验,用户可以将自己的域名(如`static.example.com`)绑定到OBS桶上。绑定流程包括:在OBS控制台的"域名管理"页面添加自定义域名,然后在DNS服务商处添加CNAME记录,将自定义域名指向OBS桶的默认域名。自定义域名需要完成工信部备案。
5.3 通过CDN加速访问
对于面向公网的大规模文件分发场景,建议将OBS与华为云CDN(内容分发网络)配合使用。开启CDN加速后,对象可以保持私有权限,通过CDN提供公共读访问。CDN边缘节点缓存内容后,用户的访问请求无需每次都回源到OBS,显著降低延迟并减少OBS的公网流出流量费用。
六、安全管理与权限控制
6.1 权限控制体系
OBS提供了多层次、细粒度的权限控制机制。主要包括:IAM权限(统一身份认证服务)——管理用户和用户组的整体权限;桶策略——针对单个桶的访问控制策略;桶ACL和对象ACL——基础的读写权限控制。建议遵循最小权限原则,只授予完成工作所必需的最小权限。
6.2 使用RAM子账号(IAM用户)
为了避免主账号AK/SK泄露带来的安全风险,强烈建议使用IAM子账号(RAM用户)来访问OBS。通过IAM可以为不同角色创建独立的子账号,并授予特定的OBS操作权限。例如,可以创建一个只具有上传权限的子账号用于应用服务器,另一个只具有下载权限的子账号用于前端展示。IAM策略支持精细到桶级别和对象前缀级别的授权。
6.3 服务端加密
OBS支持SSE-KMS服务端加密方案。为桶配置SSE-KMS加密能力后,上传到该桶的每个对象都会被自动加密存储。下载对象时,OBS会透明地解密并返回明文数据。这种方式确保了数据在存储介质上的安全性,避免数据明文存储带来的风险。
6.4 防盗链配置
防盗链功能可以防止其他网站盗用OBS中的资源链接。OBS基于HTTP请求头中的Referer字段进行防盗链控制。用户可以在桶的"数据安全>防盗链"页面配置白名单或黑名单。白名单模式下只允许来自指定域名的请求访问,黑名单模式下禁止来自指定域名的请求。
6.5 跨域资源共享(CORS)配置
CORS(跨域资源共享)是Web浏览器的一种安全机制,用于控制不同域之间的资源交互。当Web应用(如前端页面)需要从OBS直接读取文件时,必须在OBS桶中配置CORS规则。CORS规则需要指定允许的源(Origin)、允许的HTTP方法(GET、PUT等)和允许的请求头。
七、生命周期管理与成本优化
7.1 生命周期规则
生命周期管理是OBS成本优化的核心功能之一。通过配置生命周期规则,可以实现对象的自动转换存储类别或自动删除。例如,可以将上传30天后的标准存储对象自动转换为低频访问存储,180天后转换为归档存储,365天后自动删除。这样既满足了数据长期保存的需求,又最大限度地降低了存储成本。
7.2 内网访问免流量
OBS的流量费用是成本的重要组成部分。当在华为云ECS上通过内网访问同区域的OBS时,不收取流量费用。实现内网访问的关键是确保ECS与OBS桶位于同一区域,并配置内网DNS解析。Windows ECS推荐使用OBS Browser+工具,Linux ECS推荐使用obsutil命令行工具。通过内网访问不仅节省成本,还能获得更低的延迟和更高的稳定性。
7.3 存储类别转换的成本考量
不同存储类别的单价差异显著:标准存储单价最高但访问最快,低频访问存储次之,归档存储和深度归档存储单价最低。但转换存储类别时需要注意最低存储时间限制。低频访问存储的最低存储时间为30天,归档存储为90天。如果对象在最低存储时间内被删除或转换,会按照最低存储时间计费。因此在设计生命周期策略时,需要结合数据的实际访问模式合理规划。
7.4 计费模式选择
OBS提供按需计费和资源包两种计费模式。按需计费是默认模式,按实际使用的存储空间、请求次数和流量按小时结算。资源包是预付费模式,适合用量稳定的场景,可以显著降低单位成本。计费项主要包括:存储费用(按GB/月计费)、请求费用(按万次计费,包括GET、PUT、DELETE等各类请求)、流量费用(公网流出流量按GB计费)。建议根据业务预估用量,对比按需和资源包的成本差异后做出选择。
八、常见问题与解答
问1:OBS中如何创建文件夹?
OBS本身没有文件夹的概念,所有对象都在同一逻辑层级。但可以通过创建对象名为"folder/"(以斜杠结尾)的空对象来模拟文件夹,OBS控制台会将其显示为文件夹。这些"文件夹"对象与普通对象无异,可以进行下载、删除等操作。
问2:上传同名文件会怎样?
如果桶未开启多版本控制,新上传的同名对象会覆盖原有对象。如果开启了多版本控制,OBS会为每次上传创建独立的版本号,同名对象的不同版本会同时保存在桶中。
问3:如何实现大文件的上传?
单次上传的文件大小不能超过5GB。大于5GB的文件必须使用分段上传(Multipart Upload)功能。OBS SDK提供了分段上传和断点续传上传接口,可以自动完成文件切分、并发上传和失败重试。
问4:私有桶中的文件如何分享给他人?
私有桶中的文件不能直接通过URL访问。需要通过生成带签名的临时URL(预签名URL)来分享。可以在OBS控制台点击对象的"分享"按钮生成临时链接,也可以通过SDK编程生成。控制台分享的有效期最长为18小时,SDK方式可以自定义更长的有效期。
问5:如何降低OBS的使用成本?
降低OBS成本可以从以下几个方面入手:一是利用同区域ECS内网访问OBS,避免公网流量费用;二是通过生命周期规则将冷数据自动转换为低频或归档存储;三是对于用量稳定的场景购买资源包;四是开启防盗链防止流量盗刷;五是定期清理不再需要的对象和碎片文件。
问6:OBS支持哪些编程语言的SDK?
OBS官方提供多种编程语言的SDK,包括Python、Java、Go、Node.js、C、C#等。各语言SDK的接口设计和功能基本一致,都支持桶管理、对象上传下载、分段上传、生成签名URL等核心操作。开发者可以根据自己的技术栈选择合适的SDK进行集成。



