
# OBS不同权限控制方式的区别
默认情况下，OBS的资源（桶和对象）都是私有的，只有资源拥有者可以访问OBS资源，其他用户在未经授权的情况下均无OBS访问权限。OBS的权限控制是指通过编写访问策略向其他账号或者IAM用户授予资源的控制权限。例如，你拥有一个桶，你可以授权一个其他的IAM用户上传对象到你的桶中；你也可以将桶开放给非公有云用户访问，即桶作为一个公共资源，能被互联网上任何人访问。OBS提供多种方式将OBS资源权限授予给他人，资源拥有者可以根据业务需求制定不同的权限控制方案，从而确保数据安全。
#### 特性讲解
<video controls="controls" preload="none" id="object543811344116" class="idp-external-video" src="https://res-static.hc-cdn.cn/cloudbu-site/china/zh-cn/OBS-VIDEO/1733218606999664815.mp4" title="了解OBS的权限配置方式" poster="https://support.huaweicloud.com/perms-cfg-obs/figure/zh-cn_image_0000002374006788.jpg" height="300.0000" width="600.0000"></video>
#### OBS权限控制模型
OBS提供多种权限控制方式，包括IAM权限、桶策略、对象ACL、桶ACL。各个方式说明及应用场景如[表1]所示。
图1OBS权限控制方式   
![](https://support.huaweicloud.com/perms-cfg-obs/figure/zh-cn_image_0257815079.png)
 表1OBS权限控制方式说明和应用场景 
| 方式    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 应用场景                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|:---|
| IAM权限 | IAM权限主要用于管理IAM用户或用户组对云服务和资源的访问权限。通过定义允许和拒绝的访问操作，允许或禁止指定IAM用户或用户组操作账号内指定的云服务和资源。管理员创建IAM用户后，需要将用户加入到一个用户组中，IAM可以对这个组授予OBS所需的权限，组内用户自动继承用户组的所有权限。                                                                                                                                                                                                                                                                                                                                               | - 使用策略控制账号下整个云资源的权限时，使用IAM权限授权。  - 使用策略控制账号下OBS所有的桶和对象的权限时，使用IAM权限授权。  - 使用策略控制账号下OBS指定资源的权限时，使用IAM权限授权。   |
| 桶策略   | 桶策略是作用于所配置的OBS桶及桶内对象的。桶拥有者通过桶策略可为IAM用户或其他账号授权桶及桶内对象精确的操作权限，桶ACL和对象ACL是对桶策略的补充（更多场景下是替代）。                                                                                                                                                                                                                                                                                                                                                                                                      | - 允许其他华为云账号访问OBS资源，可以使用桶策略的方式授权对应权限。  - 当不同的桶对于不同的IAM用户有不同的访问控制需求时，需使用桶策略分别授权IAM用户不同的权限。                                                                                                  |
| 对象ACL | 基于账号或用户组的对象级访问控制，对象的拥有者可以通过对象ACL向指定账号或用户组授予对象基本的读、写权限。 说明： - 默认情况下，创建对象时会同步创建ACL，授权对象拥有者拥有对象的完全控制权限。  - 对象的拥有者是上传对象的账号，而不是对象所属的桶的拥有者。例如，如果账号B被授予访问账号A的桶的权限，然后账号B上传一个文件到桶中，则账号B是对象的拥有者，而不是账号A。默认情况下，账号A没有该对象的访问权限，也无法读取和修改该对象的ACL。   | - 需要对象级的访问权限控制时，桶策略可以授予对象或对象集访问权限，当授予一个对象集权限后，想对对象集中某一个对象再进行单独授权，通过配置桶策略的方法显然不太实际。此时建议使用对象ACL，使得单个对象的权限控制更加方便。  - 使用对象链接访问对象时。一般使用对象ACL，将某一个对象通过对象链接开放给匿名用户进行读取操作。                  |
| 桶ACL  | 基于账号或用户组的桶级访问控制，桶的拥有者可以通过桶ACL向指定账号或用户组授予桶基本的读、写权限。 说明： - 默认情况下，创建桶时会同步创建ACL，授权拥有者对桶的完全控制权限。  - 桶ACL的权限控制粒度不如IAM权限和桶策略，一般情况下，建议使用IAM权限和桶策略进行权限访问控制。                                                                                   | - 授予指定账号桶读取权限和桶写入权限，用以共享桶数据或挂载外部桶。比如，账号A授予账号B桶读取权限及桶写入权限后，账号B就可以通过OBS Browser+挂载外部桶、API\&SDK等方式访问到该桶。  - 授予日志投递用户组桶写入权限，用以存储桶访问请求日志。                                                  |
   
#### OBS权限与IAM权限的关系
OBS权限控制方式中，对象限时访问、对象ACL、桶ACL和桶策略属于OBS权限。某些服务级的权限（例如创建桶、列举所有桶）无法通过OBS权限进行配置，只能在IAM权限中配置，OBS权限只能作用于资源级（桶和对象）。如果要同时授予OBS服务级权限和资源级权限，必须使用IAM权限，或者IAM权限与OBS权限结合使用。
图2OBS权限与IAM权限的关系   
![](https://support.huaweicloud.com/perms-cfg-obs/figure/zh-cn_image_0257817646.png)
 #### OBS权限控制要素
OBS的权限控制模型中，以下几个要素共同决定了授权的结果：
- **Principal（被授权用户）**
- **Effect（效力）**
- **Resource（资源）**
- **Action（动作）**
- **Condition（条件）**
各个要素的详细介绍，请参见[桶策略参数说明](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0041.html)。
不同权限控制方式中各个要素的支持情况如[表2]所示。
 表2不同权限控制方式中的OBS权限控制要素 
| 方式    | 被授权用户                                                                                                                                                                                                                                                                                                                            | 支持的效力                                                                                                                                                                                                                              | 被授权资源        | 被授权动作                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 是否支持配置条件 |
|:---|:---|:---|:---|:---|:---|
| IAM权限 | IAM用户                                                                                                                                                                                                                                                                                                                            | - 允许  - 拒绝   | OBS所有资源或指定资源 | OBS所有操作权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 支持       |
| 桶策略   | - 账号  - IAM用户  - 所有用户   | - 允许  - 拒绝   | 指定桶及桶内资源     | OBS所有操作权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 支持       |
| 对象ACL | - 账号  - 匿名用户                                                                                                        | 允许                                                                                                                                                                                                                                 | 对象           | - 获取对象内容及元数据  - 获取指定版本对象内容及元数据  - 获取对象ACL相关信息  - 获取指定版本对象ACL相关信息  - 设置对象ACL  - 设置指定版本对象ACL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 不支持      |
| 桶ACL  | - 账号  - 匿名用户  - 日志投递用户组               | 允许                                                                                                                                                                                                                                 | 桶            | - 判断桶是否存在  - 列举桶内对象，获取桶元数据  - 列举桶内多版本对象  - 列举多段上传任务  - PUT上传，POST上传，上传段，初始化上传段任务，合并段  - 删除对象  - 删除特定版本的对象  - 获取桶ACL的相关信息  - 设置桶ACL  - 获取对象的内容  - 获取对象的元数据   | 不支持      |
   
#### IAM权限、桶策略和ACL如何选择？
基于三者的优劣势对比，通常情况下推荐您优先使用IAM权限和桶策略：
- 以下情况使用IAM权限：
  - 要对同账号下的IAM用户授予权限时
  
  - 要给所有OBS资源或者多个桶配置相同权限时
  
  - 要配置OBS服务级权限时，如创建桶、列举桶
  
  - 临时授权访问OBS时，限制临时访问密钥的权限
   
- 以下情况使用桶策略：
  - 要进行跨账号授权或对所有用户授权时
   
![](https://support.huaweicloud.com/perms-cfg-obs/public_sys-resources/note_3.0-zh-cn.png)
无论选择哪种方式，建议尽可能保持统一。随着IAM权限和桶策略数量的增加，权限维护难度将越来越大。
**何时选择** **ACL** **？**
- 作为IAM权限和桶策略的补充： IAM权限和桶策略已授予某个对象集访问权限，还想对其中某一个对象再进行单独授权
  
- 需要将某个对象开放给所有互联网匿名用户访问，对象ACL操作更为便捷 上传对象时可通过携带ACL头域指定对象的读写权限
  
#### OBS权限控制原则
- 最小权限原则 仅授予IAM用户或账号执行任务所需的最小权限。例如，一个IAM用户仅需执行向指定目录上传、下载对象任务，则无需为其配置整个桶的读写权限。
  
- 责任分离原则 同一账号下建议使用不同IAM用户分别管理OBS资源和权限。例如，IAM用户A负责权限分配，而其他IAM用户负责管理OBS资源。
  
- 条件限制原则 尽可能地为权限定义更精细化的条件，约束权限生效的场景，强化桶内资源的安全性。例如，约束OBS只接受来自某特定IP地址发起的访问请求。
  
 
 #### 访问控制机制冲突时，如何工作？
OBS权限控制要素中，Effect（效力）包含两种：Allow（允许）和Deny（拒绝），分别表示允许或拒绝执行某操作的权限。
基于最小权限原则，权限控制策略的结果默认为Deny， 显式的Deny始终优先于Allow。例如，IAM权限授权了用户访问对象的权限，但是桶策略拒绝了该用户访问对象的权限，且没有ACL时，该用户不能访问对象。
没有策略授予Allow权限时，默认情况即为Deny权限。当有策略授权Allow权限，且没有其他策略Deny该权限时，Allow的权限才能生效。例如，某个桶已经存在多条Allow权限的桶策略，再新增Allow权限的桶策略，会在原权限的基础上进行叠加，增大用户的权限；如果新增Deny权限的桶策略，则会根据Deny优先原则调整用户的权限，即使Deny策略中定义的动作在其他桶策略中Allow。
图3访问策略授权过程   
![](https://support.huaweicloud.com/perms-cfg-obs/figure/zh-cn_image_0000001664558420.png)
同账号场景下，为当前华为云账号下的IAM用户授予OBS桶和桶内资源的访问权限，桶策略、IAM权限和ACL的Allow和Deny作用结果如[图4]所示。ACL是基于账号级别的读写权限控制，IAM用户在访问所属账号的桶和桶内资源时，不受ACL控制。
图4同账号场景下桶策略、IAM权限的Allow和Deny作用结果   
![](https://support.huaweicloud.com/perms-cfg-obs/figure/zh-cn_image_0000001479778546.png)
跨账号场景下，为其他华为云账号及账号下的IAM用户授予OBS桶和桶内资源的访问权限，桶策略、IAM权限和ACL的Allow和Deny作用结果如[图5]所示。
图5跨账号场景下桶策略、IAM权限和ACL的Allow和Deny作用结果   
![](https://support.huaweicloud.com/perms-cfg-obs/figure/zh-cn_image_0000001555603997.png)
![](https://support.huaweicloud.com/perms-cfg-obs/public_sys-resources/note_3.0-zh-cn.png)
- 当桶策略和IAM策略均为Default Deny，ACL设置为Allow时，由于ACL权限范围限制，最终的作用结果其实为Deny。ACL可以理解为对桶策略的一种补充。
 
#### 相关概念
- 账号：用户注册华为云后自动创建，该账号对其所拥有的资源和IAM用户具有完全的访问控制权限。
- IAM用户：由管理员在IAM中创建的用户，是云服务的使用者，对应员工、系统或应用程序，具有身份凭证（密码和访问密钥），可以登录管理控制台或者访问API。
- 匿名用户：未注册华为云的普通访客。
- 日志投递用户组：用于投递OBS桶及对象的访问日志。由于OBS本身不能在用户的桶中创建或上传任何文件，因此在需要为桶记录访问日志时，只能由用户授予日志投递用户组一定权限后，OBS才能将访问日志写入指定的日志存储桶中。该用户组仅用于OBS内部的日志记录。
 
