更新时间:2024-03-04 GMT+08:00

桶ACL和对象ACL

访问控制列表(Access Control List,ACL)是一个指定被授权用户和所授予权限的授权列表,它可以帮助您管理桶和对象的访问权限。每一个桶和对象都有其对应的ACL,它定义了哪些账号或群组被授予访问权限以及其拥有的权限类型。当收到对资源的请求时,OBS会检查资源的ACL来验证请求者是否具有必要的访问权限。

默认情况下,创建桶和对象时会同步创建ACL,授予资源拥有者对桶和对象的完全控制权限(FULL_CONTROL)。

一个桶的ACL最多支持100条授权,一个对象的ACL也最多支持100条授权。

谁是被授权用户

被授权用户可以是使用云服务的账号或OBS预定义的群组,详细信息如表1所示。

表1 OBS支持的被授权用户

被授权用户

描述

特定用户

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

当需要为不同IAM用户授予不同的权限时,可以通过桶策略配置,具体操作请参见为IAM用户授予指定桶的操作权限

拥有者

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

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

须知:

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

匿名用户

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

注册用户组

注册用户组代表所有注册了云服务的账号(仅指账号,不包括通过IAM创建的用户组或用户)。注册用户必须要经过身份认证(目前主要通过AK/SK进行身份认证),才可以获取对应的访问权限。例如,当注册用户组被授予桶写入权限后,世界上任何已通过身份验证的云服务账号,都可以向您的桶上传、覆盖和删除对象。

日志投递用户组

说明:

仅桶ACL支持。

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

须知:

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

通过ACL可以授予什么权限

桶ACL的可以授予的权限如表2所示:

表2 桶ACL访问权限

权限

选项

描述

桶访问权限

读取权限READ

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

写入权限WRITE

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

ACL访问权限

读取权限READ_ACP

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

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

写入权限WRITE_ACP

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

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

对象ACL可以授予的权限如表3所示:

表3 对象ACL访问权限

权限

选项

描述

对象访问权限

读取权限READ

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

ACL访问权限

读取权限READ_ACP

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

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

写入权限WRITE_ACP

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

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

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

此外,可以在调用创建桶或上传对象API时通过头域设置ACL,可以设置六种预定义的权限,这六种权限对桶或对象的拥有者不产生影响,即拥有者仍然拥有完全控制的权限(FULL_CONTROL)。其详细情况如表4所示。

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

预定义的权限控制策略

描述

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,将某一个对象通过对象链接开放给匿名用户进行读取操作。