桶ACL和对象ACL
访问控制列表(Access Control List,ACL)是一个指定被授权用户和所授予权限的授权列表,它可以帮助您管理桶和对象的访问权限。每一个桶和对象都有其对应的ACL,它定义了哪些账号或群组被授予访问权限以及其拥有的权限类型。当收到对资源的请求时,OBS会检查资源的ACL来验证请求者是否具有必要的访问权限。
默认情况下,创建桶和对象时会同步创建ACL,授予资源拥有者对桶和对象的完全控制权限(FULL_CONTROL)。
一个桶的ACL最多支持100条授权,一个对象的ACL也最多支持100条授权。
谁是被授权用户
被授权用户可以是使用云服务的账号或OBS预定义的群组,详细信息如表1所示。
被授权用户 |
描述 |
---|---|
特定用户 |
ACL支持通过账号授予桶/对象的访问权限。授予账号权限后,账号下所有具有OBS资源权限的IAM用户都可以拥有此桶/对象的访问权限。 当需要为不同IAM用户授予不同的权限时,可以通过桶策略配置,具体操作请参见为IAM用户授予指定桶的操作权限。 |
拥有者 |
桶的拥有者是指创建桶的账号。桶拥有者默认拥有所有的桶访问权限,其中桶ACL的读取和写入这两种权限永远拥有,且不支持修改。 对象的拥有者是上传对象的账号,而不是对象所属的桶的拥有者。对象拥有者默认永远拥有对象读取权限、ACL的读取和写入权限,且不支持修改。
须知:
不建议修改桶拥有者的对桶读取和写入权限。 |
匿名用户 |
如果匿名用户被授予了访问桶/对象的权限,则表示所有人都可以访问对应的桶/对象,并且不需要经过任何身份认证。 |
日志投递用户组
说明:
仅桶ACL支持。 |
日志投递用户组用于投递OBS桶及对象的访问日志。由于OBS本身不能在账号的桶中创建或上传任何文件,因此在需要为桶记录访问日志时,只能由账号授予日志投递用户组一定权限后,OBS才能将访问日志写入指定的日志存储桶中。该用户组仅用于OBS内部的日志记录。
须知:
当日志记录开启后,目标存储桶的日志投递用户组会同步开启桶的写入权限和ACL读取权限。如果手动将日志投递用户组的桶写入权限和ACL读取权限关闭,桶的日志记录会失败。 |
通过ACL可以授予什么权限
桶ACL的可以授予的权限如表2所示:
权限 |
选项 |
描述 |
---|---|---|
桶访问权限 |
读取权限READ |
此权限可以获取桶内对象列表、桶内多段任务、桶的元数据、桶的多版本设置和桶内多版本对象列表。 |
写入权限WRITE |
此权限可以上传、覆盖和删除该桶内任何对象。 |
|
对象权限 |
对象读权限READ |
此权限可以获取该桶内对象的内容和对象的元数据。 |
ACL访问权限 |
读取权限READ_ACP |
此权限可以获取对应的桶及桶内对象的权限控制列表。 桶的拥有者默认永远具有ACL的读取权限。 |
写入权限 WRITE_ACP |
此权限可以更新对应桶的权限控制列表。 桶的拥有者默认永远具有ACL的写入权限。 |
对象ACL可以授予的权限如表3所示:
权限 |
选项 |
描述 |
---|---|---|
对象访问权限 |
读取权限READ |
此权限可以获取该对象内容和元数据。 |
ACL访问权限 |
读取权限READ_ACP |
此权限可以获取对应对象的ACL权限控制列表。 对象的拥有者默认永远具有ACL的读取权限 |
写入权限WRITE_ACP |
此权限可以更新对应对象的ACL权限控制列表。 对象的拥有者默认永远具有ACL的写入权限。 |
![](https://support.huaweicloud.com/intl/zh-cn/tr-central-201-usermanual-obs/public_sys-resources/note_3.0-zh-cn.png)
每一次对桶/对象的授权操作都将覆盖桶/对象已有的权限列表,而不会对其新增权限。
此外,可以在调用创建桶或上传对象API时通过头域设置ACL,可以设置六种预定义的权限,这六种权限对桶或对象的拥有者不产生影响,即拥有者仍然拥有完全控制的权限(FULL_CONTROL)。其详细情况如表4所示。
预定义的权限控制策略 |
描述 |
---|---|
private |
桶或对象的拥有者拥有完全控制的权限,其他任何人都没有访问权限。此为系统默认的权限控制策略。 |
public-read |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。 设在对象上,所有人可以获取该对象内容和元数据。 |
public-read-write |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本、上传对象删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务。 设在对象上,所有人可以获取该对象内容和元数据。 |
public-read-delivered |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本,可以获取该桶内对象的内容和元数据。 不能应用在对象上。 |
public-read-write-delivered |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本、上传对象删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务,可以获取该桶内对象的内容和元数据。 不能应用在对象上。 |
bucket-owner-full-control |
设在桶上,桶的拥有者拥有完全控制的权限,其他任何人都没有访问权限。 设在对象上,桶或对象的拥有者拥有完全控制的权限,其他任何人都没有访问权限。 |
桶ACL使用场景
OBS ACL是基于账号和群组级别的读写权限控制,权限控制细粒度不如桶策略和IAM策略。一般情况下,建议使用IAM策略和桶策略进行访问控制。
在以下场景,建议您使用桶ACL:
- 授予指定账号桶读取权限和桶写入权限,用以共享桶数据或挂载外部桶。
对象ACL使用场景
OBS ACL是基于账号和群组级别的读写权限控制,权限控制细粒度不如桶策略和IAM策略。一般情况下,建议使用IAM策略和桶策略进行访问控制。
在以下场景,建议您使用对象ACL:
- 需要对象级的访问权限控制时。桶策略可以授予对象或对象集访问权限,当授予一个对象集权限后,想对对象集中某一个对象再进行单独授权,通过配置桶策略的方法显然不太实际。此时建议使用对象ACL,使得单个对象的权限控制更加方便。
- 使用对象链接访问对象时。一般使用对象ACL,将某一个对象通过对象链接开放给匿名用户进行读取操作。