
# 桶策略概述
#### 桶策略
桶策略是作用于所配置的OBS桶及桶内对象的。OBS桶拥有者通过桶策略可为IAM用户或其他账号授权桶及桶内对象的操作权限。
![](https://support.huaweicloud.com/perms-cfg-obs/public_sys-resources/note_3.0-zh-cn.png)
创建桶和获取桶列表这两个服务级的操作权限，需要通过[IAM权限](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0014.html)配置。
**桶策略模板：**
OBS控制台预置了八种常用典型场景的桶策略模板，用户可以使用模板创建桶策略，快速完成桶策略配置。
选择使用模板创建时，部分模板需要指定被授权用户或资源范围，您也可以在原模板基础上修改被授权用户、资源范围、模板动作以及增加桶策略执行的条件。
表1桶策略模板 
| 被授权用户               | 授权资源        | 模板名称 | 模板动作                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 高级设置        |
|:---|:---|:---|:---|:---|
| 所有账号                | 整个桶（包括桶内对象） | 公共读  | **允许所有账号（所有互联网用户）对整个桶及桶内所有对象执行以下动作：** HeadBucket（判断桶是否存在、获取桶元数据） GetBucketLocation（获取桶位置） GetObject（获取对象内容、获取对象元数据） RestoreObject（恢复归档存储对象） GetObjectVersion（获取指定版本对象内容、获取指定版本对象元数据）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 不支持排除以上授权操作 |
| 所有账号                | 整个桶（包括桶内对象） | 公共读写 | **允许所有账号（所有互联网用户）对整个桶及桶内所有对象执行以下动作：** ListBucket（列举桶内对象、获取桶元数据） ListBucketVersions（列举桶内多版本对象） HeadBucket（判断桶是否存在、获取桶元数据） GetBucketLocation（获取桶位置） PutObject（PUT上传，POST上传，上传段，初始化上传段任务，合并段） GetObject（获取对象内容、获取对象元数据） ModifyObjectMetaData（修改对象元数据） ListBucketMultipartUploads（列举多段上传任务） ListMultipartUploadParts（列举已上传段） AbortMultipartUpload（取消多段上传任务） RestoreObject（恢复归档存储对象） GetObjectVersion（获取指定版本对象内容、获取指定版本对象元数据） PutObjectAcl（设置对象ACL） GetObjectVersionAcl（获取指定版本对象ACL） GetObjectAcl（获取对象ACL）                   | 不支持排除以上授权操作 |
| 当前账号/其他账号/委托账号      | 整个桶（包括桶内对象） | 桶只读  | **允许指定账号对整个桶及桶内所有对象执行以下动作：** Get\*（所有获取操作） List\*（所有列举操作） HeadBucket（判断桶是否存在、获取桶元数据）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 不支持排除以上授权操作 |
| 当前账号/其他账号/委托账号      | 整个桶（包括桶内对象） | 桶读写  | **允许指定账号对整个桶及桶内所有对象执行除以下动作以外的所有动作：** DeleteBucket（删除桶） PutBucketPolicy（设置桶策略） PutBucketAcl（设置桶ACL）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 排除以上授权操作    |
| 所有账号/当前账号/其他账号/委托账号 | 当前桶+指定对象    | 目录只读 | **允许所有账号（所有互联网用户）或指定账号对当前桶和桶内指定资源执行以下动作：** GetObject（获取对象内容、获取对象元数据） GetObjectVersion（获取指定版本对象内容、获取指定版本对象元数据） GetObjectVersionAcl（获取指定版本对象ACL） GetObjectAcl（获取对象ACL） RestoreObject（恢复归档存储对象） HeadBucket（判断桶是否存在、获取桶元数据） GetBucketLocation（获取桶位置） 说明： 被授权用户选择"所有账号"时，模板动作中不包含ListBucket、ListBucketVersions。                                                                                                                                                                                                                                                                                                                                                                                                                                               | 不支持排除以上授权操作 |
| 所有账号/当前账号/其他账号/委托账号 | 当前桶+指定对象    | 目录读写 | **允许所有账号（所有互联网用户）或指定账号对当前桶和桶内指定资源执行以下动作：** PutObject（PUT上传，POST上传，上传段，初始化上传段任务，合并段） GetObject（获取对象内容、获取对象元数据） GetObjectVersion（获取指定版本对象内容、获取指定版本对象元数据） ModifyObjectMetaData（修改对象元数据） ListBucketMultipartUploads（列举多段上传任务） ListMultipartUploadParts（列举已上传段） AbortMultipartUpload（取消多段上传任务） GetObjectVersionAcl（获取指定版本对象ACL） GetObjectAcl（获取对象ACL） PutObjectAcl（设置对象ACL） RestoreObject（恢复归档存储对象） ListBucket（列举桶内对象、获取桶元数据） ListBucketVersions（列举桶内多版本对象） HeadBucket（判断桶是否存在、获取桶元数据） GetBucketLocation（获取桶位置） | 不支持排除以上授权操作 |
| 所有账号/当前账号/其他账号/委托账号 | 指定对象        | 对象只读 | **允许所有账号（所有互联网用户）或指定账号对桶内指定资源执行以下动作：** GetObject（获取对象内容、获取对象元数据） GetObjectVersion（获取指定版本对象内容、获取指定版本对象元数据） GetObjectVersionAcl（获取指定版本对象ACL） GetObjectAcl（获取对象ACL） RestoreObject（恢复归档存储对象）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 不支持排除以上授权操作 |
| 所有账号/当前账号/其他账号/委托账号 | 指定对象        | 对象读写 | **允许所有账号（所有互联网用户）或指定账号对桶内指定资源执行以下动作：** PutObject（PUT上传，POST上传，上传段，初始化上传段任务，合并段） GetObject（获取对象内容、获取对象元数据） GetObjectVersion（获取指定版本对象内容、获取指定版本对象元数据） ModifyObjectMetaData（修改对象元数据） ListMultipartUploadParts（列举已上传段） AbortMultipartUpload（取消多段上传任务） GetObjectVersionAcl GetObjectAcl（获取对象ACL） PutObjectAcl（设置对象ACL） RestoreObject（恢复归档存储对象）                                                                                                                                                                                                                                                                                                                                                                        | 不支持排除以上授权操作 |
   
**自定义桶策略：**
你也可以根据实际业务场景的定制化需求，不使用预置桶策略模板，自定义创建桶策略。自定义桶策略由效力、被授权用户、资源、动作和条件5个桶策略基本元素共同决定。详细请参见[OBS权限控制要素](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html#ZH-CN_TOPIC_0242742467__section753694015118)。
#### 对象策略
对象策略即为桶策略中针对对象的策略，桶策略中针对对象的策略是通过配置资源来实现对象匹配的，资源可配置"\*"（表示所有对象）或对象前缀（表示对象集）。对象策略则是直接选定对象后，配置到选定的对象资源的策略。
**对象策略模板：**
OBS控制台预置了两种常用典型场景的对象策略模板，用户可以使用模板创建对象策略，快速完成对象策略配置。
选择使用模板创建时，部分模板需要指定被授权用户，您也可以在原模板基础上修改被授权用户、模板动作以及增加对象策略执行的条件。资源范围即为所需配置对象策略的对象，系统自动指定，无需修改。
表2对象策略模板 
| 被授权用户               | 授权资源 | 模板名称 | 模板动作                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 高级设置        |
|:---|:---|:---|:---|:---|
| 所有账号/当前账号/其他账号/委托账号 | 指定对象 | 对象只读 | **允许所有账号（所有互联网用户）或指定账号对桶内指定资源执行以下动作：** GetObject（获取对象内容、获取对象元数据） GetObjectVersion（获取指定版本对象内容、获取指定版本对象元数据） GetObjectVersionAcl（获取指定版本对象ACL） GetObjectAcl（获取对象ACL） RestoreObject（恢复归档存储对象）                                                                                                                                                                                                                                                                                                                                                     | 不支持排除以上授权操作 |
| 所有账号/当前账号/其他账号/委托账号 | 指定对象 | 对象读写 | **允许所有账号（所有互联网用户）或指定账号对桶内指定资源执行以下动作：** PutObject（PUT上传，POST上传，上传段，初始化上传段任务，合并段） GetObject（获取对象内容、获取对象元数据） GetObjectVersion（获取指定版本对象内容、获取指定版本对象元数据） ModifyObjectMetaData（修改对象元数据） ListMultipartUploadParts（列举已上传段） AbortMultipartUpload（取消多段上传任务） GetObjectVersionAcl GetObjectAcl（获取对象ACL） PutObjectAcl（设置对象ACL） RestoreObject（恢复归档存储对象） | 不支持排除以上授权操作 |
   
**自定义对象策略：**
你也可以根据实际业务场景的定制化需求，不使用预置对象策略模板，自定义创建对象策略。自定义对象策略由效力、被授权用户、资源、动作和条件5个桶策略基本元素共同决定，与桶策略类似，详细请参见[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)。其中资源为已选择的对象，系统自动配置。
#### 桶策略和对象策略之间的关系
对象策略即为桶策略中针对对象的策略，区别是对象策略只针对一个对象，桶策略中针对对象的策略可以配置多个对象或桶中所有对象。
#### 桶策略应用场景
- 允许其他华为云账号访问OBS资源，可以使用桶策略的方式授权对应权限。
- 当不同的桶对于不同的IAM用户有不同的访问控制需求时，需使用桶策略分别授权IAM用户不同的权限。
 
#### 桶策略通用配置方法
- [使用模板创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0142.html)
- [自定义创建桶策略（可视化视图）](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)
- [自定义创建桶策略（JSON视图）](https://support.huaweicloud.com/usermanual-obs/obs_03_0141.html)
 
#### 桶策略样例
- **示例1：向IAM用户授予指定桶中所有对象的指定操作权限**
  以下示例策略向账号b4bf1b36d9ca43d984fbcb9491b6fce9（账号ID）下的用户ID为71f3901173514e6988115ea2c26d1999的IAM用户授予PutObject和PutObjectAcl权限。
  ```
  {
      "Statement":[
      {
        "Sid":"AddCannedAcl",
        "Effect":"Allow",
        "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/71f3901173514e6988115ea2c26d1999"]},
        "Action":["PutObject","PutObjectAcl"],
        "Resource":["examplebucket/*"]
      }
    ]
  }
  ```
  
- **示例2：向IAM用户授予指定桶的所有操作权限**
  以下示例策略向账号b4bf1b36d9ca43d984fbcb9491b6fce9（账号ID）下的用户ID为71f3901173514e6988115ea2c26d1999的IAM用户授予examplebucket的所有操作权限（包含桶操作与对象操作）。
  ```
  {
      "Statement":[
      {
        "Sid":"test",
        "Effect":"Allow",
        "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/71f3901173514e6988115ea2c26d1999"]},
        "Action":["*"],
        "Resource":[
          "examplebucket/*",
          "examplebucket"
        ]
      }
    ]
  }
  ```
  
- **示例3：向OBS用户授予除删除对象外的所有对象操作权限**
  以下示例策略向账号b4bf1b36d9ca43d984fbcb9491b6fce9（账号户ID）下的用户ID为71f3901173514e6988115ea2c26d1999的IAM用户授予examplebucket除删除对象外的所有对象操作权限。
  ```
  {
      "Statement":[
      {
        "Sid":"test1",
        "Effect":"Allow",
        "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/71f3901173514e6988115ea2c26d1999"]},
        "Action":["*"],
        "Resource":["examplebucket/*"]
      },
      {
        "Sid":"test2",
        "Effect":"Deny",
        "Principal": {"ID": ["domain/b4bf1b36d9ca43d984fbcb9491b6fce9:user/71f3901173514e6988115ea2c26d1999"]},
        "Action":["DeleteObject"],
        "Resource":["examplebucket/*"]
      }
    ]
  }
  ```
  
- **示例4：向** 所有账号**授予指定对象的只读权限**
  下面的示例策略向所有账号授予examplebucket桶中exampleobject的GetObject（下载对象）权限。此权限允许任何人读取对象exampleobject的数据。
  ```
  {
      "Statement":[
      {
        "Sid":"AddPerm",
        "Effect":"Allow",
        "Principal": "*",
        "Action":["GetObject"],
        "Resource":["examplebucket/exampleobject"]
      }
    ]
  }
  ```
  
- **示例5：限制对特定IP地址的访问权限**
  以下示例向任何用户授予对指定桶中的对象执行任何OBS操作的权限。但是，请求必须来自条件中指定的IP地址范围。此语句的条件确定允许的IP地址范围为192.168.0.\*，只有一个例外：192.168.0.1。
  Condition块使用IpAddress和NotIpAddress条件以及SourceIp条件键（这是OBS范围的条件键）。另请注意SourceIp值使用RFC 4632中描述的CIDR表示法。
  ```
  {
    "Statement": [
      {
        "Sid": "IPAllow",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "*",
        "Resource": "examplebucket/*",
        "Condition": {
           "IpAddress": {"SourceIp": "192.168.0.0/24"},
           "NotIpAddress": {"SourceIp": "192.168.0.1/32"} 
        } 
      } 
    ]
  }
  ```
  
- **示例6：除桶拥有者外禁止其他用户访问桶和桶内数据**
  如果为桶设置了以下示例中的桶策略，那仅拥有Tenant Administrator权限的桶拥有者才可以修改桶策略。
  ```
  {
    "Statement": [
      {
        "Sid": "DenyAll",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "*",
        "Resource": "examplebucket/*",
      } 
    ]
  }
  ```
  
 
