OSS兼容的S3 API及与S3的差异有哪些

更新时间:
复制 MD 格式

本文介绍OSS兼容的S3 API以及OSSS3的差异。

OSS兼容的S3 API

OSSS3 Bucket、Object以及Multipart操作兼容的API如下:

说明

通过标准 S3 协议调用 API 时,x-oss-process参数仅支持image/style/两种类型,不支持video/及其他处理类型。

操作类型

API

Bucket操作

  • PutBucket

  • DeleteBucket

  • GetBucket(ListObjects)

  • GetBucketV2(ListObjectsV2)

  • GetBucketACL

  • GetBucketLifecycle

  • GetBucketLocation

  • GetBucketLogging

  • HeadBucket

  • PutBucketACL

  • PutBucketLifecycle

  • PutBucketLogging

Object操作

  • DeleteObject

  • DeleteObjects

  • GetObject

  • GetObjectACL

  • HeadObject

  • PostObject

  • PutObject

  • PutObjectCopy

  • PutObjectACL

Multipart操作

  • InitiateMultipartUpload

  • AbortMultipartUpload

  • CompleteMultipartUpload

  • ListParts

  • UploadPart

  • UploadPartCopy

OSSS3的差异

OSSS3的差异如下:

  • 请求风格

    S3支持路径(Path)请求风格和虚拟托管(Virtual Hosted)请求风格。路径风格将Bucket名称放在URL路径中,而虚拟托管风格将Bucket名称作为子域名。基于安全考虑,OSS仅支持虚拟托管访问方式,即Bucket名称必须作为子域名使用。因此,在S3迁移至OSS后,客户端应用和S3工具都需要进行相应设置,确保所有请求采用虚拟托管风格,否则可能导致OSS报错,并禁止访问。

  • ACL权限定义

    OSSACL权限的定义与S3不完全一致,二者的主要区别如下:

    级别

    权限

    S3

    OSS

    Bucket

    READ

    拥有Bucketlist权限。

    对于Bucket下的所有Object,如果某Object没有设置Object权限,则该Object可读。

    WRITE

    Bucket下的Object可写入或覆盖。

    • 对于Bucket下不存在的Object,可写入。

    • 对于Bucket下存在的Object,如果该Object没有设置Object权限,则该Object可被覆盖。

    • 可以初始化分片上传(InitiateMultipartUpload)。

    READ_ACP

    读取Bucket ACL

    读取Bucket ACL,仅Bucket owner和授权子账号拥有此权限。

    WRITE_ACP

    设置Bucket ACL。

    设置Bucket ACL,仅Bucket owner和授权子账号拥有此权限。

    Object

    READ

    Object可读。

    Object可读。

    WRITE

    N/A

    Object可以被覆盖。

    READ_ACP

    读取Object ACL。

    读取Object ACL,仅Bucket owner和授权RAM用户拥有此权限。

    WRITE_ACP

    设置Object ACL。

    设置Object ACL,仅Bucket owner和授权RAM用户拥有此权限。

    重要

    OSS仅支持S3中的私有、公共读和公共读写三种ACL模式。

  • 存储类型

    OSSAmazon S3的存储类型并非一一对应。OSS共有5种存储类型,S3共有7种主要类型,且在最低存储时长、读取方式等能力上存在差异。您可根据需要转换OSS Object的存储类型。主要对应关系及差异如下:

    OSS存储类型

    对应的S3存储类型

    关键差异

    标准存储(Standard)

    STANDARD

    • 最低存储时长:OSSS3均无要求。

    • 读取方式:两者均为实时读取。

    低频访问存储(Infrequent Access)

    STANDARD_IA

    ONEZONE_IA

    • 对应关系:OSS同城冗余IA对应STANDARD_IA,本地冗余IA对应ONEZONE_IA。

    • 最低存储时长:均为30天。

    • 读取方式:两者均为实时读取,有取回费。

    归档存储(Archive)

    GLACIER_IR

    GLACIER(Flexible)

    • 最低存储时长:OSS60天,S390天。

    • 读取方式:OSS需解冻(约1分钟),或开启归档直读实现实时访问;S3 GLACIER_IR为毫秒级实时读取,GLACIER(Flexible)需Restore(Expedited 1~5分钟、Standard 3~5小时、Bulk 5~12小时)。

    冷归档存储(Cold Archive)

    DEEP_ARCHIVE

    • 最低存储时长:均为180天。

    • 读取方式:双方均需解冻。OSS解冻高优先约1小时、标准2~5小时、批量5~12小时;S3 仅 GLACIER(Flexible)类型达到该解冻时长,DEEP_ARCHIVEStandard ≤12小时(Batch 9~12小时)、Bulk ≤48小时。

    深度冷归档存储(Deep Cold Archive)

    无对应档

    • OSS提供的极深冷存储类型,AWS没有比DEEP_ARCHIVE更冷的存储类型(S3无对应档)。

    • 最低存储时长:OSS180天(S3无对应档)。

    • 读取方式:OSS需解冻,高优先约12小时、标准约48小时(S3 仅 DEEP_ARCHIVE 类型达到该解冻时长)。

    说明

    此外,S3提供独立的INTELLIGENT_TIERING(智能分层)存储类型,可根据访问频率在多个访问层之间自动转换;OSS没有独立的智能分层存储类型,需通过生命周期规则实现类似的自动转储。

    如果未开启归档直读,归档存储类型的Object在读取之前,需先使用Restore请求进行解冻。与S3不同,OSS会忽略S3 API的解冻天数设置,解冻状态默认持续1天,用户可延长到最多7天,之后Object复归初始的冷冻状态。

  • ETag

    • 对于PUT方式上传的Object,OSS ObjectETagAmazon S3在大小写上有区别。OSS为大写,而S3为小写。如果客户端有关于ETag的校验,请忽略大小写。

    • 对于分片上传的Object,OSSETag计算方式与S3不同。