当前位置:首页 > 技术教程 > 正文

七牛云对象存储兼容AWS S3 协议


七牛云对象存储兼容AWS S3 协议

为了使众多基于AWS S3接口协议开发的各类应用及服务能够轻便的接入七牛对象存储,七牛对象存储兼容了AWS S3常用接口。接口的具体兼容情况,在下文中做了详细叙述。

七牛云存储兼容S3协议接口,是为了尽可能的方便基于 AWS S3 而开发的应用接入到七牛对象存储。如果您刚刚开始着手开发新的应用,为了更好的使用七牛对象存储丰富的产品功能,更推荐使用原生接口进行开发。


存储类型


七牛对象存储支持标准(STANDARD)、低频访问(LINE)、归档直读(GLACIER_IR)、归档(GLACIER)、深度归档(DEEP_ARCHIVE)五种存储类型。

服务域名


您可使用如下服务域名通过 AWS S3 协议访问七牛云对象存储:

存储区域区域简称 Region ID访问 Endpoint协议
华东-浙江cn-east-1s3.cn-east-1.qiniucs.comHTTP,HTTPS
华东-浙江2cn-east-2s3.cn-east-2.qiniucs.comHTTP,HTTPS
华北-河北cn-north-1s3.cn-north-1.qiniucs.comHTTP,HTTPS
华南-广东cn-south-1s3.cn-south-1.qiniucs.comHTTP,HTTPS
北美-洛杉矶us-north-1s3.us-north-1.qiniucs.comHTTP,HTTPS
亚太-新加坡(原东南亚)ap-southeast-1s3.ap-southeast-1.qiniucs.comHTTP,HTTPS
亚太-河内ap-southeast-2s3.ap-southeast-2.qiniucs.comHTTP,HTTPS
亚太-胡志明ap-southeast-3s3.ap-southeast-3.qiniucs.comHTTP,HTTPS

注意:暂不支持通过以上服务域名匿名访问七牛云存储,必须携带 AWS Signature

访问方式

七牛对象存储兼容 AWS S3 的 path-style 和 bucket virtual hosting 两种访问方式,以 GetObject 为例

风格示例
Path Stylehttp://s3.cn-east-1.qiniucs.com/<S3 空间名>/objectname
Virtual-host Stylehttp://<S3 空间名>.s3.cn-east-1.qiniucs.com/objectname

其中 S3 空间名的获取,需参考下述说明。

获取七牛 S3 空间名

S3 空间名:全局唯一(遵循 S3 协议的要求)

  • 空间名称全局唯一时,S3 空间名=空间名称;空间名称全局不唯一时,系统会为空间自动生成一个 S3 空间名

  • 七牛对象存储空间的 S3 空间名,可以通过 Get Service 接口获取,也可在 开发者平台-对象存储-空间概览 中查看


签名认证

同时兼容AWS Signature Version 2 和 AWS Signature Version 4,均实现了请求头签名和参数签名方式。AWS Signature V2 签名方法请查阅
Signing and Authenticating REST Requests, AWS Signature V4 签名方法请查阅 Authenticating Requests (AWS Signature Version 4)


临时安全凭证

兼容 AWS Security Token Service (STS) 的联合身份临时安全凭证 (federation token) ,更多详细信息请查阅 AWS 临时安全凭证

兼容API

STS API请求兼容描述响应兼容描述
GetFederationToken未支持请求参数 PolicyArns.member.N未支持响应参数 PackedPolicySize

请求参数中的 Policy 结构与 S3 一致,对于策略中的 Action 元素,目前已经兼容的包括:

  • s3:CreateBucket

  • s3:ListBucket

  • s3:DeleteBucket

  • s3:GetBucketLocation

  • s3:ListAllMyBuckets

  • s3:DeleteObject

  • s3:PutObject

  • s3:GetObject

  • s3:AbortMultipartUpload

  • s3:ListMulitpartUploadParts

您也可以使用通配符 “*” 或 “S3:*” 表示任意操作。关于 Policy 更多内容请查阅会话策略


兼容公共头

公共请求头

AWS S3 请求头说明
Authorization兼容
Content-Length兼容
Content-Type兼容
Content-MD5兼容
Date兼容
Expect兼容
Host兼容
x-amz-content-sha256兼容
x-amz-date兼容
x-amz-security-token不兼容

公共响应头

AWS S3 请求头说明
Content-Length兼容
Content-Type兼容
Connection兼容
Date兼容
ETag兼容
Server兼容
x-amz-delete-marker暂不支持
x-amz-request-id兼容
x-amz-id-2不兼容
x-amz-version-id暂不支持



兼容 API


下方列出了已经实现兼容的接口,并在表格中详细列出了未兼容的字段。

Service API

AWS S3 接口请求兼容描述响应兼容描述
GET Service兼容兼容

Bucket API

AWS S3 接口请求兼容描述响应兼容描述
DELETE Bucket兼容兼容
DELETE Bucket tagging兼容兼容
GET Bucket未支持请求参数encoding-type未支持响应参数Encoding-Type
GET Bucket Version 2未支持请求参数encoding-type未支持响应参数Encoding-Type
GET Bucket tagging兼容兼容
HEAD Bucket兼容兼容
PUT Bucket兼容兼容
PUT Bucket tagging兼容兼容
GET Bucket location兼容兼容
PUT Bucket acl兼容兼容
GET Bucket acl兼容兼容
PUT Bucket cors兼容兼容
GET Bucket cors兼容兼容
DELETE Bucket cors兼容兼容

特别的,为了便于排障,跨域请求的响应 Access-Control-Expose-Headers 中,必定会包含 x-amz-request-id(即使用户没有配置)。

Bucket Policy相关参见 使用 Bucket Policy 授权

Object API

AWS S3 接口请求兼容描述响应兼容描述
DELETE Multiple Object未支持请求头x-amz-mfa兼容
DELETE Object未支持请求头x-amz-mfa兼容
GET Object未支持请求头x-amz-server-side-encryption-*未支持响应头 x-amz-replication-status, x-amz-server-side-encryption-*, x-amz-tagging-count, x-amz-object-lock-*
HEAD Object未支持请求头x-amz-server-side-encryption-*未支持响应头x-amz-missing-meta, x-amz-replication-status, x-amz-server-side-encryption-*, x-amz-object-lock-*
POST Object未支持表单字段AWSAccessKeyId, policy, tagging, x-amz-security-token, x-amz-server-side-encryption-*
x-amz-storage-class取值 STANDARD、LINE、GLACIER、DEEP_ARCHIVE,默认STANDARD
未支持响应头x-amz-expiration, x-amz-server-side-encryption-*
PUT Object未支持请求头x-amz-tagging, x-amz-object-lock-*, x-amz-server-side-encryption-*
x-amz-storage-class取值 STANDARD、LINE、GLACIER、DEEP_ARCHIVE,默认STANDARD
未支持响应头x-amz-expiration, x-amz-server-side-encryption-*
PUT Object - Copy未支持请求头 x-amz-tagging-directive, x-amz-server-side-encryption-*, x-amz-copy-source-server-side-encryption-*
x-amz-storage-class取值 STANDARD、LINE、GLACIER、DEEP_ARCHIVE,默认STANDARD
未支持响应头x-amz-expiration, x-amz-server-side-encryption-*
Abort Multipart Upload兼容兼容
Complete Multipart Upload兼容未支持响应头x-amz-expiration, x-amz-server-side-encryption-*, x-amz-version-id
Initiate Multipart Upload未支持请求头 x-amz-tagging, x-amz-server-side-encryption-*
x-amz-storage-class取值 STANDARD、LINE、GLACIER、DEEP_ARCHIVE,默认STANDARD
未支持响应头x-amz-abort-date, x-amz-abort-rule-id, x-amz-server-side-encryption-*
List Parts未支持请求参数encoding-type未支持响应参数x-amz-abort-date, x-amz-abort-rule-id,Encoding-Type, LastModified
Upload Part未支持请求头x-amz-server-side-encryption-*未支持响应头x-amz-server-side-encryption-*
Upload Part - copy未支持请求头x-amz-server-side-encryption-*未支持响应头x-amz-copy-source-version-id,x-amz-server-side-encryption-*
Restore Object未支持请求参数 versionId, Description, OutputLocation, SelectParameters, Tier, Type
Days 解冻天数限 1~7
深度归档存储类型支持 GlacierJobParameters.Tier=Standard
未支持响应头 x-amz-restore-output-path
PUT Object acl兼容兼容
GET Object acl兼容兼容




兼容工具示例

对大多数基于 AWS S3 的工具,进行如下改动即可访问七牛云对象存储 Kodo:

  • 获取七牛云账号的 AccessKey 和 SecretKey,在您使用的工具中配置七牛云的 AccessKey 和 SecretKey

  • 设置工具连接的 Region 及 Endpoint 分别为七牛云对象存储的 S3 Region ID 和 访问 Endpoint,可以参考服务域名

只要涉及的接口实现了兼容,即可在工具中使用对应的功能、对接七牛对象存储。

各工具对接七牛云对象存储的方式,参考:

使用说明
AWS CLI
CloudBerry Explorer
S3 Browser
S3FS


更新时间 2024-07-23