华为云对象存储(OBS)完全兼容 Amazon S3 协议,这意味着您可以直接使用标准的 AWS S3 API 客户端和工具来访问华为云 OBS。以下是其支持的核心 API 接口、协议及关键要求:
1. 核心协议支持
- HTTP/HTTPS:所有操作均基于 HTTP/HTTPS 协议进行传输。
- 强制加密:生产环境强烈建议(部分场景强制)使用 HTTPS 以确保数据传输安全。
- 版本:支持 HTTP 1.1 及以上版本。
- RESTful API:采用 REST 架构风格,通过标准 HTTP 方法(GET, POST, PUT, DELETE, HEAD 等)进行操作。
- 认证协议:
- AWS Signature V4:这是最核心的要求,华为云 OBS 严格遵循 AWS SigV4 签名算法。
- 临时凭证 (STS):支持通过 Security Token Service (STS) 获取临时访问密钥(Access Key ID, Secret Access Key, Session Token),适用于跨账号或临时授权场景。
2. 支持的 S3 API 接口分类
华为云 OBS 覆盖了 S3 的大部分常用功能,主要包括以下几类:
A. 桶(Bucket)操作
ListBuckets:列出当前用户拥有的所有桶。CreateBucket:创建新桶(需指定 Region)。DeleteBucket:删除空桶。GetBucketLocation:获取桶所在区域信息。PutBucketAcl/GetBucketAcl:管理桶的访问控制列表(ACL)。PutBucketPolicy/GetBucketPolicy:管理桶策略(JSON 格式)。ListObjects/ListObjectsV2:列出桶内的对象(支持分页、前缀过滤、Delimiter 分隔符)。
B. 对象(Object)操作
PutObject:上传对象(支持分片上传InitiateMultipartUpload,UploadPart,CompleteMultipartUpload)。GetObject:下载对象(支持范围下载Range头)。HeadObject:获取对象元数据(不下载内容)。DeleteObject:删除单个对象。CopyObject:在桶内或跨桶复制对象。RestoreObject:从归档存储恢复对象。
C. 高级与生命周期管理
- 生命周期规则 (Lifecycle):支持配置过期删除、转换存储类型(如转为低频访问或归档存储)。
- 静态网站托管:支持将桶配置为静态网站托管站点。
- 跨区域复制 (CRR):支持开启对象的跨区域自动复制。
- 事件通知:支持配置对象变更事件(如上传后触发函数计算)。
3. 具体实现要求与差异点
虽然兼容 S3,但在实际对接时需注意以下细节:
| 特性 | 具体要求/说明 |
|---|---|
| Endpoint 地址 | 必须使用华为云特定的 Endpoint(例如:obs.cn-north-4.myhuaweicloud.com),不能直接使用 AWS 的 endpoint。 |
| Region 标识 | 桶创建时必须指定 Region,且后续请求的 URL 中需包含正确的 Region 信息。 |
| Header 处理 | 支持标准的 S3 Header(如 x-amz-meta-* 用于自定义元数据)。对于非标准 S3 特有的 Header(如华为云特有的 x-obs-*),通常作为扩展字段支持。 |
| 错误码 | 大部分错误响应遵循 S3 标准格式(XML 结构),但具体的错误码(Error Code)可能包含华为云特有的定义,需参考官方文档映射。 |
| SDK 兼容性 | 推荐使用华为云官方提供的 SDK(支持 Java, Python, Go, Node.js 等),这些 SDK 已内置了针对华为云 Endpoint 和签名的适配逻辑。若使用 AWS SDK,需手动修改 Endpoint 配置并确认签名逻辑一致。 |
| 分片上传限制 | 支持大文件分片上传,单个分片大小建议在 5MB – 5GB 之间,总文件最大支持 5TB。 |
4. 开发者建议
如果您计划将现有基于 AWS S3 的应用迁移到华为云 OBS,或者开发跨云应用:
- 配置端点:确保应用程序中的 Bucket Endpoint 指向华为云对应的域名。
- 签名验证:确保您的代码库正确实现了 AWS SigV4 签名算法(大多数主流语言 SDK 默认支持)。
- 测试工具:可以使用
s3cmd、aws-cli(修改 endpoint 后)或MinIO Client配合华为云凭证进行测试。 - 查阅最新文档:API 细节可能会随版本更新,建议以 华为云 OBS 开发者指南 为准。
总结来说,华为云 OBS 提供了高度兼容的 S3 接口集,主要区别在于网络接入点(Endpoint)和鉴权密钥的来源,而非 API 本身的逻辑结构。
云小栈