更新时间:2024-08-15 GMT+08:00
分享

ACL

访问控制列表(Access Control List,ACL)是一个指定被授权者和所授予权限的授权列表。

OBS桶和对象的ACL是基于账号的访问控制,默认情况下,创建桶和对象时会同步创建ACL,授权拥有者对桶和对象资源的完全控制权限。

OBS的ACL为了实现用户简单实用地授权,包含以下特点:

  • ACL对租户和租户下的用户都生效。
  • 桶和对象的拥有者相同时,设置桶上的ACL默认对桶及桶中对象都生效。
  • 桶创建时可以携带ACL,也可以创建成功后设置ACL;对象上传时可以携带ACL,也可以上传成功后再单独设置。

OBS ACL是基于账号级别的读写权限控制,权限控制细粒度不如桶策略和IAM权限。一般情况下,建议使用IAM权限和桶策略进行访问控制。

OBS支持通过ACL对表1所示用户或用户组授予桶的访问权限。

表1 OBS支持的被授权用户

被授权用户

描述

特定用户

ACL支持通过账号授予桶/对象的访问权限。授予账号权限后,账号下所有具有OBS资源权限的IAM用户都可以拥有此桶/对象的访问权限。

当需要为不同IAM用户授予不同的权限时,可以通过桶策略配置。

拥有者

桶的拥有者是指创建桶的账号。桶拥有者默认拥有所有的桶访问权限,其中桶ACL的读取和写入这两种权限永远拥有,且不支持修改。

对象的拥有者是上传对象的账号,而不是对象所属的桶的拥有者。对象拥有者默认拥有其对象的所有访问权限,其中对象ACL的读取和写入这两种权限永远拥有且不支持修改。

须知:

不建议修改桶拥有者对桶的读取和写入权限。

匿名用户

未注册华为云的普通访客。如果匿名用户被授予了访问桶/对象的权限,则表示所有人都可以访问对应的桶/对象,并且不需要经过任何身份认证。

须知:

开启匿名用户的桶/对象访问权限后,所有人都可以在不经过身份认证的情况下,对桶/对象进行访问。

日志投递用户组

说明:

仅桶ACL支持。

日志投递用户组用于投递OBS桶及对象的访问日志。由于OBS本身不能在账户的桶中创建或上传任何文件,因此在需要为桶记录访问日志时,只能由账户授予日志投递用户组一定权限后,OBS才能将访问日志写入指定的日志存储桶中。该用户组仅用于OBS内部的日志记录。

须知:

当日志记录开启后,目标存储桶的日志投递用户组会同步开启桶的写入权限和ACL读取权限。如果手动将日志投递用户组的桶写入权限和ACL读取权限关闭,桶的日志记录会失败。

ACL权限

桶ACL的访问权限如表2所示:

表2 桶ACL访问权限

权限

选项

描述

桶访问权限

读取权限

此权限可以获取该桶内对象列表和桶的元数据。

写入权限

此权限可以上传、覆盖和删除该桶内任何对象。

对象权限

对象读权限

此权限可以获取该桶内对象的内容和对象的元数据。

说明:

仅支持给除匿名用户和日志投递用户组之外的用户配置该权限。

ACL访问权限

读取权限

此权限可以获取对应的桶的权限控制列表。

桶的拥有者默认永远具有ACL的读取权限。

写入权限

此权限可以更新对应桶的权限控制列表。

桶的拥有者默认永远具有ACL的写入权限。

对象ACL的访问权限如表3所示:

表3 对象ACL访问权限

权限

选项

描述

对象访问权限

读取权限

此权限可以获取该对象内容和元数据。

ACL访问权限

读取权限

此权限可以获取对应的对象的权限控制列表。

对象的拥有者默认永远具有ACL的读取权限

写入权限

此权限可以更新对象的权限控制列表。

对象的拥有者默认永远具有ACL的写入权限。

每一次对桶/对象的授权操作都将覆盖桶/对象已有的权限列表,而不会对其新增权限。

桶ACL应用场景

在以下场景,建议您使用桶ACL:

  • 授予指定账号桶读取权限和桶写入权限,用以共享桶数据或挂载外部桶。比如,账号A授予账号B桶读取权限及桶写入权限后,账号B就可以通过OBS Browser+挂载外部桶、API&SDK等方式访问到该桶。
  • 授予日志投递用户组桶写入权限,用以存储桶访问请求日志。

对象ACL应用场景

在以下场景,建议您使用对象ACL:

  • 需要对象级的访问权限控制时。桶策略可以授予对象或对象集访问权限,当授予一个对象集权限后,想对对象集中某一个对象再进行单独授权,通过配置桶策略的方法显然不太实际。此时建议使用对象ACL,使得单个对象的权限控制更加方便。
  • 使用对象链接访问对象时。一般使用对象ACL,将某一个对象通过对象链接开放给匿名用户进行读取操作。

使用头域设置ACL

权限控制策略

OBS支持在创建桶或上传对象时通过头域设置桶或对象的权限控制策略(使用示例见创桶请求示例对象上传请求示例),其设置的权限控制策略只能选择预定义的几种策略。其中,x-obs-acl比较特殊,可以设置六种权限,这六种权限对桶或对象的Owner不产生影响,即Owner拥有完全控制的权限。其详细情况如下图所示。

表4 OBS预定义的权限控制策略

预定义的权限控制策略

描述

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权限。

在创建桶或上传对象时,可以用来设置权限控制策略的其他头域如下所示:

表5 通过头域设置桶或对象ACL的头域格式

头域

含义

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权限,且对象继承桶权限。

不能应用在对象上。

相关文档