
# 基于角色与策略的授权
OBS服务支持基于角色与策略授权的授权模型。默认情况下，管理员创建的IAM用户没有任何权限，需要将其加入用户组，并给用户组授予策略或角色，才能使得用户组中的用户获得对应的权限，这一过程称为授权。授权后，用户就可以基于被授予的权限对云服务进行操作。
如果您通过IAM授权时，没有指定具体的桶和对象，那么使用IAM授予的权限对所有桶生效。
如[表1]所示，包括了OBS的所有系统权限。基于角色与策略授权场景的系统策略与基于身份策略授权场景的并不互通。例如，如果您使用基于角色与策略的授权方式给用户授权，那么配置策略时，策略中的action需要使用基于角色与策略的授权项，并使用基于角色与策略的条件键和运算符。
 表1OBS系统权限 
| 系统角色/策略名称            | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 类别   | 依赖关系 |
|:---|:---|:---|:---|
| Tenant Administrator | 拥有该权限的用户拥有除IAM外，其他所有服务的管理员权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 系统角色 | 无    |
| Tenant Guest         | 拥有该权限的用户拥有除IAM外，其他所有服务的只读权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 系统策略 | 无    |
| OBS Administrator    | 拥有该权限的用户为OBS管理员，可以对账号下的所有OBS资源执行任意操作。                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 系统策略 | 无    |
| OBS Buckets Viewer   | 拥有该权限的用户可以执行获取桶列表、获取桶元数据、获取桶区域位置的操作，无其他权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 系统角色 | 无    |
| OBS ReadOnlyAccess   | 拥有该权限的用户可以执行获取桶列表、获取桶元数据、获取桶区域位置、列举桶内对象（不包含多版本）的操作，无其他权限。 说明： 拥有该权限的用户如果在[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)上列举对象失败，可能是因为桶中存在多版本对象。此时需要额外授予该用户列举多版本对象的权限（obs:bucket:ListBucketVersions），才能在控制台正常看到对象列表。                                                  | 系统策略 | 无    |
| OBS OperateAccess    | 拥有该权限的用户可以执行OBS ReadOnlyAccess的所有操作，在此基础上还可以执行上传对象、下载对象、删除对象、获取对象ACL等对象基本操作。 说明： 拥有该权限的用户如果在[管理控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)上列举对象失败，可能是因为桶中存在多版本对象。此时需要额外授予该用户列举多版本对象的权限（obs:bucket:ListBucketVersions），才能在控制台正常看到对象列表。 | 系统策略 | 无    |
   
下表列出了OBS常用操作与系统权限的授权关系，您可以参照该表选择合适的系统权限。
表2常用操作与系统权限的关系 
| 操作名称            | Tenant Administrator | Tenant Guest | OBS Administrator | OBS Buckets Viewer | OBS ReadOnlyAccess | OBS OperateAccess |
|:---|:---|:---|:---|:---|:---|:---|
| 获取桶列表           | 可以                   | 可以           | 可以                | 可以                 | 可以                 | 可以                |
| 创建桶             | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 列举桶内对象          | 可以                   | 可以           | 可以                | 不可以                | 可以                 | 可以                |
| 获取桶元数据          | 可以                   | 可以           | 可以                | 可以                 | 可以                 | 可以                |
| 获取桶区域位置         | 可以                   | 可以           | 可以                | 可以                 | 可以                 | 可以                |
| 删除桶             | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶策略           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶策略           | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶策略           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶ACL          | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶ACL          | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶日志管理配置       | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶日志管理配置       | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶的生命周期配置      | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶的生命周期配置      | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶的生命周期配置      | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶的多版本状态       | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶的多版本状态       | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶的事件通知        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶的事件通知        | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶默认存储类型       | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶默认存储类型       | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶的跨区域复制配置     | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶的跨区域复制配置     | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶的跨区域复制配置     | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶标签           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶标签           | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶标签           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶配额           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶配额           | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶存量信息         | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶清单           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶清单           | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 列举桶清单           | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶清单           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶的自定义域名       | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶的自定义域名       | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶的自定义域名       | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶的加密配置        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶的加密配置        | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶的加密配置        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶归档存储对象直读策略   | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶归档存储对象直读策略   | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶归档存储对象直读策略   | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置镜像回源规则        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取镜像回源规则        | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除镜像回源规则        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置DIS通知策略       | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取DIS通知策略       | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除DIS通知策略       | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置在线解压策略        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取在线解压策略        | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除在线解压策略        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 配置桶级默认WORM策略    | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶级默认WORM策略    | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶的网站配置        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶的网站配置        | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶的网站配置        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 设置桶的CORS配置      | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取桶的CORS配置      | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 删除桶的CORS配置      | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| PUT上传           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| POST上传          | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 复制对象            | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 下载对象            | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 可以                |
| 获取对象元数据         | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 可以                |
| 删除对象            | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 批量删除对象          | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 恢复归档存储或深度归档存储对象 | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 追加写对象           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 设置对象ACL         | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 获取对象ACL         | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 可以                |
| 修改对象元数据         | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 修改写对象           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 截断对象            | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 重命名对象           | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 配置对象级WORM保护策略   | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 列举桶中已初始化多段任务    | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 不可以               |
| 初始化上传段任务        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 上传段             | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 拷贝段             | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 不可以               |
| 列举已上传未合并的段      | 可以                   | 可以           | 可以                | 不可以                | 不可以                | 可以                |
| 合并段             | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
| 取消多段上传任务        | 可以                   | 不可以          | 可以                | 不可以                | 不可以                | 可以                |
   
#### OBS自定义策略样例
- **示例1：给用户授予OBS的所有权限**
  此策略表示用户可以对OBS进行任何操作，使用方式包括API、SDK、控制台及工具。
  由于用户登录OBS控制台时，会访问一些其他服务的资源，如CTS审计信息，CDN加速域名，KMS密钥等。因此除了配置OBS的权限外，还需要配置其他服务的访问权限。其中CDN属于全局服务，CTS、KMS等属于区域级服务，需要根据您实际使用到的服务和区域分别在全局项目和对应区域项目中配置**Tenant Guest** 权限。
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "obs:*:*"
              ]
          }
      ]
  }
  ```
  
- **示例2：给用户授予桶内所有对象的列举和下载权限**
  此策略表示用户可以对桶obs-example下的所有对象进行列举和下载。
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "obs:object:GetObject",
                  "obs:object:GetObjectVersion",
                  "obs:bucket:ListBucket"
              ],
              "Resource": [
                  "obs:*:*:object:obs-example/*",
                  "obs:*:*:bucket:obs-example"
              ]
          }
      ]
  }
  ```
  
- **示例3：给用户授予桶内对象的列举和指定目录对象的下载权限**
  此策略表示用户只能下载桶obs-example中"my-project/"目录下的所有对象，其他目录下的对象虽然可以列举，但无法下载。
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "obs:object:GetObject",
                  "obs:object:GetObjectVersion",
                  "obs:bucket:ListBucket"
              ],
              "Resource": [
                  "obs:*:*:object:obs-example/my-project/*",
                  "obs:*:*:bucket:obs-example"
              ]
          }
      ]
  }
  ```
  
- **示例4：给用户授予桶的读写权限（限定目录）**
  此策略表示用户可以对桶obs-example中"my-project"目录下的所有的对象进行列举、下载、上传和删除。
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "obs:object:GetObject",
                  "obs:object:ListMultipartUploadParts",
                  "obs:bucket:ListBucket",
                  "obs:object:DeleteObject",
                  "obs:object:PutObject"
              ],
              "Resource": [
                  "obs:*:*:object:obs-example/my-project/*",
                  "obs:*:*:bucket:obs-example"
              ]
          }
      ]
  }
  ```
  
- **示例5：给用户授予桶的所有权限**
  此策略表示用户可以对桶obs-example进行任何操作。
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "obs:*:*"
              ],
              "Resource": [
                  "obs:*:*:bucket:obs-example",
                  "obs:*:*:object:obs-example/*"
              ]
          }
      ]
  }
  ```
  
- **示例6：拒绝用户上传对象**
  拒绝策略需要同时配合其他策略使用，否则没有实际作用。用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循**Deny** **优先原则**。
  如果您给用户授予OBS OperateAccess的系统策略，但不希望用户拥有OBS OperateAccess中定义的上传对象的权限，您可以创建一条拒绝上传对象的自定义策略，然后同时将OBS OperateAccess和拒绝策略授予用户，根据Deny优先原则，则用户可以执行除了上传对象外OBS OperateAccess允许的所有操作。拒绝策略示例如下：
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Deny",
              "Action": [
                  "obs:object:PutObject"
              ]
          }
      ]
  }
  ```
  
- **示例7：** **给用户授予指定桶的修改桶存储类别权限** **以及桶内指定对象的删除权限**
  此策略表示用户可以修改桶obs-example的存储类别，以及对桶obs-example中"my-object.txt"对象进行删除。
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "obs:bucket:ListAllMyBuckets",
                  "obs:bucket:ListBucket"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "obs:object:DeleteObject",
                  "obs:bucket:PutBucketStoragePolicy"
              ],
              "Resource": [
                  "OBS:*:*:object:obs-example/my-object.txt",
                  "OBS:*:*:bucket:obs-example"
              ]
          }
      ]
  }
  ```
  
 
#### 相关链接
- [IAM产品介绍](https://support.huaweicloud.com/productdesc-iam/iam_01_0026.html)
- [策略授权支持的授权项](https://support.huaweicloud.com/api-obs/obs_04_0111.html)
 
