加油
努力

华为云OBS兼容S3的接口支持哪些功能和规格?

华为云对象存储(OBS)在兼容 Amazon S3 协议方面做了深度适配,旨在让使用 AWS S3 SDK、工具或第三方开源软件的用户能够无缝迁移和接入。其兼容性并非“完全一致”,而是覆盖了绝大多数常用功能,但在部分高级特性或特定参数行为上存在差异。

以下是华为云 OBS 兼容 S3 接口的主要功能和规格概览:

1. 核心 API 操作支持

OBS 支持了 S3 协议中约 95% 以上 的核心 RESTful API 操作,涵盖了对象存储的基本生命周期管理:

  • 对象操作
    • PUT Object:上传对象(支持分片上传、断点续传)。
    • GET Object:下载对象(支持范围下载 Range GET)。
    • HEAD Object:获取元数据。
    • DELETE Object / POST Object (Delete):删除单个对象或多版本对象。
    • COPY Object:复制对象(同 Bucket 内及跨 Bucket)。
    • Multipart Upload:初始化、上传分片、完成/中止分片上传。
  • Bucket 操作
    • List Buckets:列出所有 Bucket。
    • Create Bucket / Delete Bucket:创建和删除存储桶。
    • Put/Bucket ACL:设置 Bucket 权限(注意:S3 的 ACL 模型与 OBS 的权限策略模型有映射关系,但底层实现逻辑不同)。
    • Get/Bucket Location:获取 Bucket 位置信息。
  • 列表与查询
    • List Objects / List Objects V2:列出对象(支持前缀过滤、分页、Marker/ContinuationToken)。
    • List Multipart Uploads:列出未完成的分片上传任务。
    • List Parts:列出某个分片上传任务中的已上传分片。

2. 高级功能与特性

除了基础 CRUD,OBS 还通过 S3 接口支持以下高级特性:

  • 多版本控制 (Versioning)
    • 支持开启/暂停/禁用 Bucket 的版本控制。
    • 支持通过 ?versionId 参数读取历史版本、恢复误删对象。
  • 生命周期管理 (Lifecycle)
    • 支持通过 S3 标准的 Lifecycle Rules 配置规则,实现自动转换存储类型(如转低频访问)、过期删除对象等。
  • 预签名 URL (Presigned URLs)
    • 完全兼容 S3 的签名算法(V4),可生成有时效性的下载/上传链接。
  • 跨区域复制 (CRR)
    • 虽然 CRR 通常通过控制台或专用 API 配置,但 OBS 支持通过 S3 标准的事件通知机制触发相关逻辑。
  • 加密支持
    • 支持 SSE-S3(服务端加密)、SSE-KMS(KMS 密钥)以及客户提供的密钥(SSE-C),在 S3 请求头中有对应的标准字段支持。
  • 标签 (Tags)
    • 支持对对象进行 Tagging 操作(PUT Object Tagging, GET Object Tagging),用于资源分类和计费统计。
  • 事件通知 (Event Notifications)
    • 支持将对象操作事件(如 s3:ObjectCreated:*)投递到 OBS 自身或其他云服务(如函数工作流 FunctionGraph),符合 S3 Event Notification 规范。

3. 认证与签名规格

  • 签名算法:默认且主要支持 AWS Signature Version 4
  • 兼容模式:为了适配旧版工具,OBS 也提供了一定的 Signature V2 兼容能力,但强烈建议使用 V4 以获得更好的安全性。
  • Access Key/Secret Key:用户可以使用 AK/SK 直接构建 S3 风格的请求签名。

4. 关键差异与限制(注意事项)

尽管高度兼容,但在实际对接时需注意以下差异,这些是迁移中最容易遇到的“坑”:

特性 AWS S3 原生行为 华为云 OBS 行为/差异
错误码返回 严格遵循 AWS 错误码格式 大部分兼容,但部分自定义错误可能包含华为云特有的 Code 或 Message 描述。
ACL vs Policy 强依赖 Bucket/Object ACL OBS 推荐使用 IAM 策略 (Policy)桶策略,ACL 仅作为兼容层,某些细粒度权限在 ACL 中可能受限。
重定向 (Redirect) 支持多种重定向配置 OBS 支持重定向,但配置方式需遵循 OBS 特定的 XML 结构,而非纯 S3 标准。
元数据键值 大小写敏感 OBS 对象元数据(Metadata)Key 通常不区分大小写,而 S3 是区分大小写的。
最大对象大小 5TB OBS 单对象最大支持 5TB,与 S3 一致。
分片大小 最小 5MB (最后一块除外) OBS 同样要求非最后一片至少 5MB,否则报错。
区域标识 Region ID (如 us-east-1) OBS 使用 Endpoint 域名(如 obs.cn-north-4.myhuaweicloud.com)来隐式确定区域,无需显式指定 Region 参数(SDK 会自动处理)。

5. 开发建议

如果您计划使用 S3 接口对接华为云 OBS:

  1. SDK 选择:建议使用华为云官方提供的 OBS SDK(基于 S3 协议封装),它会自动处理签名、Endpoint 路由和错误重试,比直接使用通用的 AWS S3 SDK 更稳定。
  2. 通用工具:对于 aws-clircloneminio-client 等第三方工具,只需修改配置中的 endpoint 为华为云 OBS 地址,并切换 providerHuaweiCloudS3Compatible 即可使用。
  3. 测试验证:在正式迁移前,务必进行小批量数据的读写、分片上传、版本回滚和权限验证测试,特别是涉及复杂权限策略的场景。

总结来说,华为云 OBS 的 S3 兼容接口足以支撑 90% 以上的标准 S3 应用场景,包括主流备份工具、大数据计算引擎(Spark/Hadoop)以及云原生应用的数据持久化需求。

云服务器