ACL
访问控制列表(Access Control List,ACL)是一个指定被授权者和所授予权限的授权列表。
OBS桶和对象的ACL是基于账号的访问控制,默认情况下,创建桶和对象时会同步创建ACL,授权拥有者对桶和对象资源的完全控制权限。
OBS的ACL为了实现用户简单实用地授权,包含以下特点:
- ACL对租户和租户下的用户都生效。
- 桶和对象的拥有者相同时,设置桶上的ACL默认对桶及桶中对象都生效。
- 桶创建时可以携带ACL,也可以创建成功后设置ACL;对象上传时可以携带ACL,也可以上传成功后再单独设置。
OBS ACL是基于账号级别的读写权限控制,权限控制细粒度不如桶策略和IAM权限。一般情况下,建议使用IAM权限和桶策略进行访问控制。
OBS支持通过ACL对表1所示用户或用户组授予桶的访问权限。
被授权用户 |
描述 |
---|---|
特定用户 |
ACL支持通过账号授予桶/对象的访问权限。授予账号权限后,账号下所有具有OBS资源权限的IAM用户都可以拥有此桶/对象的访问权限。 当需要为不同IAM用户授予不同的权限时,可以通过桶策略配置。 |
拥有者 |
桶的拥有者是指创建桶的账号。桶拥有者默认拥有所有的桶访问权限,其中桶ACL的读取和写入这两种权限永远拥有,且不支持修改。 对象的拥有者是上传对象的账号,而不是对象所属的桶的拥有者。对象拥有者默认拥有其对象的所有访问权限,其中对象ACL的读取和写入这两种权限永远拥有且不支持修改。
须知:
不建议修改桶拥有者对桶的读取和写入权限。 |
匿名用户 |
未注册的普通访客。如果匿名用户被授予了访问桶/对象的权限,则表示所有人都可以访问对应的桶/对象,并且不需要经过任何身份认证。
须知:
开启匿名用户的桶/对象访问权限后,所有人都可以在不经过身份认证的情况下,对桶/对象进行访问。 |
日志投递用户组
说明:
仅桶ACL支持。 |
日志投递用户组用于投递OBS桶及对象的访问日志。由于OBS本身不能在账户的桶中创建或上传任何文件,因此在需要为桶记录访问日志时,只能由账户授予日志投递用户组一定权限后,OBS才能将访问日志写入指定的日志存储桶中。该用户组仅用于OBS内部的日志记录。
须知:
当日志记录开启后,目标存储桶的日志投递用户组会同步开启桶的写入权限和ACL读取权限。如果手动将日志投递用户组的桶写入权限和ACL读取权限关闭,桶的日志记录会失败。 |
ACL权限
桶ACL的访问权限如表2所示:
权限 |
选项 |
描述 |
---|---|---|
桶访问权限 |
读取权限 |
此权限可以获取该桶内对象列表和桶的元数据。 |
对象读权限 |
此权限可以获取该桶内对象的内容和对象的元数据。 |
|
写入权限 |
此权限可以上传、覆盖和删除该桶内任何对象。 |
|
ACL访问权限 |
读取权限 |
此权限可以获取对应的桶的权限控制列表。 桶的拥有者默认永远具有ACL的读取权限。 |
写入权限 |
此权限可以更新对应桶的权限控制列表。 桶的拥有者默认永远具有ACL的写入权限。 |
对象ACL的访问权限如表3所示:
权限 |
选项 |
描述 |
---|---|---|
对象访问权限 |
读取权限 |
此权限可以获取该对象内容和元数据。 |
ACL访问权限 |
读取权限 |
此权限可以获取对应的对象的权限控制列表。 对象的拥有者默认永远具有ACL的读取权限 |
写入权限 |
此权限可以更新对象的权限控制列表。 对象的拥有者默认永远具有ACL的写入权限。 |
每一次对桶/对象的授权操作都将覆盖桶/对象已有的权限列表,而不会对其新增权限。
桶ACL应用场景
在以下场景,建议您使用桶ACL:
- 授予指定账号桶读取权限和桶写入权限,用以共享桶数据或挂载外部桶。比如,账号A授予账号B桶读取权限及桶写入权限后,账号B就可以通过OBS Browser+挂载外部桶、API等方式访问到该桶。
- 授予日志投递用户组桶写入权限,用以存储桶访问请求日志。
对象ACL应用场景
在以下场景,建议您使用对象ACL:
- 需要对象级的访问权限控制时。桶策略可以授予对象或对象集访问权限,当授予一个对象集权限后,想对对象集中某一个对象再进行单独授权,通过配置桶策略的方法显然不太实际。此时建议使用对象ACL,使得单个对象的权限控制更加方便。
- 使用对象链接访问对象时。一般使用对象ACL,将某一个对象通过对象链接开放给匿名用户进行读取操作。
使用头域设置ACL
权限控制策略
OBS支持在创建桶或上传对象时通过头域设置桶或对象的权限控制策略(使用示例见创桶请求示例,对象上传请求示例),其设置的权限控制策略只能选择预定义的几种策略。其中,x-obs-acl比较特殊,可以设置六种权限,这六种权限对桶或对象的Owner不产生影响,即Owner拥有完全控制的权限。其详细情况如下图所示。
预定义的权限控制策略 |
描述 |
---|---|
private |
桶或对象的所有者拥有完全控制的权限,其他任何人都没有访问权限 |
public-read |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。 设在对象上,所有人可以获取该对象内容和元数据。 |
public-read-write |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务。 设在对象上,所有人可以获取该对象内容和元数据。 |
public-read-delivered |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本,可以获取该桶内对象的内容和元数据。 不能应用在对象上。 |
public-read-write-delivered |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务,可以获取该桶内对象的内容和元数据。 不能应用在对象上。 |
bucket-owner-full-control |
设在对象上,桶和对象的所有者拥有对象的完全控制权限,其他任何人都没有访问权限。 默认情况下,上传对象至其他用户的桶中,桶拥有者没有对象的控制权限。对象拥有者为桶拥有者添加此权限控制策略后,桶所有者可以完全控制对象。 例如,用户A上传对象x至用户B的桶中,系统默认用户B没有对象x的控制权。当用户A为对象x设置bucket-owner-full-control策略后,用户B就拥有了对象x的控制权。 |
系统默认权限控制策略为private权限。
在创建桶或上传对象时,可以用来设置权限控制策略的其他头域如下所示:
头域 |
含义 |
---|---|
x-obs-grant-read |
授权给指定domain下的所有用户有READ权限。 |
x-obs-grant-write |
授权给指定domain下的所有用户有WRITE权限。 |
x-obs-grant-read-acp |
授权给指定domain下的所有用户有READ_ACP权限。 |
x-obs-grant-write-acp |
授权给指定domain下的所有用户有WRITE_ACP权限。 |
x-obs-grant-full-control |
授权给指定domain下的所有用户有FULL_CONTROL权限。 |
x-obs-grant-read-delivered |
授权给指定domain下的所有用户有对桶和桶内对象的READ权限,且对象继承桶权限。 不能应用在对象上。 |
x-obs-grant-full-control-delivered |
授权给指定domain下的所有用户有对桶和桶内对象的FULL_CONTROL权限,且对象继承桶权限。 不能应用在对象上。 |