# 设置桶策略-SetBucketPolicy
#### 功能介绍
使用本接口可以修改或者新建指定桶的桶策略。了解更多桶策略相关信息，请参见[配置桶策略](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829092.html)。
使用桶策略进行权限控制请参考《对象存储服务权限配置指南》的[OBS权限控制概述](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)章节。
#### 接口约束
- 如果桶已经存在一个策略，那么当前请求中的策略将完全覆盖桶中现存的策略。
- 单个桶的桶策略条数（statement）没有限制，但一个桶中所有桶策略的JSON描述总大小不能超过20KB。
 
#### 授权信息
跨账号场景，不允许调用本接口。例如，账号A和账号B是两个账号，账号A不能设置/获取/删除账号B桶的桶策略。
同账号场景，您必须是桶拥有者或拥有设置桶策略的权限，才能调用本接口，建议使用IAM或桶策略进行授权。了解更多OBS授权方式请参见[OBS不同权限控制方式的区别](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)。
- 如果使用**IAM授权** ，那么请在"角色与策略授权"、"身份策略授权"两种IAM授权方式中选择一种，并配置相应权限：
  - 如果使用**角色与策略授权** （旧版IAM，即IAM v3接口），需具备**obs:bucket:PutBucketPolicy** 权限，授权操作请参见[创建IAM自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
  
  - 如果使用**身份策略授权** （新版IAM，即IAM v5接口），如下表所示，需具备**obs:bucket:putBucketPolicy** 权限，授权操作请参见[创建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:putBucketPolicy                          | 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:putBucketPolicy                          | Permission_management                                       | -                                                                                 | - obs:EpochTime  - obs:SourceIp  - obs:TlsVersion  - obs:CustomDomain   | -                                                                                                             | -                                                      |
       
    
   
- 如果使用**桶策略** 进行授权，需具备**obs:bucket:PutBucketPolicy** 权限，具体操作请参见[自定义创建桶策略](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=SetBucketPolicy)在线调试接口。
#### 请求消息样式
```
PUT /?policy HTTP/1.1   
Host: bucketname.obs.cn-north-4.myhuaweicloud.com 
Date: date
Authorization: signatureValue
Content-Type: application/json
Policy written in JSON
```
#### URI参数（URI Parameters）
该请求通过URI中的**?policy**参数标识桶策略操作接口，无其他URI参数。
#### 请求头参数（Request headers）
该请求使用公共请求头，具体参见[表3](https://support.huaweicloud.com/api-obs/obs_04_0007.html#ZH-CN_TOPIC_0136436606__table25197309)。
#### 请求体参数（Request body）
请求消息体是一个符合JSON格式的字符串，包含了桶策略的信息，具体请参考[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)。
#### 响应消息样式
```
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)
本接口的响应消息中不携带响应体。
#### 错误响应消息
此请求可能的特殊错误如下[表1]描述。
 表1错误响应消息 
| 错误码             | 描述                   | HTTP状态码        |
|:---|:---|:---|
| MalformedPolicy | Bucket policy检查不通过。 | 400 Bad Request |
| EntityTooLarge | 上传策略长度超过最大限制。       | 400 Bad Request |
   
其他所有错误已经包含在[错误码概述](https://support.huaweicloud.com/api-obs/obs_04_0115.html)中。
#### 请求示例 1
**向OBS租户授予权限**
给租户ID为783fc6652cf246c096ea836694f71855的租户授权，其中Principal中ID格式表示：domain/租户ID:user/用户ID。
如何获取租户ID请参考[获取账号、IAM用户、项目、用户组、区域、委托方账号ID、委托的名称和ID](https://support.huaweicloud.com/api-obs/obs_04_0117.html)。示例中桶策略字段的详细说明，具体请参考[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)。
```
PUT /?policy HTTP/1.1
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:32:25 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:jZiAT8Vx4azWEvPRMWi0X5BpJMA=
Content-Type: application/json
{
    "Statement": [
        {
            "Sid": "Stmt1375240018061",
            "Action": [
                "GetBucketLogging"
            ],
            "Effect": "Allow",
            "Resource": "logging.bucket",
            "Principal": {
                "ID": [
                    "domain/783fc6652cf246c096ea836694f71855:user/*"
                ]
            }
        }
    ]
}
```
#### 响应示例 1
```
HTTP/1.1 204 No Content
x-obs-request-id: 7B6DFC9BC71DD58B061285551605709
x-obs-id-2: N0I2REZDOUJDNzFERDU4QjA2MTI4NTU1MTYwNTcwOUFBQUFBQUFBYmJiYmJiYmJD
Date: Wed, 01 Jul 2015 02:32:25 GMT
Content-Length: 0
Server: OBS
```
#### 请求示例 2
**向OBS用户授予权限**
用户ID为71f3901173514e6988115ea2c26d1999，用户所属租户ID为783fc6652cf246c096ea836694f71855。
如何获取租户ID和用户ID请参考[获取账号、IAM用户、项目、用户组、区域、委托方账号ID、委托的名称和ID](https://support.huaweicloud.com/api-obs/obs_04_0117.html)。示例中桶策略字段的详细说明，具体请参考[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)。
```
PUT /?policy HTTP/1.1
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:33:28 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:KiyoYze4pmRNPYfmlXBfRTVxt8c=
Content-Type: application/json
{
    "Statement": [
        {
            "Sid": "Stmt1375240018062",
            "Action": [
                "PutBucketLogging"
            ],
            "Effect": "Allow",
            "Resource": "examplebucket",
            "Principal": {
                "ID": [
                    "domain/783fc6652cf246c096ea836694f71855:user/71f3901173514e6988115ea2c26d1999"
                ]
            }
        }
    ]
}
```
#### 响应示例 2
```
HTTP/1.1 204 No Content
x-obs-request-id: BF260000016435D758FBA857E0801874
x-obs-id-2: N0I2REZDOUJDNzFERDU4QjA2MTI4NTU1MTYwNTcwOUFBQUFBQUFBYmJiYmJiYmJD
Date: Wed, 01 Jul 2015 02:33:28 GMT
Content-Length: 0
Server: OBS
```
#### 请求示例 3
**拒绝除了某个指定OBS用户的其他用户执行所有操作**
用户ID为71f3901173514e6988115ea2c26d1999，用户所属租户ID为783fc6652cf246c096ea836694f71855。
如何获取租户ID和用户ID请参考[获取账号、IAM用户、项目、用户组、区域、委托方账号ID、委托的名称和ID](https://support.huaweicloud.com/api-obs/obs_04_0117.html)。示例中桶策略字段的详细说明，具体请参考[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)。
```
PUT /?policy HTTP/1.1 
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:34:34 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:jZiAT8Vx4azWEvPRMWi0X5BpJMA=
Content-Type: application/json
 
{
    "Statement": [
        {
            "Effect": "Deny", 
            "Action": ["*"], 
            "Resource": [
                "examplebucket/*", 
                "examplebucket"
            ], 
            "NotPrincipal": {
                "ID": [
                    "domain/783fc6652cf246c096ea836694f71855:user/71f3901173514e6988115ea2c26d1999", 
                    "domain/783fc6652cf246c096ea836694f71855:root"
                ]
            }
        }
     ]
}
```
#### 响应示例 3
```
HTTP/1.1 204 No Content 
x-obs-request-id: A603000001604A7DFE4A4AF31E301891
x-obs-id-2: BKOvGmTlt6sda5X4G89PuMO4fabObGYmnpRGkaMba1LqPt0fCACEuCMllAObRK1n
Date: Wed, 01 Jul 2015 02:34:34 GMT
Content-Length: 0
Server: OBS
```
#### 请求示例 4
**向指定委托授予权限**
租户的账号ID为783fc6652cf246c096ea836694f71855的租户，该租户有一个名为exampleAgency的委托，以下为向委托授予名为logging.bucket桶的日志查看权限。
示例中桶策略字段的详细说明，具体请参考[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)。如何获取账号ID和委托名参见[获取账号ID和委托名](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。
```
PUT /?policy HTTP/1.1
Host: examplebucket.obs.cn-north-4.myhuaweicloud.com
Date: Wed, 01 Jul 2015 02:32:25 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:jZiAT8Vx4azWEvPRMWi0X5BpJMA=
Content-Type: application/json
{
    "Statement": [
        {
            "Sid": "Stmt1375240018061",
            "Action": [
                "GetBucketLogging"
            ],
            "Effect": "Allow",
            "Resource": "logging.bucket",
            "Principal": {
                "ID": [
                    "domain/783fc6652cf246c096ea836694f71855:agency/exampleAgency"
                ]
            }
        }
    ]
}
```
#### 响应示例 4
```
HTTP/1.1 204 No Content 
x-obs-request-id: 9006000001643AAAF70BF6152D71BE8A
x-obs-id-2: BKOvGmTlt6sda5X4G89PuMO4fabObGYmnpRGkaMba1LqPt0fCACEuCMllAObRK1n
Date: Wed, 01 Jul 2015 02:34:34 GMT
Content-Length: 0
Server: OBS
```
#### 使用SDK调用接口
建议您使用OBS SDK调用接口。SDK对API进行了封装以简化您的开发工作，直接调用SDK接口函数即可访问OBS，无需手动计算签名。
| [Java](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_0407.html) | [Python](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0818.html) | C不支持 | [Go](https://support.huaweicloud.com/sdk-go-devg-obs/obs_33_0420.html) | [BrowserJS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/obs_24_0405.html) | [.NET](https://support.huaweicloud.com/sdk-dotnet-devg-obs/obs_25_0307.html) | [Android](https://support.huaweicloud.com/sdk-android-devg-obs/obs_26_0307.html) | [iOS](https://support.huaweicloud.com/sdk-ios-devg-obs/obs_27_0307.html) | [PHP](https://support.huaweicloud.com/sdk-php-devg-obs/obs_28_0307.html) | [Node.js](https://support.huaweicloud.com/sdk-nodejs-devg-obs/obs_29_0307.html) | [Harmony](https://support.huaweicloud.com/sdk-harmony-devg-obs/obs_34_0318.html) |
|---|---|---|---|---|---|---|---|---|---|---|
   
#### 相关文档
- 使用obsutil配置桶策略，请参见[设置桶策略](https://support.huaweicloud.com/utiltg-obs/obs_11_0406.html)。
- 使用OBS Browser+配置桶策略，请参见[配置桶策略](https://support.huaweicloud.com/browsertg-obs/obs_03_1055.html)。
- 了解更多配置桶策略相关介绍，请参见[配置桶策略](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829092.html)。
- API操作涉及的计费项参见[计费项](https://support.huaweicloud.com/price-obs/obs_42_0002.html)。
 
