ACL
访问控制列表(Access Control List,ACL)用于资源拥有者给其他账号授予资源的访问权限。OBS ACL是基于账号级别的读写权限控制,且主要用于授予基本的读/写权限,权限控制细粒度不如桶策略和IAM权限。一般情况下,建议使用IAM权限和桶策略进行访问控制。
默认情况下,创建存储桶或对象时仅资源拥有者对资源的完全控制权限,即桶创建者对桶拥有完全控制权限,对象上传者对对象拥有完全控制权限,而其他账号默认无权访问资源。如果资源拥有者想授予其他账号资源的读写权限,可以使用ACL实现。OBS桶和对象的ACL是基于账号进行授权,授权后对账号和账号下的IAM用户都生效。
ACL应用场景
在以下场景,建议您使用ACL:
- 账号A上传对象a到账号B的桶,对象a拥有者是账号A,账号B默认没有对象a的读写权限,此时建议账号A将对象ACL设置为bucket-owner-full-control权限,此时账号B拥有对象a的完全控制权,便于账号B作为桶拥有者对对象进行统一管理。
- 需要对象级的访问权限控制时。桶策略可以授予对象或对象集访问权限,当授予一个对象集权限后,想对对象集中某一个对象再进行单独授权,通过配置桶策略的方法显然不太实际。此时建议使用对象ACL,使得单个对象的权限控制更加方便。
桶ACL和对象ACL的关系
OBS支持为桶和对象分别配置ACL,桶ACL和对象ACL的关系如表1:
比较维度 |
桶ACL |
对象ACL |
---|---|---|
谁来授权 |
桶拥有者 指创建桶的账号。桶拥有者默认拥有所有的桶访问权限,其中桶ACL的读取和写入这两种权限永远拥有,且不支持修改。不建议修改桶拥有者对桶的读取和写入权限。 |
对象拥有者 指上传对象的账号,而不是对象所属桶的拥有者。例如,账号A上传对象a到账号B的桶时,对象拥有者是账号A。 对象拥有者默认拥有其对象的所有访问权限,其中对象ACL的读取和写入这两种权限永远拥有且不支持修改。 |
|
|
|
|
|
|
桶ACL和对象ACL的继承关系 |
对象ACL继承桶ACL时,授权的用户取桶ACL和对象ACL的全集:
|
可以授权给谁
OBS支持通过ACL对表2所示用户授予桶的访问权限。
被授权用户类型 |
描述 |
---|---|
其他账号 |
ACL支持通过账号授予桶/对象的访问权限。授予账号权限后,账号下所有具有OBS资源权限的IAM用户都可以拥有此桶/对象的访问权限。 当需要为其他账号下不同IAM用户授予不同的权限时,可以通过桶策略配置。
说明:
跨账号场景,用户在拥有ACL权限的同时,还要拥有IAM权限,才能正常访问资源,详见访问控制机制冲突时,如何工作? |
匿名用户 |
未注册华为云的普通访客。如果匿名用户被授予了访问桶/对象的权限,则表示所有人都可以访问对应的桶/对象,并且不需要经过任何身份认证。
注意:
开启匿名用户的桶/对象访问权限后,所有人都可以在不经过身份认证的情况下,对桶/对象进行访问,请谨慎操作。 |
日志投递用户组
说明:
仅桶ACL支持。 |
日志投递用户组用于投递OBS桶及对象的访问日志。由于OBS本身不能在账户的桶中创建或上传任何文件,因此在需要为桶记录访问日志时,只能由账户授予日志投递用户组一定权限后,OBS才能将访问日志写入指定的日志存储桶中。该用户组仅用于OBS内部的日志记录。
须知:
当日志记录开启后,目标存储桶的日志投递用户组会同步开启桶的写入权限和ACL读取权限。如果手动将日志投递用户组的桶写入权限和ACL读取权限关闭,桶的日志记录会失败。 |
可以授予什么权限
使用桶ACL功能可以配置表4 桶访问权限和表5 桶ACL访问权限:
配置选项 |
描述 |
---|---|
读取权限 |
允许被授权者获取桶内对象列表和桶元数据。 |
写入权限 |
允许被授权者向桶中上传对象。 对于桶中现有对象,允许授权者删除和覆盖这些对象。 |
对象读权限 |
对象继承桶的访问权限,在桶配置读取权限时,对象继承配置,允许被授权者获取对象内容和元数据。 |
使用对象ACL功能可以配置表6 对象访问权限和表7 对象ACL访问权限:
如何设置ACL
您可以使用系统预定义的ACL设置桶和对象ACL,也可以自定义ACL。
OBS提供6种预定义ACL,如表 OBS预定义ACL所示,预定义ACL的被授权用户是所有用户,即没有针对指定账号进行ACL配置,配置成功后,所有用户均生效。
预定义ACL |
描述 |
---|---|
private |
桶或对象的所有者拥有完全控制的权限,其他任何人都没有访问权限。 系统默认配置为private。 |
public-read |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据。 设在对象上,所有人可以获取该对象内容和元数据。 |
public-read-write |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务。 设在对象上,所有人可以获取该对象内容和元数据,等同于public-read。 |
public-read-delivered |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据,相较于public-read额外可以获取该桶内对象的内容和元数据。 不能应用在对象上。 |
public-read-write-delivered |
设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务,相较于public-read-write额外可以获取该桶内对象的内容和元数据。 不能应用在对象上。 |
bucket-owner-full-control |
设在对象上,桶和对象的所有者拥有对象的完全控制权限,其他任何人都没有访问权限。 默认情况下,上传对象至其他用户的桶中,桶拥有者没有对象的控制权限。对象拥有者为桶拥有者添加bucket-owner-full-control后,桶所有者可以完全控制对象。 例如,用户A上传对象a至用户B的桶中,系统默认用户B没有对象a的控制权。当用户A为对象a设置bucket-owner-full-control后,用户B就拥有了对象a的完全控制权。 |
使用控制台配置预定义ACL
使用API配置预定义ACL
使用x-obs-acl头域,可以在创建桶或上传对象时通过头域设置桶或对象的ACL(使用示例见创桶请求示例,对象上传请求示例),也可以在创桶后配置桶ACL、在上传对象后配置对象ACL。
使用SDK配置预定义ACL
创建桶设置ACL |
BrowserJS不支持创建桶 |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
设置桶ACL |
||||||||||
上传对象设置ACL |
||||||||||
设置对象ACL |
使用OBS Browser+配置预定义ACL
使用obsutil配置预定义ACL
您可以自定义ACL,为指定账号或匿名用户授权,表7是桶/对象支持的ACL配置项:
配置选项 |
作用在桶上 |
作用在对象上 |
对应API头域 |
---|---|---|---|
READ |
允许被授权者获取桶内对象列表和桶元数据。 |
允许被授权者获取对象内容和元数据。 |
x-obs-grant-read |
WRITE |
允许被授权者向桶中上传对象。 对于桶中现有对象,允许授权者删除和覆盖这些对象。 |
不支持 |
x-obs-grant-write |
READ_ACP |
允许被授权者读取桶ACL属性。 |
允许被授权者读取对象ACL属性。 |
x-obs-grant-read-acp |
WRITE_ACP |
允许被授权者更新桶ACL属性。 |
允许被授权者更新对象ACL属性。 |
x-obs-grant-write-acp |
FULL_CONTROL |
允许被授予者拥有READ、WRITE、READ_ACP和WRITE_ACP权限。 |
允许被授予者对象的READ、READ_ACP和WRITE_ACP权限。 |
x-obs-grant-full-control |
OBS支持自定义配置对象ACL继承桶ACL,使用x-obs-grant-read-delivered头域配置桶ACL,允许被授权者获取桶内对象列表和桶元数据,且对象继承桶ACL的READ。使用x-obs-grant-full-control-delivered头域配置桶ACL,允许被授予者拥有READ、WRITE、READ_ACP和WRITE_ACP权限,且对象继承桶ACL的READ、READ_ACP和WRITE_ACP。
使用控制台配置自定义ACL
使用API配置自定义ACL
使用SDK配置自定义ACL
创建桶设置ACL |
BrowserJS不支持创建桶 |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|
设置桶ACL |
||||||||||
上传对象设置ACL |
||||||||||
设置对象ACL |
使用OBS Browser+配置自定义ACL
使用obsutil配置自定义ACL