PUT Bucket

创建 Bucket。默认情况下创建的 Bucket 是 private 的,只有 Bucket 的创建者可以访问。 可以 Put 请求中的“x-amz-acl”头来设置 Bucket 访问权限。目前 Bucket 有二种访问权限:public-read 和 private。

请求语法

PUT /mss-test-bucket/ HTTP/1.1
Authorization: authorization string
Date: GMT Date
Host: mtmss.com
x-amz-acl: Permission

请求参数(Request Parameters)

名称 描述
x-amz-acl bucket 权限类型。
类型: 字符串
数值: private 或 public-read

细节分析

  1. 创建的 Bucket,如果没有指定访问权限(x-amz-acl),则默认使用 private 权限。
  2. 如果请求的 Bucket 已经存在,返回 409 BucketAlreadyExists。
  3. 可以 Put 请求中的 x-amz-acl 头来设置 Bucket 访问权限。目前 Bucket 有两种访问权限:public-read和private。
  4. 如果用户发起 Put Bucket 请求的时候,没有携带签名,返回 403 Forbidden 消息。错误码:AccessDenied。

示例

请求示例:

PUT /mss-test-bucket/ HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:zEXSjHUhaY7f8joVoeJ6mnDBIr0=
Connection: keep-alive
Date: Wed, 08 Nov 2017 05:50:54 GMT
Host: mtmss.com

返回示例:

HTTP/1.1 200 OK
Server: Tengine
Date: Wed, 08 Nov 2017 06:15:51 GMT
Connection: keep-alive
X-Amz-Id-2: 8c994c82ae2b5ec2b377707594f047d4
X-Amz-Request-Id: 1510121751365670
X-Mss-Trace-Id: 310188033968522053

PUT Bucket ACL

Put Bucket ACL接口用于修改Bucket访问权限。目前Bucket有两种访问权限:public-read和private。Put Bucket ACL操作通过Put请求中的“x-amz-acl”头来设置。这个操作只有该Bucket的创建者有权限执行。如果操作成功,则返回200;否则返回相应的错误码和提示信息。

请求语法

PUT /mss-test-bucket/?acl HTTP/1.1
Authorization: authorization string
Date: GMT Date
Host: mtmss.com
x-amz-acl: Permission

请求参数(Request Parameters)

名称 描述
x-amz-acl bucket权限类型。
类型: 字符串
数值: private 或 public-read

细节分析

  1. 如果 Bucket 存在,发送时带的权限和已有权限不一样,并且请求发送者是 Bucket 拥有者时。该请求不会改变 Bucket 内容,但是会更新权限。
  2. 如果请求中没有,“x-amz-acl”头,并且该 Bucket 已存在,并属于该请求发起者,则维持原 Bucket 权限不变。

示例

请求示例:

PUT /mss-test-bucket/?acl HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:F0qsjrfma6v7nrO2vV2uGpnpqZQ=
Connection: keep-alive
Date: Thu, 09 Nov 2017 05:19:18 GMT
Host: mtmss.com
x-amz-acl: public-read

返回示例:

HTTP/1.1 200 OK
Server: Tengine
Date: Thu, 09 Nov 2017 05:41:38 GMT
Content-Type: text/plain; charset=utf-8
Connection: keep-alive
X-Amz-Id-2: 8c994c82ae2b5ec2b377707594f047d4
X-Amz-Request-Id: 1510206098466593
X-Mss-Trace-Id: 310188034052869154

Put Bucket LifeCycle

设置Bucket中Object的生命周期规则。Bucket 的拥有者可以通过 Put Bucket Lifecycle 来设置 Bucket 的 Lifecycle 配置。Lifecycle 开启后,MSS 将按照配置,定期自动删除与 Lifecycle 规则相匹配的 Object。

请求语法

PUT /mss-test-bucket/?lifecycle HTTP/1.1
Authorization: authorization string
Content-Length: Length
Date: GMT Date
Host: mtmss.com

Lifecycle configuration in the request body

请求参数(Request Parameters)

名称 描述 是否必须
LifecycleConfiguration Lifecycle 配置的容器,最多可容纳5条规则。
类型:容器
子节点:Rule
父节点:无
Rule 表述一条规则
类型:容器
子节点:ID,Filter,Expiration
父节点:LifecycleConfiguration
ID 规则唯一的ID,最多由255字节组成。当用户没有指定,或者该值为空时,MSS 会返回 S3ErrLifecycleIDEmpty 。
类型:字符串
子节点:无
父节点:Rule
Filter 描述过滤器标识生命周期规则适用的对象的子集的元素的容器。如果指定一个空的过滤器(),则该规则将应用于存储桶中的所有对象。
类型:容器
子节点:Prefix
父节点:Rule
Prefix 指定规则所适用的前缀。只有匹配前缀的对象才可能被该规则所影响。不可重叠。
类型:字符串
子节点:无
父节点:Filter
Expiration 指定 Object 规则的过期属性。
类型:容器
子节点:Days 或 Date
父节点:Rule
Days 指定多少天后执行规则的天数。
类型:正整数
父节点:Expiration
Days和Date二选一
Date 指定执行规则的日期。
日期值必须符合 ISO 8601 格式。时间总是午夜UTC。
类型:字符串
父节点:Expiration
Days和Date二选一

细节分析

  1. 生命周期管理的规则以桶为粒度,以天为单位的对符合规则的文件进行自动删除。
  2. 规则支持天数(Days)或指定日期(Date)的管理,并支持前缀匹配(可选)。
  3. 当配置了天数后,则文件创建的时间超过配置的天数后会被自动删除,若指定了前缀匹配,则与前缀想匹配的文件才会被删除。
  4. 当配置了指定日期后,则文件创建的时间在指定日期之前的文件会被自动删除,若指定了前缀匹配,则与前缀想匹配的文件才会被删除。
  5. 最多配置5条规则。
  6. 如果此前没有设置过 Lifecycle,此操作会创建一个新的 Lifecycle 配置;否则,就覆写先前的配置。

示例

请求示例:

PUT /mss-test-bucket/?lifecycle HTTP/1.1
Host: mtmss.com
Content-Length: 204
x-amz-date: Thu, 23Nov201708: 02: 34+0000
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:JGWoOe89Qo9EEErQIkKR4z1Fdjo=

<LifecycleConfiguration>
  <Rule>
    <ID>id1</ID>
    <Expiration>
      <Days>30</Days>
    </Expiration>
  </Rule>
</LifecycleConfiguration>

返回示例:

HTTP/1.1 200 OK
connection: keep-alive
content-length: 0
content-type: text/plain;charset=utf-8
date: Thu, 23Nov201708: 00: 18GMT
server: Tengine
x-amz-id-2: ff0254a2156416b6d7ae876d490ee036
x-amz-request-id: 1511424018344796
x-mss-trace-id: 310470609759127464

Put Bucket Policy

Put Bucket Policy 操作可以设置一个 bucket 的 policy 策略。如果 bucket 已经存在 policy,这个操作会替换已有 policy。必须为 bucket 的拥有者才能进行此操作。可以基于此接口设置 bucket 的 referer。

请求语法

PUT /mss-test-bucket/?policy HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string

Policy written in JSON

Policy描述

名称 描述
Version 版本信息,暂未启用。
类型:字符串
默认值:空字符串
Statement 一系列策略描述
类型:列表
Sid 未启用
类型:字符串
默认值:空字符串
Effect 当用户请求特定操作 (可以是允许或拒绝) 时的效果。
类型:字符串
有效值:Allow Deny
Principal 允许访问语句中的操作和资源的账户或用户。仅在 bucket 策略中指定委托人。它是作为权限获得者的用户、账户、服务或其他实体。在用户策略中,被附加了策略的用户是隐式委托人。
类型:map[string]string 结构体
对于 referer 设置,默认为{“AWS”: "*"}
Action 对于每个资源,Amazon S3 都支持一组操作。允许 (或拒绝) 的资源操作通过使用操作关键字指定。
类型:string 数组
默认值:["s3:GetObject"]
Resource bucket 是您能够允许或拒绝权限的 MSS 资源。在策略中,使用资源名称 (ARN) 标识资源。
类型:字符串
默认值:空(设置时可不带)
Condition 指定策略生效的条件。
类型:map[string]value结构体
默认值:空

细节分析

  1. 返回204状态码表示设置成功,其他状态表示失败。
  2. 基于 put bucket policy 接口可以设置 referer,配置和删除 bucket referer 相当于修改 policy 的部分内容。
  3. 通过设置黑名单(空)+(允许空referer)可以清除原有的 referer 设置。
  4. 设置 referer 步骤:
  • 基于 GET Bucket Policy 获取 policy json 结构体
  • 如果返回404则用户没有设置过 referer,构造新的 policy 结构体,基于示例构造白名单、黑名单的结构体,调用 PUT Bucket Policy 接口
  • 如果返回200,过滤出 policy 结构体中与 aws:Refere 不相干的 Statement(该部分不变,最后调用 Put Bucket Policy 是结构体中必须包含这部分)
  • 基于上面的实例,构造白名单、黑名单的 Statement 结构体,同时添加与 aws:Refere 不相干的 Statement,基于这二部分生成新的 Policy 结构体
  • json 序列号结构体,调用 PUT Bucket Policy 接口
  • 返回204状态码表示设置成功,其他状态表示失败

示例

请求示例:

PUT /mss-test-bucket/?policy HTTP/1.1
Host: mtmss.com
Date: Tue, 04 Apr 2010 20:34:56 GMT
Authorization: authorization string

{
    "Version":"2012-10-17",
    "Statement":[
        // refer 不相关部分
        {
            "Sid":"",
            "Effect":"Allow",
            "Principal": {"AWS": "*"},
            "Action":["s3:PutObject","s3:PutObjectAcl"],
            "Resource":["arn:aws:s3:::examplebucket/*"]
        },
        // refer 相关部分
        {
            "Sid":"",
            "Effect":"Allow",
            "Principal":{"AWS": "*"},
            "Action":["s3:GetObject"],
            "Resource":["arn:aws:s3:::examplebucket/*"],
            "Condition":{
                "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*", ""]}
            }
        },
        {
            "Sid":"Allow get requests without referrer",
            "Effect":"Deny",
            "Principal":{"AWS": "*"},
            "Action":["s3:GetObject"],
            "Resource":["arn:aws:s3:::examplebucket/*"],
            "Condition":{
                        "StringNotLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*",""]}
            }
         }
    ]
}

响应示例:

HTTP/1.1 204 No Content
Server: MeituanStorageService
Date: Tue, 06 Jun 2017 06:53:41 GMT
Connection: keep-alive
X-Amz-Id-2: efd53690054e962b78729d0cb3e8723f
X-Amz-Request-Id: 1496732021257213
X-Mss-Trace-Id: 1175475084336181769

黑白名单referer示例

//白名单设置(不允许空referer)
//配置域名 http://www.example.com http://example.com
{
    "Version":"2012-10-17",
    "Statement":[
        {
            "Sid":"Allow get requests with referrer",
            "Effect":"Deny",
            "Principal":{"AWS": "*"},
            "Action":["s3:GetObject"],
            "Resource":["arn:aws:s3:::examplebucket/*"],
            "Condition":{
                    "StringNotLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
            }
        }
    ]
}

//白名单设置(允许空referer)
//配置域名 http://www.example.com http://example.com
{
    "Version":"2012-10-17",
    "Statement":[
        {
            "Sid":"allow get requests without referrer",
            "Effect":"Deny",
            "Principal":"*",
            "Action":["s3:GetObject"],
            "Resource":"arn:aws:s3:::examplebucket/*",
            "Condition":{
                    "StringNotLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*",""]}
            }
        }
    ]
}


//黑名单设置(不允许空referer)
{
    "Version":"2012-10-17",
    "Statement":[
        {
            "Sid":"deny get requests with referrer",
            "Effect":"Deny",
            "Principal":"*",
            "Action":["s3:GetObject"],
            "Resource":"arn:aws:s3:::examplebucket/*",
            "Condition":{
                    "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*",""]}
            }
        }
    ]
}

//黑名单设置(允许空referer)
{
    "Version":"2012-10-17",
    "Id":"http referer policy example",
    "Statement":[
        {
            "Sid":"deny get requests with referrer",
            "Effect":"Deny",
            "Principal":{"AWS": "*"},
            "Action":["s3:GetObject"],
            "Resource":["arn:aws:s3:::examplebucket/*"],
            "Condition":{
                    "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
            }
        }
    ]
}

Get Bucket(List Object)

获取某个 Bucket 的 Objects 信息。可以通过相关的请求参数获取 Bucket 下的某个 Object 子集。

请求语法

GET /mss-test-bucket/ HTTP/1.1
Authorization: authorization string
Date: GMT Date
Host: mtmss.com

请求参数(Request Parameters)

名称 描述
delimiter delimiter 是一个用于对 bucket 内具有共同前缀的 objects 进行聚合的分隔符。(“/”为常用的 delimiter,用于表示伪目录)
数据类型:字符串
默认值: 无
marker 设定返回的 objects 中的起始 object。sever 端会对 objects 进行字典序排列。
数据类型:字符串
默认值:无
max-keys 设定此次请求的最大 objects 数量。如果用户设定了 max-keys 且符合条件的 objects 数量大于该值,则 server 端将只返回 max-keys 个 objects。
数据类型:字符串
默认值:1000
prefix 设定 bucket 中 objects 的前缀名,只有包含该前缀的 objects 才会返回。
数据类型:字符串
默认值:无

响应元素(Response Elements)

名称 描述
ListBucketResult 保存 Get Bucket 请求结果的容器.
类型:容器
子节点:Name, Prefix, Marker, MaxKeys, Delimiter, IsTruncated, Nextmarker, Contents
父节点:None
Name Bucket 名字
类型:字符串
父节点:ListBucketResult
Prefix 本次查询结果的开始前缀。
类型:字符串
父节点:ListBucketResult
Marker 标明这次 Get Bucket(List Object)的起点。
类型:字符串
父节点:ListBucketResult
Delimiter delimiter 是一个用于对 bucket 内具有共同前缀的 objects 进行聚合的分隔符。
类型:字符串
父节点:ListBucketResult
IsTruncated 指明是否所有的结果都已经返回; “true”表示本次没有返回全部结果;“false”表示本次已经返回了全部结果。
类型:枚举字符串
有效值:true、false
父节点:ListBucketResult
NextMarker 当一次返回不了全部结果(即响应中 的IsTruncated 元素值为 true)时,可以使用此字段中的键名作为 Marker 后续请求中的一个来获取下一组对象。
类型:字符串
父节点:ListBucketResult
Contents 保存每个返回 Object meta 的容器。
类型:容器
父节点:ListBucketResult
Key Object 的 Key 。
类型:字符串
父节点:ListBucketResult.Contents
LastModified Object 最后被修改的时间。
类型:时间
父节点:ListBucketResult.Contents
ETag Object 内容的 MD5 hash 值。
类型:字符串
父节点:ListBucketResult.Contents
Size Object 的字节数。
类型:字符串
父节点:ListBucketResult.Contents
Owner 保存 Bucket 拥有者信息的容器。
类型:容器
子节点:DisplayName, ID
父节点:ListBucketResult.Contents
ID Bucket 拥有者的用户 ID 。
类型:字符串
父节点:ListBucketResult.Contents.Owner
DisplayName Bucket 拥有者的名称。(目前和 ID 一致)。
类型:字符串
父节点:ListBucketResult.Contents.Owner
StorageClass Object 的存储类型,支持"3R"。
类型:字符串
父节点:ListBucketResult.Contents
CommonPrefixes 如果请求中指定了 delimiter 参数,则在 MSS 返回的响应中必须包含 CommonPrefixes 元素。该元素标明那些以 delimiter 结尾,并有共同 Prefix 的 object 名称的集合。
类型:字符串
父节点:ListBucketResult

细节分析

  1. 如果访问的 Bucket 不存在,包括试图访问因为命名不规范无法创建 的Bucket ,返回 404 Not Found 错误,错误码:NoSuchBucket。
  2. 如果没有访问该 Bucket 的权限,返回 403 Forbidden 错误,错误码:AccessDenied。
  3. 如果 max-keys 设定值比 MSS 系统上限值大,则系统会将按照上限值进行查找,上限值为1000。
  4. 如果 max-keys 没有赋值,则将默认为1000。
  5. 如果因为 max-keys 的设定无法一次得到所有结果,则该次结果会附加一个<NextMarker>,可以将<NextMarker>里面的值赋值给 marker ,下次查找时将会在给定值后继续查找,返回的结果将不包含 marker 给定的值。
  6. 如果把 prefix 设为某个文件夹名,就可以罗列以此 prefix 开头的文件,即该文件夹下递归的所有的文件和子文件夹。如果再把 delimiter 设置为 / 时,返回值就只罗列该文件夹下的文件,该文件夹下的子文件名返回在 CommonPrefixes 部分,子文件夹下递归的文件和文件夹不被显示。例如当不设置 delimiter 时,返回 error.html,index.html,page.html,page1.html,dir/,dir/index.html,相当于递归遍历 bucket 内部所有 object ,当设定 delimiter 为 / 时,将会返回 error.html,index.html,page.html,page1.html ,在<CommonPrefixes>里返回 dir/,相当于只遍历 Bucket 下一层 object 信息,不递归遍历所有 object。

示例

请求示例:

GET /mss-test-bucket/?delimiter=/ HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: AWS825a6cb3cbfb438b89e28fb66a944e19: CKRg5PA2xh2BE06af6lYpQaQQSc=
Connection: keep-alive
Host: mtmss.com
x-amz-date: Thu, 23Nov201708: 41: 03+0000

返回示例:

HTTP/1.1 200 OK
connection: keep-alive
content-length: 1448
content-type: application/xml;charset=utf-8
date: Thu, 23Nov201708: 38: 48GMT
server: Tengine
x-amz-id-2: c6c6c11d21f373e51af4b369cc17b7df
x-amz-request-id: 1511426328022908
x-ms-trans-id: 47d571e36a28fbfd2280e9701d9eb96a-1511426328019828
x-mss-trace-id: 310194632342865366


<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult>
    <Name>mss-test-bucket</Name>
    <Prefix></Prefix>
    <Marker></Marker>
    <MaxKeys>1000</MaxKeys>
    <Delimiter>/</Delimiter>
    <IsTruncated>false</IsTruncated>
    <Contents>
        <Key>error.html</Key>
        <LastModified>2017-09-27T09:21:01.000Z</LastModified>
        <ETag>b66afd2c4c6f009071544f4c631bf11e</ETag>
        <Size>205</Size>
        <Owner>
            <ID>0a044f031506503702567346</ID>
            <DisplayName>0a044f031506503702567346</DisplayName>
        </Owner>
        <StorageClass>3R</StorageClass>
    </Contents>
    <Contents>
        <Key>index.html</Key>
        <LastModified>2017-10-09T11:09:13.000Z</LastModified>
        <ETag>26cdfa42b4e185728ad5c8eca3549126</ETag>
        <Size>190</Size>
        <Owner>
            <ID>0a044f031506503702567346</ID>
            <DisplayName>0a044f031506503702567346</DisplayName>
        </Owner>
        <StorageClass>3R</StorageClass>
    </Contents>
    <Contents>
        <Key>page.html</Key>
        <LastModified>2017-09-27T09:21:01.000Z</LastModified>
        <ETag>cbba92827b553e8e68856b65e9724e86</ETag>
        <Size>16</Size>
        <Owner>
            <ID>0a044f031506503702567346</ID>
            <DisplayName>0a044f031506503702567346</DisplayName>
        </Owner>
        <StorageClass>3R</StorageClass>
    </Contents>
    <Contents>
        <Key>page1.html</Key>
        <LastModified>2017-09-27T09:21:01.000Z</LastModified>
        <ETag>ae20e9f7a51162275d8bb2dbb5767bb3</ETag>
        <Size>17</Size>
        <Owner>
            <ID>0a044f031506503702567346</ID>
            <DisplayName>0a044f031506503702567346</DisplayName>
        </Owner>
        <StorageClass>3R</StorageClass>
    </Contents>
    <CommonPrefixes>
        <Prefix>dir/</Prefix>
    </CommonPrefixes>
</ListBucketResult>

Get Bucket ACL

Get Bucket ACL用来获取某个Bucket的访问权限。

请求语法

GET /mss-test-bucket/?acl HTTP/1.1
Authorization: authorization string
Date: GMT Date
Host: mtmss.com

响应元素(Response Elements)

名称 描述
AccessControlPolicy 保存 Get Bucket ACL 结果的容器
类型:容器
父节点:None
Owner 保存 Bucket 拥有者信息的容器。
类型:容器
父节点:AccessControlPolicy
ID Bucket 拥有者的用户ID
类型:字符串
父节点:AccessControlPolicy.Owner
DisplayName Bucket 拥有者的名称(目前和ID一致)
类型:字符串
父节点:AccessControlPolicy.Owner
AccessControlList 存储 ACL 信息的容器
类型:容器
父节点:AccessControlPolicy
Grant 保存 Grantee 于 Permission 的容器
类型:容器
父节点:AccessControlPolicy.AccessControlList
Grantee 保存权限授予人的信息
类型:容器
父节点:AccessControlPolicy.AccessControlList.Grant
Permission 被授予人桶的权限
类型:字符串
有效值:FULL_CONTROL / READ
父节点:AccessControlPolicy.AccessControlList.Grant
URI 所有用户组信息。对这个组进行权限控制的话,所有的 AWS 注册账户或者匿名账户都会起作用。
类型:字符串
父节点:AccessControlPolicy.AccessControlList.Grant.Grantee

细节分析

  1. 只有Bucket的拥有者才能使用Get Bucket ACL这个接口。

示例

请求示例:

GET /mss-test-bucket/?acl HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:F0qsjrfma6v7nrO2vV2uGpnpqZQ=
Connection: keep-alive
Content-Length: 0
Date: Thu, 09 Nov 2017 05:19:18 GMT
Host: mtmss.com

返回示例:

HTTP/1.1 200 OK
Server: Tengine
Date: Thu, 09 Nov 2017 05:41:38 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 738
Connection: keep-alive
X-Amz-Id-2: 8c994c82ae2b5ec2b377707594f047d4
X-Amz-Request-Id: 1510206098466593
X-Mss-Trace-Id: 310188034052869154

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy>
  <Owner>
    <ID>mt_tenant_797157869</ID>
    <DisplayName>mt_tenant_797157869</DisplayName>
  </Owner>
  <AccessControlList>
    <Grant>
      <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
        <ID>mt_tenant_797157869</ID>
        <DisplayName>mt_tenant_797157869</DisplayName>
      </Grantee>
      <Permission>FULL_CONTROL</Permission>
    </Grant>
    <Grant>
      <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
        <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
      </Grantee>
      <Permission>READ</Permission>
    </Grant>
  </AccessControlList>
</AccessControlPolicy>

Get Bucket LifeCycle

Get Bucket Lifecycle用于查看Bucket的Lifecycle配置。

请求语法

GET /mss-test-bucket/?lifecycle HTTP/1.1
Authorization: authorization string
Date: GMT Date
Host: mtmss.com

响应元素(Response Elements)

名称 描述 备注
LifecycleConfiguration Lifecycle 配置的容器,最多可容纳5条规则。
类型:容器
子节点:Rule
父节点:无
Rule 表述一条规则
类型:容器
子节点:ID,Filter,Expiration
父节点:LifecycleConfiguration
ID 规则唯一的ID,最多由255字节组成。当用户没有指定,或者该值为空时,MSS 会返回 S3ErrLifecycleIDEmpty。
类型:字符串
子节点:无
父节点:Rule
Filter 描述过滤器标识生命周期规则适用的对象的子集的元素的容器。如果指定一个空的过滤器(),则该规则将应用于存储桶中的所有对象。
类型:容器
子节点:Prefix
父节点:Rule
Prefix 指定规则所适用的前缀。只有匹配前缀的对象才可能被该规则所影响。不可重叠。
类型:字符串
子节点:无
父节点:Filter
Expiration 指定 Object 规则的过期属性。
类型:容器
子节点:Days 或 Date
父节点:Rule
Days 指定多少天后执行规则的天数。
类型:正整数
父节点:Expiration
Days和Date只会显示其一
Date 指定执行规则的日期。
日期值必须符合 ISO 8601 格式。时间总是午夜 UTC。
类型:字符串
父节点:Expiration
Days和Date只会显示其一

细节分析

  1. 只有 Bucket 的拥有者才能查看 Bucket 的 Lifecycle 配置,否则返回 403 Forbidden 错误,错误码:AccessDenied。
  2. 如果 Bucket 或 Lifecycle 不存在,返回 404 Not Found 错误,错误码:NoSuchBucket或NoSuchLifecycle。

示例

请求示例:

GET /mss-test-bucket/?lifecycle HTTP/1.1
Host: mtmss.com
Content-Length: 0
x-amz-date: Thu, 23Nov201708: 02: 34+0000
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:JGWoOe89Qo9EEErQIkKR4z1Fdjo=

返回示例:

HTTP/1.1 200 OK
connection: keep-alive
content-length: 148
content-type: text/plain;charset=utf-8
date: Thu, 23Nov201708: 00: 18GMT
server: Tengine
x-amz-id-2: ff0254a2156416b6d7ae876d490ee036
x-amz-request-id: 1511424018344796
x-mss-trace-id: 310470609759127464

<?xml version="1.0" ?>
<LifecycleConfiguration>
    <Rule>
        <ID>id1</ID>
        <Filter>
            <Prefix/>
        </Filter>
        <Expiration>
            <Days>30</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>

Get Bucket Policy

Get Bucket Policy 操作可以获取一个 bucket 的 policy 策略。可以基于此接口获取 bucket 的 referer。

请求语法

GET /mss-test-bucket/?policy HTTP/1.1
Host: mtmss.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: authorization string

细节分析

  1. 获取referer步骤:
  • 基于 GET Bucket Policy 获取policy json结构体
  • 如果返回404则用户没有设置过 referer
  • 返回200是ok,解析 policy json,通过过滤出包含 Condition map而且包含“aws:Referer”的Statement
  • Effect 为“Allow” && "StringLike"的是白名单,"aws:Referer"对应的值是对应用户设置的白名单列表,在列表中用户设置的域名后面都添加了\*后缀通配符,另外空字符串表示空 referer
  • Effect 为“Allow” && "StringNotLike"的是黑名单。

示例

请求示例

GET /mss-test-bucket/?policy HTTP/1.1
Host: mtmss.com
Date: Tue, 04 Apr 2010 20:34:56 GMT
Authorization: authorization string

响应示例

HTTP/1.1 204 No Content
Server: MeituanStorageService
Date: Tue, 06 Jun 2017 06:53:41 GMT
Content-Type: application/json; charset=utf-8
Content-Length: ****
X-Amz-Id-2: efd53690054e962b78729d0cb3e8723f
X-Amz-Request-Id: 1496732021257213
X-Mss-Trace-Id: 1175475084336181769

{
    "Version":"2012-10-17",
    "Statement":[
        {
            "Sid":"",
            "Effect":"Allow",
            "Principal": {"AWS": "*"},
            "Action":["s3:PutObject","s3:PutObjectAcl"],
            "Resource":["arn:aws:s3:::examplebucket/*"]
        },
        {
            "Sid":"",
            "Effect":"Allow",
            "Principal":{"AWS": "*"},
            "Action":["s3:GetObject"],
            "Resource":["arn:aws:s3:::examplebucket/*"],
            "Condition":{
                "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*", ""]}
            }
        },
        {
            "Sid":"Allow get requests without referrer",
            "Effect":"Deny",
            "Principal":{"AWS": "*"},
            "Action":["s3:GetObject"],
            "Resource":["arn:aws:s3:::examplebucket/*"],
            "Condition":{
                        "StringNotLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*",""]}
            }
         }
    ]
}

Head Bucket

HeadBucket 用于判断当前 Bucket 是否存在或者是否有权限访问该 Bucket。

请求语法

HEAD /mss-test-bucket/ HTTP/1.1
Authorization: authorization string
Date: GMT Date
Host: mtmss.com

细节分析

  1. 如果可以访问该 Bucket,则返回 200 OK。
  2. 如果该 Bucket 不存在,则返回 404 Not Found。
  3. 如果没有权限访问该Bucket,则返回 403 Forbidden。

示例

请求示例:

HEAD /mss-test-bucket/ HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:zEXSjHUhaY7f8joVoeJ6mnDBIr0=
Connection: keep-alive
Date: Wed, 08 Nov 2017 05:50:54 GMT
Host: mtmss.com

返回示例:

HTTP/1.1 200 OK
Server: Tengine
Date: Wed, 08 Nov 2017 06:15:51 GMT
Connection: keep-alive
X-Amz-Id-2: 8c994c82ae2b5ec2b377707594f047d4
X-Amz-Request-Id: 1510121751365670
X-Mss-Trace-Id: 310188033968522053
Content-Length: 0

Delete Bucket

Delete Bucket用于删除某个Bucket。

请求语法

DELETE /mss-test-bucket/ HTTP/1.1
Authorization: authorization string
Date: GMT Date
Host: mtmss.com

细节分析

  1. 如果 Bucket 不存在,返回 404 错误。错误码:NoSuchBucket。
  2. 为了防止误删除的发生,MSS 不允许用户删除一个非空的 Bucket 。
  3. 如果试图删除一个不为空的 Bucket ,返回 409 Conflict 错误,错误码:BucketNotEmpty。
  4. 只有 Bucket 的拥有者才能删除这个 Bucket 。如果试图删除一个没有对应权限的 Bucket ,返回 403 Forbidden 错误。错误码:AccessDenied。

示例

请求示例:

DELETE /mss-test-bucket/ HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:zEXSjHUhaY7f8joVoeJ6mnDBIr0=
Connection: keep-alive
Date: Wed, 08 Nov 2017 05:50:54 GMT
Host: mtmss.com

返回示例:

HTTP/1.1 204 No Content
Server: Tengine
Date: Wed, 08 Nov 2017 06:15:51 GMT
Connection: keep-alive
X-Amz-Id-2: 8c994c82ae2b5ec2b377707594f047d4
X-Amz-Request-Id: 1510121751365670
X-Mss-Trace-Id: 310188033968522053

Delete Bucket LifeCycle

通过 Delete Bucket Lifecycle 来删除指定 Bucket 的生命周期配置。

请求语法

DELETE /mss-test-bucket/?lifecycle HTTP/1.1
Authorization: authorization string
Date: GMT Date
Host: mtmss.com

细节分析

  1. 本操作会删除指定 Bucket 的所有的生命周期规则。此后,该 Bucket 中不会有 Object 被自动删除。
  2. 只有 Bucket 的拥有者才能删除 Bucket 的 Lifecycle 配置。如果试图操作一个不属于你的 Bucket,MSS 返回 403 Forbidden 错误,错误码:AccessDenied。

示例

请求示例:

DELETE /mss-test-bucket/?lifecycle HTTP/1.1
Host: mtmss.com
Content-Length: 0
x-amz-date: Thu, 23Nov201708: 02: 34+0000
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:JGWoOe89Qo9EEErQIkKR4z1Fdjo=

返回示例:

HTTP/1.1 204 No Content
connection: keep-alive
content-length: 0
content-type: text/plain;charset=utf-8
date: Thu, 23Nov201708: 00: 18GMT
server: Tengine
x-amz-id-2: ff0254a2156416b6d7ae876d490ee036
x-amz-request-id: 1511424018344796
x-mss-trace-id: 310470609759127464

Put BucketDomain

PutBucketDomain操作可以将一个Bucket绑定一个自定义域名。

请求语法

PUT /mss-test-bucket/?domain HTTP/1.1
Host: mtmss.com
Content-Length: Length
Date: GMT Date
Authorization: authorization string

<DescribeDomain>
    <!-- domain configuration information. -->
</DescribeDomain>

请求参数(Request Parameters)

名称 描述 是否必须
DescribeDomain 请求的容器
类型: 容器
父元素: 无
Domains 子元素Domain的父元素
类型: 容器
父元素: DescribeDomain
Domain 子元素Domain的父元素
类型: 容器
父元素: DescribeDomain.Domains
DomainName 自定义域名
类型: 字符串
父元素: DescribeDomain.Domains.Domain

响应元素(Response Elements)

名称 描述
元素描述

细节分析

1.同一个bucket绑定的自定义域名上限为20。 2.每次PUT请求只能绑定一个自定义域名,如果上传了多个域名,s3只会绑定第一个域名,其他域名则直接丢弃。 3.如果域名已经被其他用户占用,则返回DomainAlreadyExists。 4.s3不检查自定义域名可用性也不检查自定义域名格式,用户需要自己控制。

示例

请求示例:

PUT /mss-test-bucket/?domain HTTP/1.1
Host: mtmss.com
Content-Length: 151
Date: Fri, 10 Nov 2017 05:09:35 GMT
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:7/Y1cOcYuwHBa+/sH1q7A03FGYA=

<DescribeDomain>
    <Domains>
        <Domain>
            <DomainName>barmbamos.com</DomainName>
        </Domain>
    </Domains>
</DescribeDomain>

响应示例:

HTTP/1.1 204 OK
content-length: 0
content-type: text/plain; charset=utf-8
date: Fri, 10 Nov 2017 13:32:40 GMT
server: MeituanStorageService
x-amz-id-2: 0e0fca7b427953e4604292d4c0b05f1d
x-amz-request-id: 1510291960036153

Get BucketDomain

GetBucketDomain操作可以获取一个bucket绑定的所有自定义域名。

请求语法

GET /mss-test-bucket/?domain HTTP/1.1
Host: mtmss.com
Content-Length: Length
Date: GMT Date
Authorization: authorization string

请求参数(Request Parameters)

响应元素(Response Elements)

名称 描述 是否必须
DescribeDomain 请求的容器
类型: 容器
父元素: 无
Domains 子元素Domain的父元素
类型: 容器
父元素: DescribeDomain
Domain 子元素Domain的父元素
类型: 容器
父元素: DescribeDomain.Domains
DomainName 自定义域名
类型: 字符串
父元素: DescribeDomain.Domains.Domain

细节分析

1.使用GET操作时,会返回用户对于该Bucket绑定的所有自定义域名,如果没有绑定自定义域名,则返回空列表。 2.如果bucket不存在,则返回NoSuchBucket。

示例

请求示例:

GET /mss-test-bucket/?domain HTTP/1.1
Host: mtmss.com
Content-Length: 0
Date: Fri, 10 Nov 2017 05:09:35 GMT
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:7/Y1cOcYuwHBa+/sH1q7A03FGYA=

响应示例:

HTTP/1.1 200 OK
content-length: 206
content-type: text/plain; charset=utf-8
date: Fri, 10 Nov 2017 13:32:40 GMT
server: MeituanStorageService
x-amz-id-2: 0e0fca7b427953e4604292d4c0b05f1d
x-amz-request-id: 1510291960036153
x-mss-trace-id: 1175445411082170596

<DescribeDomain>
  <Domains>
    <Domain>
      <DomainName>barmbamos.com</DomainName>
    </Domain>
    <Domain>
      <DomainName>barmbamos1.com</DomainName>
    </Domain>
  </Domains>
</DescribeDomain>

Delete BucketDomain

DeleteBucketDomain操作可以将一个Bucket绑定的域名解绑。

请求语法

DELETE /mss-test-bucket/?domain HTTP/1.1
Host: mtmss.com
Content-Length: Length
Date: GMT Date
Authorization: authorization string

<DescribeDomain>
    <!-- domain configuration information. -->
</DescribeDomain>

请求参数(Request Parameters)

名称 描述 是否必须
DescribeDomain 请求的容器
类型: 容器
父元素: 无
Domains 子元素Domain的父元素
类型: 容器
父元素: DescribeDomain
Domain 子元素Domain的父元素
类型: 容器
父元素: DescribeDomain.Domains
DomainName 自定义域名
类型: 字符串
父元素: DescribeDomain.Domains.Domain

响应元素(Response Elements)

名称 描述
元素描述

细节分析

1.只有bucket拥有者才能删除bucket绑定的自定义域名。 2.用户如果删除了不存在的域名,则返回NoSuchDomain。 3.当bucket不存在时,返回NoSuchBucket。 4.每次bucket与自定义解绑只能解绑一个,如果传递多个解绑域名,s3只会处理第一个。

示例

请求示例:

DELETE /mss-test-bucket/?domain HTTP/1.1
Host: mtmss.com
Content-Length: 151
Date: Fri, 10 Nov 2017 05:09:35 GMT
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:7/Y1cOcYuwHBa+/sH1q7A03FGYA=

<DescribeDomain>
    <Domains>
        <Domain>
            <DomainName>barmbamos.com</DomainName>
        </Domain>
    </Domains>
</DescribeDomain>

响应示例:

content-length: 0
content-type: text/plain; charset=utf-8
date: Fri, 10 Nov 2017 13:32:40 GMT
server: MeituanStorageService
x-amz-id-2: 0e0fca7b427953e4604292d4c0b05f1d
x-amz-request-id: 1510291960036153
x-mss-trace-id: 1175445411082170596

Put BucketWebsite

PutBucketWebsite操作可以将一个Bucket设置成静态网站托管模式。

请求语法

PUT /mss-test-bucket/?website HTTP/1.1
Host: mtmss.com
Content-Length: Length
Date: GMT Date
Authorization: authorization string

<WebsiteConfiguration>
  <!-- website configuration information. -->
</WebsiteConfiguration>

请求参数(Request Parameters)

名称 描述 是否必须
WebsiteConfiguration 请求的容器
类型: 容器
父元素: 无
Suffix 索引文件名(请求目录URL时返回,默认为index.html)
类型:字符串
父元素: WebsiteConfiguration.IndexDocument
Key 返回404错误时使用的文件名
类型:字符串
父元素: WebsiteConfiguration.ErrorDocument
注意:当ErrorDocument设置时,必需
有条件
IndexDocument 子元素Suffix的父元素
类型: 容器
父元素: WebsiteConfiguration
ErrorDocument 子元素Key的父元素
类型: 容器
父元素: WebsiteConfiguration

响应元素(Response Elements)

名称 描述
元素描述

细节分析

1.所谓静态网站是指所有的网页都由静态内容构成,包括客户端执行的脚本,例如JavaScript;MSS不支持涉及到需要服务器端处理的内容,例如PHP,JSP,APS.NET等。 2.用户将一个Bucket设置成静态网站托管模式时,必须指定索引页面,错误页面则是可选的。 3.用户将一个Bucket设置成静态网站托管模式时,指定的索引页面和错误页面是该Bucket内的一个object。 4.开启静态网站模式后需要通过静态网站域名进行访问,该域名只能接受Get与Head操作。

示例

请求示例:

PUT /mss-test-bucket/?website HTTP/1.1
Host: mtmss.com
Content-Length: 196
Date: Fri, 10 Nov 2017 05:09:35 GMT
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:7/Y1cOcYuwHBa+/sH1q7A03FGYA=

<WebsiteConfiguration>
    <IndexDocument>
        <Suffix>index.html</Suffix>
    </IndexDocument>
    <ErrorDocument>
        <Key>error.html</Key>
    </ErrorDocument>
</WebsiteConfiguration>

响应示例:

HTTP/1.1 204 OK
content-length: 0
content-type: text/plain; charset=utf-8
date: Fri, 10 Nov 2017 13:32:40 GMT
server: MeituanStorageService
x-amz-id-2: 0e0fca7b427953e4604292d4c0b05f1d
x-amz-request-id: 1510291960036153
x-mss-trace-id: 1175445411082170596

Get BucketWebsite

GetBucketWebsite操作用于查看bucket的静态网站托管状态。

请求语法

GET /mss-test-bucket/?website HTTP/1.1
Host: mtmss.com
Content-Length: Length
Date: GMT Date
Authorization: authorization string

请求参数(Request Parameters)

响应元素(Response Elements)

名称 描述 是否必须
WebsiteConfiguration 请求的容器
类型: 容器
父元素: 无
Suffix 索引文件名(请求目录URL时返回,默认为index.html)
类型:字符串
父元素: WebsiteConfiguration.IndexDocument
Key 返回404错误时使用的文件名
类型:字符串
父元素: WebsiteConfiguration.ErrorDocument
注意:当ErrorDocument设置时,必需
有条件
IndexDocument 子元素Suffix的父元素
类型: 容器
父元素: WebsiteConfiguration
ErrorDocument 子元素Key的父元素
类型: 容器
父元素: WebsiteConfiguration

细节分析

1.如果Bucket不存在,返回404 no content错误。错误码:NoSuchBucket。 2.只有Bucket的拥有者才能查看Bucket的静态网站托管状态,否则返回403 Forbidden错误,错误码:AccessDenied。 3.如果源Bucket未设置静态网站托管功能,MSS会返回404错误,错误码为:NoSuchWebsiteConfiguration。

示例

请求示例:

GET /mss-test-bucket/?website HTTP/1.1
Host: mtmss.com
Content-Length: 0
Date: Fri, 10 Nov 2017 05:09:35 GMT
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:7/Y1cOcYuwHBa+/sH1q7A03FGYA=

响应示例:

HTTP/1.1 200 OK
content-length: 196
content-type: text/plain; charset=utf-8
date: Fri, 10 Nov 2017 13:32:40 GMT
server: MeituanStorageService
x-amz-id-2: 0e0fca7b427953e4604292d4c0b05f1d
x-amz-request-id: 1510291960036153
x-mss-trace-id: 1175445411082170596

<WebsiteConfiguration>
    <IndexDocument>
        <Suffix>index.html</Suffix>
    </IndexDocument>
    <ErrorDocument>
        <Key>errorDocument.html</Key>
    </ErrorDocument>
</WebsiteConfiguration>

Delete BucketWebsite

DeleteBucketWebsite操作用于关闭bucket的静态网站托管模式。

请求语法

DELETE /mss-test-bucket/?website HTTP/1.1
Host: mtmss.com
Content-Length: Length
Date: GMT Date
Authorization: authorization string

请求参数(Request Parameters)

响应元素(Response Elements)

细节分析

1.如果Bucket不存在,返回404 no content错误,错误码:NoSuchBucket。 2.只有Bucket的拥有者才能关闭Bucket的静态网站托管模式。如果试图操作一个不属于你的Bucket,mss返回403 Forbidden错误,错误码:AccessDenied。

示例

请求示例:

DELETE /mss-test-bucket/?website HTTP/1.1
Host: mtmss.com
Content-Length: 0
Date: Fri, 10 Nov 2017 05:09:35 GMT
Authorization: AWS 825a6cb3cbfb438b89e28fb66a944e19:7/Y1cOcYuwHBa+/sH1q7A03FGYA=

响应示例:

HTTP/1.1 200 OK
content-length: 0
content-type: text/plain; charset=utf-8
date: Fri, 10 Nov 2017 13:32:40 GMT
server: MeituanStorageService
x-amz-id-2: 0e0fca7b427953e4604292d4c0b05f1d
x-amz-request-id: 1510291960036153
x-mss-trace-id: 1175445411082170596