为了使众多基于AWS S3接口协议开发的各类应用及服务能够轻便的接入七牛对象存储,七牛对象存储兼容了AWS S3常用接口。接口的具体兼容情况,在下文中做了详细叙述。
七牛云存储兼容S3协议接口,是为了尽可能的方便基于 AWS S3 而开发的应用接入到七牛对象存储。如果您刚刚开始着手开发新的应用,为了更好的使用七牛对象存储丰富的产品功能,更推荐使用原生接口进行开发。
存储类型
七牛对象存储支持标准(STANDARD)、低频访问(LINE)、归档直读(GLACIER_IR)、归档(GLACIER)、深度归档(DEEP_ARCHIVE)五种存储类型。
服务域名
您可使用如下服务域名通过 AWS S3 协议访问七牛云对象存储:
存储区域 | 区域简称 Region ID | 访问 Endpoint | 协议 |
---|---|---|---|
华东-浙江 | cn-east-1 | s3.cn-east-1.qiniucs.com | HTTP,HTTPS |
华东-浙江2 | cn-east-2 | s3.cn-east-2.qiniucs.com | HTTP,HTTPS |
华北-河北 | cn-north-1 | s3.cn-north-1.qiniucs.com | HTTP,HTTPS |
华南-广东 | cn-south-1 | s3.cn-south-1.qiniucs.com | HTTP,HTTPS |
北美-洛杉矶 | us-north-1 | s3.us-north-1.qiniucs.com | HTTP,HTTPS |
亚太-新加坡(原东南亚) | ap-southeast-1 | s3.ap-southeast-1.qiniucs.com | HTTP,HTTPS |
亚太-河内 | ap-southeast-2 | s3.ap-southeast-2.qiniucs.com | HTTP,HTTPS |
亚太-胡志明 | ap-southeast-3 | s3.ap-southeast-3.qiniucs.com | HTTP,HTTPS |
注意:暂不支持通过以上服务域名匿名访问七牛云存储,必须携带 AWS Signature。
访问方式
七牛对象存储兼容 AWS S3 的 path-style 和 bucket virtual hosting 两种访问方式,以 GetObject 为例
风格 | 示例 |
---|---|
Path Style | http://s3.cn-east-1.qiniucs.com/<S3 空间名>/objectname |
Virtual-host Style | http://<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 |