Ceph radosgw 的访问权限控制

介绍

ACL(Access Control List),访问控制列表。用于控制用户或组对资源的访问权限,资源指的是桶、对象。任何情况下桶或对象的所有者都对其拥有所有的权限。

可以通过两种方式来操作权限:

  • 直接对桶、对象的ACL进行操作
  • 在创建桶、对象的时候设置权限

直接操作ACL

角色

角色是用来被赋予资源的权限。有组和用户之分。

  • 用户,radosgw中的用户,通过ID和DisplayName来指定。
  • 组,一系列的用户,通过一个URL来指定。

有如下:

角色 描述 示例
认证用户 radosgw中注册的用户。 <ID>user</ID><DisplayName>user</DisplayName>
认证的用户组 即所有的radosgw的用户 <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
所有的用户组 包括radosgw用户和匿名用户。 <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>

权限

对于资源的权限有5种:

权限 授权给桶 授权给对象
READ 列出对象、元数据 获取对象内容和元数据
WRITE 上传、删除对象 N/A
READ_ACP 获取桶的ACL 获取对象的ACL
WRITE_ACP 创建、修改桶的ACL 创建、修改对象的ACL
FULL_CONTROL 拥有以上所有权限 拥有以上所有权限

消息体

请求的消息体的格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version=”1.0” encoding=”UTF-8”?>
<AccessControlPolicy xmlns=http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>{id}</ID>
<DisplayName>{displayname}</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance" xsi:type=“Canonical User”>
{grantee}
</Grantee>
<Permission>{permission}</Permission>
</Grant>

</AccessControlList>
</AccessControlPolicy>

其中&lt;Owner&gt;指其所有者;&lt;Grant&gt;对应一个ACL,可以有多个;&lt;Grantee&gt;对应用户或用户组,&lt;Permission&gt;对应权限。

&lt;Grantee&gt;的四种格式:

创建时设置ACL

创建桶、对象的时候可以使用一组标准的ACL,每个标准的ACL都包含也线设定好的控制策略。通过请求头x-amz-acl来指定。

对应描述如下:

标准ACL 适用资源 描述
private 桶、对象 除了所有者拥有所有权限,其他用户都没有权限
public-read 桶、对象 除了所有者拥有所有权限,所有的用户组拥有对其的READ权限
public-read-write 桶、对象 除了所有者拥有所有权限,所有的用户组拥有对其的READ、WRITE权限
authenticated-read 桶、对象 除了所有者拥有所有权限,认证的用户组拥有对其的READ权限
bucket-owner-read 对象 除了所有者拥有所有权限,该对象所在桶的所有者拥有READ权限
bucket-owner-full-control 对象 除了所有者拥有所有权限,该对象所在桶的所有者拥有所有权限
log-delivery-write 日志传输组拥有对其WRITE、READ_ACP权限

总结

  • 桶、对象的访问控制是平级的,相互没有包含关系。
    也就是说若限制了桶的权限,并不代表不能操作桶内的对象;
    若放开了桶的权限,并不代表就能操作桶内的对象。
  • 系统默认给桶、对象的权限是其所有者拥有所有权限,也就是标准ACL中的private。
  • 标准ACL中bucket-owner-read的意义。
    当其他用户对你开放了其某个桶的写权限,你在其创建的对象的所有者是你,
    你对这个对象拥有所有权限,而桶的所有者对这个对象没有任何权限,这个时候就需要这个标准ACL。
    bucket-owner-full-control类似。

参考

AmazonS3 Doc:http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/acl-overview.html