
# 设置桶ACL-SetBucketAcl
#### 功能介绍
可在创建桶时可以设置ACL，也可以创桶后通过本接口设置桶ACL。了解更多有关设置桶ACL相关信息，请参见[配置桶ACL](https://support.huaweicloud.com/usermanual-obs/obs_03_0326.html)。
使用桶ACL进行权限控制请参考《对象存储服务权限配置指南》的[OBS权限控制概述](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)章节。
#### 接口约束
- 一个桶的ACL最多支持100条Grant授权。
- 设置桶ACL为幂等的覆盖写语义，新设置的桶ACL将覆盖原有的桶ACL，如果需要修改或者删除某条ACL，重新PUT一个新的桶ACL即可。
 
#### 授权信息
您必须是桶拥有者或拥有设置桶ACL的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:bucket:PutBucketAcl** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:bucket:putBucketAcl** 权限，授权操作请参见[创建IAM自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)。
    
    | 授权项 Action | 访问级别 Access Level | 资源类型（\*为必须） Resource Type (\*: required) | [条件键](https://support.huaweicloud.com/api-obs/obs_04_0112.html#ZH-CN_TOPIC_0000002375307974__condition_table) Condition Key                                                                                                                                                                                                                                                                                                                                                                                                     | [别名](https://support.huaweicloud.com/iam5_faq/iam_01_1103.html) Alias | 依赖的授权项 Dependencies |
    |:---|:---|:---|:---|:---|:---|
    | obs:bucket:putBucketAcl                             | Permission_management                                      | bucket \*                                                                          | - [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)  - [g:ResourceTag/\<tag-key\>](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)                                                                                                                                            | -                                                                                                              | -             |
    | obs:bucket:putBucketAcl                             | Permission_management                                      | -                                                                                  | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain  - obs:x-obs-acl   | -                                                                                                              | -             |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:bucket:PutBucketAcl** 权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### URI
PUT /
#### 调用方法
请参见[如何调用API](https://support.huaweicloud.com/api-obs/obs_04_0006.html)。调用前需要先[计算API签名](https://support.huaweicloud.com/api-obs/obs_04_0009.html)，并将签名添加到请求中。
您还可以使用[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/OBS/doc?api=SetBucketAcl)在线调试接口。
#### 请求消息样式
```
PUT /?acl HTTP/1.1 
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Date: date
Authorization: authorization
Content-Type: application/xml 
Content-Length: length
<AccessControlPolicy xmlns="http://obs.myhwclouds.com/doc/2015-06-30/"> 
    <Owner> 
        <ID>ID</ID> 
    </Owner> 
    <AccessControlList> 
        <Grant> 
            <Grantee>
               <ID>domainId</ID>
            </Grantee> 
            <Permission>permission</Permission> 
            <Delivered>false</Delivered>
        </Grant>
    </AccessControlList> 
</AccessControlPolicy>
```
#### URI参数（URI Parameters）
该操作请求不带消息参数。
#### 请求头参数（Request headers）
使用者可以使用头域设置的方式来更改桶的ACL，每一种头域设置的ACL都有一套自己预先定义好的被授权用户以及相应权限，通过头域设置的方式授予访问权限，使用者必须添加以下的头域并且指定取值。
表1头域方式设置桶ACL 
| **名称**    | **类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| x-obs-acl | String | 否        | **参数解释：** 通过canned ACL的方式来设置桶的ACL。 **约束限制：** 无 **取值范围：** - private：私有  - public-read：公共读  - public-read-write：公共读写  - public-read-delivered：公共读且可以传递给桶内对象  - public-read-write-delivered：公共读写且可以传递给桶内对象   使用public-read-delivered和public-read-write-delivered时，ACL的Delivered属性会自动设置为true。各策略详细说明见[ACL](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0005.html)章节的"使用头域设置ACL" **默认取值：** private |
   
#### 请求体参数（Request body）
更改桶的ACL请求需要在消息元素中带上ACL信息，元素的具体含义如[表2]所示。
 表2请求体参数（Request body） 
| **元素名称**          | **元素类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|
| Owner             | XML      | 是        | **参数解释：** 桶的所有者信息，是桶拥有者账号ID的父节点。 **约束限制：** 不涉及 **取值范围：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ID                | String   | 是        | **参数解释：** 桶拥有者账号ID。 **约束限制：** 不涉及 **取值范围：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| AccessControlList | XML      | 是        | **参数解释：** 访问控制列表，是Grant的父节点。 **约束限制：** 不涉及 **取值范围：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Grant             | XML      | 否        | **参数解释：** 用于标记用户及用户的权限，是Grantee、Permission和Delivered的父节点。不设置Grant时，AccessControlList为空列表。 **约束限制：** 单个桶的ACL，Grant元素不能超过100个。 **取值范围：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Grantee           | XML      | 否        | **参数解释：** 记录用户信息，是被授权用户账号ID的父节点。ID或Canned两个参数二选一。 **约束限制**： 不涉及 **取值范围：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ID                | String   | 否        | **参数解释：** 被授权用户的账号ID。 **约束限制：** ID或Canned两个参数二选一。使用ID指定具体用户，使用Canned指定所有人。 **取值范围：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Canned            | String   | 否        | **参数解释：** 向所有人授予权限。 **约束限制：** ID或Canned两个参数二选一。使用ID指定具体用户，使用Canned指定所有人。 **取值范围：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Permission        | String   | 是        | **参数解释：** 授予的权限。详情参见[桶ACL访问权限](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0005.html#obs_40_0005__table28226836)。 **约束限制：** 不涉及 **取值范围：** - READ：允许被授权者获取桶内对象列表和桶元数据。  - READ_ACP：允许被授权者读取桶ACL属性。  - WRITE：允许被授权者向桶中上传对象。对于桶中现有对象，允许授权者删除和覆盖这些对象。  - WRITE_ACP：允许被授权者更新桶ACL属性。  - FULL_CONTROL：允许被授予者拥有READ、WRITE、READ_ACP和WRITE_ACP权限。   **默认取值：** 不涉及 |
| Delivered         | Boolean  | 否        | **参数解释：** 桶的ACL是否可以被对象继承。作用于桶内开启继承(Delivered)的对象。 **约束限制：** 不涉及 **取值范围：** - true：向桶内对象传递  - false：不向桶内对象传递   **默认取值：** false                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   
#### 响应消息样式
```
HTTP/1.1 status_code
Date: date
Content-Length: length
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
#### 响应体 (Response Body)
本接口的响应消息中不携带响应体。
#### 错误响应消息
此请求可能的特殊错误如下[表3]描述。
 表3错误响应消息 
| 错误码                   | 描述                                   | HTTP状态码         |
|:---|:---|:---|
| UnexpectedContent     | 请求同时携带了 ACL 头域和消息体。                  | 400 Bad Request |
| MissingSecurityHeader | 请求既无 x-amz-acl 头域、也无 grant 头域、也无消息体。 | 400 Bad Request |
| MalformedACLError     | ACL XML 格式不合法。                       | 400 Bad Request |
| EntityTooLarge        | ACL 请求体大小超过上限。                       | 400 Bad Request |
| InvalidArgument       | ACL 中指定的参数不合法。                       | 400 Bad Request |
   
其他所有错误已经包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例
```
PUT /?acl HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 01 Jul 2015 02:37:22 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4=
Content-Length: 727
<AccessControlPolicy xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
  
  <Owner> 
    <ID>b4bf1b36d9ca43d984fbcb9491b6fce9</ID> 
  </Owner>  
  <AccessControlList> 
    <Grant> 
      <Grantee> 
        <ID>b4bf1b36d9ca43d984fbcb9491b6fce9</ID> 
      </Grantee>  
      <Permission>FULL_CONTROL</Permission> 
      <Delivered>false</Delivered>
    </Grant>  
    <Grant> 
      <Grantee> 
        <ID>783fc6652cf246c096ea836694f71855</ID> 
      </Grantee>  
      <Permission>READ</Permission>  
      <Delivered>false</Delivered> 
    </Grant>  
    <Grant> 
      <Grantee> 
        <Canned>Everyone</Canned> 
      </Grantee>  
      <Permission>READ_ACP</Permission>
      <Delivered>false</Delivered> 
    </Grant> 
  </AccessControlList> 
</AccessControlPolicy>
```
#### 响应示例
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: BF2600000164361F2954B4D063164704
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCT78HTIBuhe0FbtSptrb/akwELtwyPKs
Date: Wed, 01 Jul 2015 02:37:22 GMT
Content-Length: 0
```
#### 请求示例：使用头域方式指定的访问权限
```
PUT /?acl HTTP/1.1
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4=
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
x-obs-acl: private
Date: Wed, 01 Jul 2015 02:37:22 GMT
Content-Type: application/xml
```
#### 响应示例：使用头域方式指定的访问权限
```
HTTP/1.1 200 OK
x-obs-id-2: 32AAAQAAEAABSAAgAAEAABAAAQAAEAABCSmpL2dv6zZLM2HmUrXKTAi258MPqmrp
x-obs-request-id: 0000018A2A73AF59D3085C8F8ABF0C65
Server: OBS
Content-Length: 0
Date: Wed, 01 Jul 2015 02:37:22 GMT
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0406.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0814.html) | [C](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0305.html) | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0416.html) | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0404.html) | [.NET](https://support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_0306.html) | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_0306.html) | [iOS](https://support.huaweicloud.com/sdk-ios-devg-obs/obs_27_0305.html) | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_0306.html) | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_0306.html) | [Harmony](https://support.huaweicloud.com/sdk-harmony-devg-obs/obs_34_0314.html) |
|---|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 使用obsutil配置桶ACL，请参见[设置桶属性](https://support.huaweicloud.com/utiltg-obs/obs_11_0040.html)。
- 使用OBS Browser+配置桶ACL，请参见[配置桶ACL权限](https://support.huaweicloud.com/browsertg-obs/obs_03_1049.html)。
- 了解更多设置桶ACL相关信息，请参见[配置桶ACL](https://support.huaweicloud.com/usermanual-obs/obs_03_0326.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
