
# 设置对象ACL-SetObjectAcl
#### 功能介绍
![](https://support.huaweicloud.com/api-obs/public_sys-resources/warning_3.0-zh-cn.png)
SSE-KMS方式加密的对象即使设置了ACL，跨租户也不生效。
默认情况下，只有对象的创建者才有该对象的读写权限。用户也可以通过本接口设置已有对象的ACL，比如对一个对象可以设置公共访问策略，允许所有人对其都有读权限。
了解更多设置对象ACL相关信息，请参见[配置对象ACL](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0005.html)。
#### 多版本
默认情况下，更改的是最新版本的对象ACL。要设置指定版本的对象ACL，请求可以带参数versionId。
#### 接口约束
配置对象ACL的账号需要是对象的所有者，或者具备该对象的ACL写权限。
对象的所有者是上传对象的账号，而不是对象所属的桶的所有者。例如，如果账号B被授予访问账号A的桶的权限，账号B上传一个文件到桶中，则账号B是对象的所有者，而不是账号A。默认情况下，账号A没有该对象的访问权限，也无法读取和修改该对象的ACL。
一个对象的ACL最多支持100条Grant授权。
#### 授权信息
您必须是对象拥有者或拥有设置对象ACL的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:object:PutObjectAcl** （未开启多版本）、**obs:object:PutObjectVersionAcl** （开启或暂停多版本）权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:object:putObjectAcl** （未开启多版本）、**obs:object:putObjectVersionAcl** （开启或暂停多版本）权限，授权操作请参见[创建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:object:PutObjectAcl**（未开启多版本） **obs:object:PutObjectVersionAcl**（开启或暂停多版本） | Permission_management                                      | object \*                                                                          | [g:EnterpriseProjectId](https://support.huaweicloud.com/usermanual-iam5/iam_01_0934.html#section2)                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | -                                                                                                                | -               |
    | **obs:object:PutObjectAcl**（未开启多版本） **obs:object:PutObjectVersionAcl**（开启或暂停多版本） | Permission_management                                      | -                                                                                  | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain  - obs:x-obs-acl   | -                                                                                                                | -               |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:object:PutObjectAcl** （未开启多版本）、**obs:object:PutObjectVersionAcl** （开启或暂停多版本）权限，具体操作请参见[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
 
#### URI
PUT /{*object_key*}
#### 调用方法
请参见[如何调用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=SetObjectAcl)在线调试接口。
#### 请求消息格式
```
PUT /ObjectName?acl HTTP/1.1 
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Date: date
Authorization: authorization
<AccessControlPolicy> 
    <Owner> 
        <ID>ID</ID> 
    </Owner> 
    <Delivered>true</Delivered>
    <AccessControlList> 
        <Grant> 
            <Grantee>
               <ID>ID</ID>
            </Grantee> 
            <Permission>permission</Permission> 
        </Grant> 
    </AccessControlList> 
</AccessControlPolicy>
```
#### URI参数（URI Parameters）
请求参数说明如[表1]所示。
 表1URI参数（URI Parameters） 
| 参数名称      | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| acl       | 是    | String | **参数解释：** 指定该请求是获取对象的ACL。 **约束限制：** 不涉及 **取值范围：** 不涉及 **默认取值：** 不涉及                                                                                                                     |
| versionId | 否    | String | **参数解释：** 对象的版本号。表示更改指定版本对象的ACL。如何获取对象的版本ID请参见[列举桶内对象-ListObjects](https://support.huaweicloud.com/api-obs/obs_04_0022.html)。 **约束限制：** 不涉及 **取值范围：** 长度为32的字符串。 **默认取值：** 如果不设置则默认修改最新版本的对象。 |
   
#### 请求头参数（Request headers）
该请求使用公共请求头，具体参见[表3](https://support.huaweicloud.com/api-obs/obs_04_0007.html#ZH-CN_TOPIC_0136436606__table25197309)。
#### 请求体参数（Request body）
该请求消息通过带消息元素来传递对象的ACL信息，元素的意义如[表2]所示。
 表2请求体参数 
| 参数名称              | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|
| AccessControlList | 是    | XML     | **参数解释：** 访问控制列表，AccessControlList是Grant、 Grantee、Permission的父节点。请详见[表3]。 **约束限制：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                       |
| Owner             | 是    | XML     | **参数解释：** 对象的所有者信息，Owner是ID的父节点。请详见[表4]。 **约束限制：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                               |
| Delivered         | 否    | Boolean | **参数解释：** 对象ACL是否继承桶的ACL。 **约束限制：** 不涉及 **取值范围：** - true：对象继承桶ACL  - false：对象不继承桶ACL   **默认取值：** true |
   
 表3AccessControlList参数说明 
| 参数名称       | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|
| Grant      | 否    | XML    | **参数解释：** 用于标记用户及用户的权限，Grant是Grantee、Delivered的父节点。 **约束限制：** 单个对象的ACL，Grant元素不能超过100个。 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Grantee    | 否    | XML    | **参数解释：** 记录被授权用户信息。 **约束限制：** 不涉及 **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| Canned     | 否    | String | **参数解释：** 向所有人授予权限。Canned的父节点是Grantee。 **约束限制：** 不涉及 **取值范围：** Everyone **默认取值：** 不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Permission | 否    | String | **参数解释：** 授予对象的权限。 **约束限制：** 不涉及 **取值范围：** - READ：允许被授权者获取对象内容和元数据。  - READ_ACP：允许被授权者读取对象ACL属性。  - WRITE_ACP：允许被授权者更新对象ACL属性。  - FULL_CONTROL：允许被授予者对对象的READ、READ_ACP和WRITE_ACP权限。   **默认取值：** 不涉及 |
   
 表4Owner参数说明 
| 参数名称 | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| ID   | 是    | String | **参数解释：** 被授权用户的租户ID。 **约束限制：** 不涉及 **取值范围：** 如何获取用户的DomainId请详见[获取账号、IAM用户、项目、用户组、区域、委托方账号ID、委托的名称和ID](https://support.huaweicloud.com/api-obs/obs_04_0117.html)。 **默认取值：** 不涉及 |
   
#### 响应消息样式
```
HTTP/1.1 status_code
Content-Length: length
Content-Type: application/xml
```
#### 响应头 (Response Headers)
该请求的响应消息使用公共响应头，具体请参考[表1](https://support.huaweicloud.com/api-obs/obs_04_0013.html#ZH-CN_TOPIC_0173612084__d0e686)。
除公共响应头 (Response Headers)之外，还可能使用如[表5]中的消息头。
 表5响应头 (Response Headers) 
| 参数名称             | 参数类型   | 描述                                                                                                                                                                       |
|:---|:---|:---|
| x-obs-version-id | String | **参数解释：** 被更改ACL的对象的版本号。 **取值范围：** 长度为32的字符串。 |
   
#### 响应体 (Response Body)
该请求的响应消息中不带有消息元素。
#### 错误响应消息
无特殊错误，所有错误已经包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例
```
PUT /obj2?acl HTTP/1.1
User-Agent: curl/7.29.0
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Accept: */*
Date: Wed, 01 Jul 2015 04:42:34 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:8xAODun1ofjkwHm8YhtN0QEcy9M=
Content-Length: 727
<AccessControlPolicy xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
  <Owner> 
    <ID>b4bf1b36d9ca43d984fbcb9491b6fce9</ID> 
  </Owner>  
  <Delivered>false</Delivered>
  <AccessControlList> 
    <Grant> 
      <Grantee> 
        <ID>b4bf1b36d9ca43d984fbcb9491b6fce9</ID> 
      </Grantee>  
      <Permission>FULL_CONTROL</Permission> 
    </Grant>  
    <Grant> 
      <Grantee> 
        <ID>783fc6652cf246c096ea836694f71855</ID> 
      </Grantee>  
      <Permission>READ</Permission>
    </Grant>  
    <Grant> 
      <Grantee> 
        <Canned>Everyone</Canned> 
      </Grantee>  
      <Permission>READ</Permission> 
    </Grant> 
  </AccessControlList> 
</AccessControlPolicy>
```
#### 响应示例
```
HTTP/1.1 200 OK
Server: OBS
x-obs-request-id: 8DF400000163D3F0FD2A03D2D30B0542
x-obs-id-2: 32AAAUgAIAABAAAQAAEAABAAAQAAEAABCTjCqTmsA1XRpIrmrJdvcEWvZyjbztdd
Date: Wed, 01 Jul 2015 04:42:34 GMT
Content-Length: 0
```
#### 请求示例：已启用版本控制
```
PUT /object01?acl&versionId=G001118A6803675AFFFFD3043F7F91D0 HTTP/1.1
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:iqSPeUBl66PwXDApxjRKk6hlcN4=
User-Agent: curl/7.29.0
Host: examplebucket.obs.region.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:37:22 GMT
Content-Type: application/xml
 
<AccessControlPolicy  xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
    <Owner>
        <ID>d029cb567d46458sp0x75800575ee4cf</ID>
    </Owner>
    <Delivered>false</Delivered>
    <AccessControlList>
        <Grant>
            <Grantee>
                <ID>f98sx63gg849422e8f330af1349c588f</ID>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
        <Grant>
            <Grantee>
                <ID>fa558a82a84946sn98u30af195as3hi5</ID>
            </Grantee>
            <Permission>READ</Permission>
        </Grant>
        <Grant>
            <Grantee>
                <Canned>Everyone</Canned>
            </Grantee>
            <Permission>READ</Permission>
        </Grant>
    </AccessControlList>
</AccessControlPolicy>
```
#### 响应示例：已启用版本控制
```
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
x-obs-version-id: G001118A6803675AFFFFD3043F7F91D0
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0802.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0922.html) | [C](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0315.html) | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0509.html) | BrowserJS不支持 | .NET不支持 | Android不支持 | iOS不支持 | PHP不支持 | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_0604.html) | Harmony不支持 |
|---|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 了解更多设置对象ACL相关介绍，请参见[配置对象ACL](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829106.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
