5. 桶的操作

桶(Bucket)是对象的容器,所有的对象都必须位于桶里面,在整个系统里面桶名称唯一,在桶内部,对象key唯一。每个用户最多允许创建100个桶。

5.1. DELETE Bucket

5.1.1. 描述

删除一个桶,只能删除无对象的桶,如果桶非空,需要先删除桶内的对象。

5.1.2. 语法

DELETE / HTTP/1.1
HOST: ${BucketName}.${endpoint}
Date: ${date}
Authorization: ${signature}

5.1.3. 示例

Request

DELETE / HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Wed, 01 Mar 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

5.1.4. 细节描述

  1. 如果Bucket不存在,返回404 no content错误。错误码:NoSuchBucket。
  2. 如果试图删除一个不为空的Bucket,返回409 Conflict错误。错误码:BucketNotEmpty。
  3. 只有Bucket的拥有者才能删除这个Bucket。如果试图删除一个没有对应权限的Bucket,返回403 Forbidden错误。错误码:AccessDenied。

5.2. GET Bucket (List Objects)

5.2.1. 描述

列出桶的对象,可以根据简单的检索条件,返回对象列表的子集。

5.2.2. 语法

GET / HTTP/1.1
HOST: ${BucketName}.${endpoint}
Date: ${date}
Authorization: ${signature}

5.2.3. 请求参数

参数 描述 是否必须
delimiter
分界符,用于做groupby操作
类型:字符串
默认:无
No
marker
字典序的起始标记,只列出该标记之后的部分
类型:字符串
默认:无
No
max-keys
限定返回的数量,返回的结果小于或等于该值
类型:数字
默认:100
取值范围:[0-1000]
No
prefix
只返回Key以特定前缀开头的那些对象。可以使用前缀把一个桶里面的对象分成不同的组,类似文件系统的目录一样。
类型:字符串
默认:无
No

5.2.4. 响应元素

元素 描述
Contents
对象元数据,代表一个对象描述
类型:容器
父节点:ListBucketObjects
子节点:Key,LastModified,Size,Etag
CommonPrefixes
只有当指定了delimiter分界符时,才会有这个响应
类型:字符串
父节点:ListBucketObjects
delimiter
分界符
类型:字符串
父节点:ListBucketObjects
DisplayName
对象的拥有者
类型:字符串
父节点:ListBucketObjects.Contents.Owner
Etag
对象的哈希描述
类型:字符串
父节点:ListBucketObjects.Contents
ID
对象拥有者的ID
类型:字符串
父节点:ListBucketObjects.Contents.Owner
IsTruncated
是否截断,如果因为设置了limit导致不是所有的数据集都返回,则该值设置为true
类型:布尔值
父节点:ListBucketObjects
Key
对象的名称
类型:字符串
父节点:ListBucketObjects.Contents
LastModified
对象最后修改日期和时间
类型:日期 格式:yyyy-MM-dd”T”HH:mm:ss.SSSZ
父节点:ListBucketObjects.Contents
Marker
列表的起始位置,等于请求参数设置的Marker值
类型:字符串
父节点:ListBucketObjects
NextMark
下一次分页的起点
类型:字符串
父节点:ListBucketObjects
MaxKeys
请求的对象个数限制
类型:数字
父节点:ListBucketObjects
Name
请求的桶名称
类型:字符串
父节点:ListBucketObjects
Owner
桶拥有者
类型:容器
父节点:ListBucketObjects.contents | CommonPrefixes
子节点:DisplayName|ID
Prefix
请求的对象的Key的前缀
类型:字符串
父节点:ListBucketObjects
Size
对象的大小字节数
类型:数字
父节点:ListBucketObjects.contents
StorageClasss
存储级别
类型:字符串
父节点:ListBucketObjects.contents

5.2.5. 示例

Request

GET /?max-keys=2&prefix=user HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Wed, 01 Mar 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:56 GMT
Content-Type: application/xml
Content-Length: 302
Connection: close
Server: NOS

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult>
    <Name>dream</Name>
    <Prefix>user</Prefix>
    <MaxKeys>2</MaxKeys>
    <NextMarker>user/yao</NextMarker>
    <IsTruncated>true</IsTruncated>
    <Contents>
            <Key>user/lin</Key>
            <LastModified>2012-01-01T12:00:00.000Z</LastModified>
            <Etag>258ef3fdfa96f00ad9f27c383fc9acce</Etag>
            <Size>143663</Size>
        <StorageClass>Standard</StorageClass>
    </Contents>
    <Contents>
            <Key>user/yao</Key>
            <LastModified>2012-01-01T12:00:00.000Z</LastModified>
            <Etag>828ef3fdfa96f00ad9f27c383fc9ac7f</Etag>
            <Size>423983</Size>
            <StorageClass>Standard</StorageClass>
    </Contents>
</ListBucketResult>

5.2.6. 细节描述

  1. Object中用户自定义的Meta,在GetBucket请求时不会返回。
  2. 如果访问的Bucket不存在,包括试图访问因为命名不规范无法创建的Bucket,返回404 Not Found错误,错误码:NoSuchBucket。
  3. 如果没有访问该Bucket的权限,返回403 Forbidden错误,错误码:AccessDenied。
  4. 如果因为max-keys 的设定无法一次完成listing,返回结果会附加一个<NextMarker>,提示继续listing可以以此为marker。NextMarker中的值仍在list结果之中。
  5. 在做条件查询时,即使marker实际在列表中不存在,返回也从符合marker字母排序的下一个开始打印。如果max-keys小于0或者大于1000,将返回400 Bad Request错误。错误码:InvalidArgument。
  6. 若prefix,marker,delimiter参数不符合长度要求,返回400 Bad Request。错误码:InvalidArgument。prefix,marker,delimiter用来实现分页显示效果,参数的长度必须小于1000字节。

5.3. GET Bucket acl

5.3.1. 描述

返回桶的ACL配置。

5.3.2. 语法

GET /?acl HTTP/1.1
HOST: ${BucketName}.${endpoint}
Date: ${date}
Authorization: ${signature}

5.3.3. 响应头

Header 描述
x-nos-acl
设置桶的访问控制列表
类型:字符串
有效值:private|public-read

5.3.4. 示例

Request

GET /?acl HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Wed, 01 Mar 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
x-nos-acl: private
Connection: close
Server: NOS

5.3.5. 细节描述

  1. 如果Bucket不存在,返回404 no content错误。错误码:NoSuchBucket。

2) 只有Bucket的拥有者才能获取这个Bucket的ACL信息。如果试图获取一个没有对应权限的 Bucket,返回403 Forbidden错误。错误码:AccessDenied。

5.4. GET Bucket location

5.4.1. 描述

获取桶的地理分区信息,地理分区信息在建通时指定,见PUT Bucket

5.4.2. 语法

GET /?location HTTP/1.1
HOST: ${BucketName}.${endpoint}
Date: ${date}
Authorization: ${signature}

5.4.3. 响应元素

Element 描述
LocationConstraint
桶的地理分区
类型:字符串
有效值:HZ | BJ | GZ
父节点:无

5.4.4. 示例

Request

GET /?location HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Fri, 10 Feb 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

<?xml version="1.0" encoding="UTF-8"?>
<LocationConstraint>HZ</LocationConstraint>

5.4.5. 细节描述

  1. 如果Bucket不存在,返回404 no content错误。错误码:NoSuchBucket。

2) 只有Bucket的拥有者才能获取这个Bucket的Location信息。如果试图获取一个没有对应 权限的Bucket,返回403 Forbidden错误。错误码:AccessDenied。

5.5. HEAD Bucket

5.5.1. 描述

这个接口主要用于判断桶是否存在,以及是否有权限访问。

5.5.2. 语法

HEAD / HTTP/1.1
HOST: ${BucketName}.${endpoint}
Date: ${date}
Authorization: ${signature}

5.5.3. 示例

Request

HEAD / HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Fri, 10 Feb 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE
Connection: Keep-Alive

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

5.5.4. 细节描述

1) 不论正常返回200 OK还是非正常返回,Head Bucket都不返回消息体。所有桶相关信息都 包含在HTTP返回头中。 2) 如果Bucket不存在,返回404 no content错误。错误码:NoSuchBucket。 3) 只有Bucket的拥有者才能执行 HEAD Bucket操作。如果试图对一个没有对应权限的Bucket 进行该操作,返回403 Forbidden错误。错误码:AccessDenied。

5.6. List Bucket

5.6.1. 描述

列出用户创建的所有桶。

5.6.2. 语法

GET / HTTP/1.1
HOST: ${endpoint}
Date: ${date}
Authorization: ${signature}

5.6.3. 响应元素

Element 描述
CreationDate
桶创建的日期
类型:时间戳
格式:yyyy-MM-dd”T”HH:mm:ss.SSSZ(日期+T+时间+时区)(Z=Zulu Time Zone)
父节点:ListAllMyBucketsResult.Buckets.Bucket
DisplayName
桶所有者的名称
类型:字符串
父节点:ListAllMyBucketsResult.Owner
ID
桶所有者的ID
类型:字符串
父节点:ListAllMyBucketsResult.Owner
ListAllMyBucketsResult
响应容器
类型:容器
子节点:Owner,Buckets
Name
桶名称
类型:字符串
父节点:ListAllMyBucketsResult.Buckets.Bucket
Bucket
代表一个桶的信息
类型:容器
父节点:ListAllMyBucketsResult.Buckets
子节点:Bucket
Buckets
多个桶信息的容器
类型:容器
父节点:ListAllMyBucketsResult
子节点:Bucket

5.6.4. 示例

Request

GET / HTTP/1.1
HOST: nos-eastchina1.126.net
Date: Fri, 10 Feb 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult>
    <Owner>
        <ID>bcaf1ffd86f461ca5fb16fd081034f</ID>
        <DisplayName>photo</DisplayName>
    </Owner>
    <Buckets>
            <Bucket>
            <Name>dream</Name>
            <CreationDate>2012-03-03T16:45:09:000Z</CreationDate>
            </Bucket>
            <Bucket>
            <Name>photo</Name>
            <CreationDate>2012-03-03T16:41:58:000Z</CreationDate>
            </Bucket>
    </Buckets>
</ListAllMyBucketsResult>

5.6.5. 细节描述

  1. List Bucket是NOS操作入口,是最上层的接口。

2) List Bucket只对验证通过的用户有效,如果请求中没有用户验证信息(即匿名访问), 返回403 Forbidden。错误码:AccessDenied。

5.7. PUT Bucket

5.7.1. 描述

创建一个新的桶,桶名称(BucketName)系统全局唯一,如果有重复,则按照该桶是否属于调 用者,返回BucketAlreadyOwnedByYou或者BucketAlreadyExist两种错误码。

5.7.2. 语法

PUT / HTTP/1.1
HOST: ${BucketName}.${endpoint}
Content-Length: ${length}
Date: ${date}
Authorization: ${signature}

5.7.3. 请求头

Header 描述 是否必须
x-nos-acl
设置桶的访问控制列表
类型:字符串
有效值:private|public-read
默认:private
No

5.7.4. 请求元素

Header 描述 是否必须
CreateBucketConfiguration
建桶配置
类型:容器
No
LocationConstraint
指定一个地理分区
类型:枚举
有效值:HZ | BJ | GZ
默认:HZ
No

5.7.5. 示例

Request

PUT / HTTP/1.1
HOST: dream.nos-eastchina1.126.net
x-nos-acl: public
Content-Length: 123
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

<CreateBucketConfiguration >
    <LocationConstraint>BJ</LocationConstraint>
</CreateBucketConfiguration >

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

5.7.6. 细节描述

  1. Bucket命名请遵循命名规范,否则返回400 Bad Request。错误码:InvalidBucketName。
  2. NOS支持分区部署,但是如果尝试在一个尚未建立的分区上建桶,返回404 Not Found,错误码:NoSuchZone。
  3. 如果请求的Bucket已经存在,并且请求者是所有者,返回409 Conflict,错误码:BucketAlreadyOwnedByYou。
  4. 如果请求的Bucket已经存在,但是不是请求者所拥有的,返回409 Conflict。错误码:BucketAlreadyExist。
  5. 如果想创建的Bucket不符合命名规范,返回400 Bad Request消息。错误码:InvalidBucketName。
  6. 如果用户发起PUT Bucket请求的时候,没有传入用户验证信息,返回403 Forbidden消息。错误码:AccessDenied。
  7. 如果PutBucket的时候发现已经超过Bucket最大创建数时,返回400 Bad Request消息。错误码:TooManyBuckets。
  8. 如果没有指定访问权限,即x-nos-acl,则默认使用”private”权限。
  9. 如果没有指定Location,则默认使用”HZ”分区。
  10. 如果HTTP请求的BODY XML格式有误,返回400 Bad Request消息。错误码:MalformedXML。
  11. HTTP请求头Content-Length必须,否则返回411 Length Required消息。错误码:MissingContentLength。

5.8. PUT Bucket acl

5.8.1. 描述

设置桶的访问控制属性。

5.8.2. 语法

PUT /?acl HTTP/1.1
HOST: ${BucketName}.${endpoint}
Content-Length: ${length}
Date: ${date}
Authorization: ${signature}
x-nos-acl: public-read

5.8.3. 请求头

Header 描述
x-nos-acl
设置桶的访问控制列表
类型:字符串
有效值:private | public-read

5.8.4. 示例

Request

PUT /?acl HTTP/1.1
HOST: dream.nos-eastchina1.126.net
x-nos-acl: private
Date: Wed, 01 Mar 2012 21:34:55 GMT
Content-Length: 0
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

5.8.5. 细节描述

  1. 如果Bucket存在,发送时带的权限和已有权限不一样,并且请求发送者是Bucket拥有者时,该请求不会改变Bucket内容,但是会更新权限。
  2. 如果请求中没有”x-nos-acl”头,并且该Bucket已存在,并属于该请求发起者,则维持原Bucket权限不变。
  3. 如果Bucket不存在,返回404 no content错误。错误码:NoSuchBucket。
  4. 只有Bucket的拥有者才能设置这个Bucket的ACL信息。如果试图设置一个没有对应权限的Bucket,返回403 Forbidden错误。错误码:AccessDenied。
  5. HTTP请求头Content-Length必须,否则返回411 Length Required消息。错误码:MissingContentLength。

5.9. PUT Bucket Default404

5.9.1. 描述

设置桶的默认404对象,即设置当访问桶中一个对象不存在时,期望默认返回的对象内容。(注意:如果返回了桶的默认对象,返回值依然为404)

5.9.2. 语法

PUT /?default404 HTTP/1.1
HOST: ${BucketName}.${endpoint}
Content-Length: ${length}
Date: ${date}
Authorization: ${signature}

<Default404Configuration>
    <Key>${Key}</Key>
</Default404Configuration>

5.9.3. 请求元素

Header 描述 是否必须
Key
设置桶的默认404对象(当该值为空时,表示不设置)
类型:字符串
父节点:Default404Configuration
Yes
Default404Configuration
桶默认404对象设置容器
类型:容器
子节点:Key
Yes

5.9.4. 示例

设置一个桶的默认404对象

Request

PUT /? default404 HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Fri, 10 Feb 2012 21:34:55 GMT
Content-Length: 124
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

<Default404Configuration>
    <Key>default.404</Key>
</Default404Configuration>

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Fri, 10 Feb 2012 21:34:58 GMT
Connection: close
Server: NOS

删除一个桶的默认404对象

Request

PUT /? default404 HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Fri, 10 Feb 2012 21:34:55 GMT
Content-Length: 124
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

<Default404Configuration>
    <Key></Key>
</Default404Configuration>

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Fri, 10 Feb 2012 21:34:58 GMT
Connection: close
Server: NOS

5.10. Get Bucket Default 404

5.10.1. 描述

获取桶的默认404对象名

5.10.2. 语法

GET /?default404 HTTP/1.1
HOST: ${BucketName}.${endpoint}
Date: ${date}
Authorization: ${signature}

5.10.3. 响应元素

Element 描述 是否必须
Key
设置桶的默认404对象(当该值为空时,表示不设置)
类型:字符串
父节点:Default404Configuration
Yes
Default404Configuration
桶默认404对象设置容器
类型:容器
子节点:Key
Yes

5.10.4. 示例

Request

GET /?default404 HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Fri, 10 Feb 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

<Default404Configuration>
    <Key>default.404</Key>
</Default404Configuration>

5.11. Put Bucket Website

5.11.1. 描述

将一个bucket设置成静态网站托管模式。

5.11.2. 语法

PUT /?website HTTP/1.1
Host: ${BucketName}.${endpoint}
Content-Length: ${length}
Date: ${date}
Authorization: ${signature}
Content-MD5: ${md5}

<?xml version="1.0" encoding="UTF-8"?>
<WebsiteConfiguration>
    <IndexDocument>
        <Suffix>{suffix}</Suffix>
    </IndexDocument>
    <ErrorDocument>
        <Key>{key}</Key>
    </ErrorDocument>
</WebsiteConfiguration>

5.11.3. 请求元素

Element 描述 是否必须
IndexDocument
子元素Suffix的父元素
Yes
Suffix
索引文件名,不能为空。例如索引文件设置为index.html,则访问mybucket.nos.netease.com/mydir/这样的目录URL请求的时候默认都相当于访问mybucket.nos.netease.com/index.html。
类型:字符串类型,最长1000个字符
有IndexDocument时必须
ErrorDocument
子元素Key的父元素
No
Key
文件不存在时(404)使用的文件名, String类型,最长1000个字符
当有ErrorDocument时,必需

5.11.4. 示例

Request

PUT /?website HTTP/1.1
Host: dream.nos-eastchina1.126.net
Content-Length: length
Date: date
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE
Content-MD5: md5

<?xml version="1.0" encoding="UTF-8"?>
<WebsiteConfiguration>
        <IndexDocument>
             <Suffix>index.html</Suffix>
        </IndexDocument>
        <ErrorDocument>
             <Key>error.html</Key>
        </ErrorDocument>
</WebsiteConfiguration>

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

5.11.5. 细节描述

  1. 若请求的http body 中xml 格式不合法,则返回400 Bad Request。错误码:MalformedXML;
  2. Suffix和Key的值必须是桶内的已存在对象。否则返回400 Bad Request。错误码:InvalidArgument
  3. 如果此前没有设置过Website,此操作会创建一个新的Website配置;否则,就覆写先前的配置。
  4. 在将一个bucket设置成静态网站托管模式后,对静态网站根域名的匿名访问,NOS将返回索引页面;对静态网站根域名的签名访问,NOS将返回Get Bucket结果。

5.12. GET Bucket Website

5.12.1. 描述

查看bucket的静态网站托管状态。

5.12.2. 语法

GET /?website HTTP/1.1
Host: ${BucketName}.{endpoint}
Date: ${date}
Authorization: ${signature}

5.12.3. 响应元素

与Put Bucket Website的请求元素一致

5.12.4. 示例

Request

GET /?website HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Fri, 10 Feb 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

<?xml version="1.0" encoding="UTF-8"?>
<WebsiteConfiguration>
    <IndexDocument>
        <Suffix>{suffix}</Suffix>
    </IndexDocument>
    <ErrorDocument>
        <Key>{key}</Key>
    </ErrorDocument>
</WebsiteConfiguration>

5.12.5. 细节描述

  1. 如果Bucket或Website不存在,返回404 Not Found错误,错误码:NoSuchBucket或NoSuchWebsiteConfiguration。

5.13. Delete Bucket Website

5.13.1. 描述

删除bucket的静态网站托管状态。

5.13.2. 语法

DELETE /?website HTTP/1.1
Host: ${BucketName}.{endpoint}
Date: ${date}
Authorization: ${signature}

5.13.3. 示例

Request

DELETE /?website HTTP/1.1
HOST: dream.nos-eastchina1.126.net
Date: Fri, 10 Feb 2012 21:34:55 GMT
Authorization: NOS I_AM_ACCESS_ID:I_AM_SIGNATURE

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

5.14. PUT Bucket Policy

5.14.1. 描述

设置桶的policy

5.14.2. 语法

PUT /?policy HTTP/1.1
Host: ${BucketName}.${endpoint}
Authorization: ${signature}

policy written in json

5.14.3. 示例

Request

{
     "Version": "2018-06-25",
     "Id": "Test",
     "Statement": {
         "Sid" : "TestStatement",
         "Effect" : "Allow",
         "Action" : ["nos:PutObject"],
         "Principal" : {"nws":["nrn:nws:iam::productid:root"]},
         "Resource" : ["nrn:nws:nos:::example_bucket/object"],
         "Condition" : {
             "IpAddress" : {
                 "nws:SourceIp":"192.168.0.1/24"
             }
         }
     }
 }

Response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS

5.14.4. 细节描述

  1. 如果Bucket不存在,返回404 no content错误。错误码:NoSuchBucket。
  2. 如果之前存在其他的策略,那么该接口会覆盖之前的设置
  3. 对策略的所有操作,只有桶的属主可以,其他用户就算授权了也不行
  4. 策略相关的文档,请参考RBC

5.15. Get Bucket Policy

5.15.1. 描述

获取桶的策略

5.15.2. request

GET /?policy HTTP/1.1
HOST: ${BucketName}.${endpoint}
Date: ${date}
Authorization: ${signature}

5.15.3. response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS
Content-length : ${length}

{
    "Version": "1",
    "Id": "Policy1528352061981",
    "Statement": {
        "Sid" : "test",
        "Effect" : "Allow",
        "Action" : ["nos:ListBucket"],
        "Principal" : {"nws":["nrn:nws:iam::productid:root"]},
        "Resource" : ["nrn:nws:nos:::example_bucket/object"],
        "Condition" : {
            "StringLike" : {
                "nos:preifx":"aa"
            }
        }
    }
}

5.15.4. 细节描述

1.如果从来没有设置过或删除了Policy,返回为空
2.如果桶不存在,返回404,报NoSuchBucket
3.如果没有获取桶策略的权限,那么返回403 Forbidden 错误。错误码:AccessDenied。

5.16. Delete Bucket Policy

5.16.1. 描述

删除桶的策略

5.16.2. request

DELETE /?policy HTTP/1.1
HOST: ${BucketName}.${endpoint}
Date: ${date}
Authorization: ${signature}

5.16.3. response

HTTP/1.1 200 OK
x-nos-request-id: 17b21e42ac11000001390ab891440240
Date: Wed, 01 Mar 2012 21:34:55 GMT
Connection: close
Server: NOS
Content-length : ${length}

5.16.4. 细节描述

1.如果policy不存在,也返回删除成功
2.如果桶不存在,返回404,报NoSuchBucket
3.如果没有获取桶策略的权限,那么返回403 Forbidden 错误。错误码:AccessDenied。