ACL(Access Control List)


访问控制列表(ACL)使您可以管理存储桶(bucket)和对象(object)的访问权限。每个存储桶和对象都都有一个附加的ACL子资源。它定义了哪些用户或则组将被授予访问权限, 收到某个资源(存储桶或或者对象)的请求后,S2将检查相应的ACL以验证请求者是否拥有所需的访问权限。

创建存储桶或对象时,S2将创建一个默认ACL,以授予资源拥有者对资源的完全控制权限,如下面的示例存储桶ACL中所示。

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
        <ID>*** Owner-Canonical-User-ID ***</ID>
        <DisplayName>owner-display-name</DisplayName>
    </Owner>
    <AccessControlList>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Canonical User">
                <ID>*** Owner-Canonical-User-ID ***</ID>
                <DisplayName>display-name</DisplayName>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
    </AccessControlList>

</AccessControlPolicy>

示例ACL包含一个Owner元素表示资源拥有者的用户名。Grant元素表示被授权者(用户或预定义的组)和所授予的权限。您可以通过添加Grant元素授予权限。

被授权者(Grantee)

被授权者可以是s2用户或某个预定义的S2组。您可以通过email地址或用户名将权限授予某个用户。但是,如果您在授权请求设置的是email地址,S2将查找该email对应的用户名并将它添加到ACL。生成的ACL将始终包含的是s2用户的用户名,而不是用户的email地址。

S2预定义的组(Group)

S2拥有一系列预定义的组。将用户访问权限授予某个组时,您可以指定一个URI,而不是用户名。我们提供以下预定义的组:

可以指定被授权者的权限(Permissions)

下表列出了S2在ACL中支持的权限集及在操作资源语境中的含义。

Permission 当在存储桶上授权 当在对象上授权
READ 允许授权者列出bucket中所有的对象 允许被授权者读取对象的数据和meta信息
WRITE 允许被授权者创建、覆盖和删除存储桶中的对象 不可用
READ_ACP 允许被授权者读取存储桶ACL 允许被授权者读取对象的ACL
WRITE_ACP 允许被授权者修改存储桶的ACL 允许被授权者修改对象的ACL
FULL_CONTROL 允许被授权者在存储桶上的READ、WRITE、READ_ACP 和WRITE_ACP权限 允许被授权者在对象上的READ、READ_ACP 和WRITE_ACP权限

Canned ACL

S2支持一系列预定义的授权,称为标准ACL。每个标准ACL都有一组预定义的被授权者和权限。下表列出了一系列标准ACL和相关联的预定义授权。

Canned ACL 适用于 对应的ACL权限
private 存储桶和对象 拥有者将获得FULL_CONTROL。其他人没有访问权限(默认)。
public-read 存储桶和对象 拥有者将获得FULL_CONTROL。匿名用户有READ的权限
public-read-write 存储桶和对象 拥有者将获得FULL_CONTROL。AllUsers组用户有READ, WRITE的权限,对象没有WRITE权限
authenticated-read 存储桶和对象 拥有者将获得FULL_CONTROL。AuthenticatedUsers组用户有READ

如何指定ACL

S2 API使您可以在创建存储桶或对象时设置ACL。S2还提供API在现有存储桶或对象上设置ACL。这些API向您提供了以下方法来设置ACL:

  • 使用请求header设置ACL – 发送创建资源(存储桶或对象)的请求时,您可以使用x-amz-acl头设置Canned acl, 或者使用x-amz-grant-*头设置某个用户或者则组具有的权限。

  • 使用ACL API设置ACL – 当您发送在现有资源上设置ACL的请求时,您可以在请求标头或body中设置ACL, 如put_object_acl API

注意:

  • x-amz-acl和x-amz-grant-*不能同时指定, 同时指定是返回400错误
  • 在put_object_acl API中如果, 指定 x-amz-acl或者x-amz-grant-*请求头, 则忽略body中的ACL
x-amz-grant-*请求头类型

x-amz-grant-*请求头的值为type=value对的形式, 每个tpye=value以逗号隔开, 同一请求中可以指定多个x-amz-grant-*请求头, 允许的type为:

  • emailAddress, 用户的email地址
  • id, 用户名
  • uri, 预定义用户组的uri
Name Description
x-amz-grant-read 允许授权者READ的权限
x-amz-grant-write 允许授权者WRITE的权限
x-amz-grant-read-acp 允许授权者READ_ACP的权限
x-amz-grant-write-acp 允许授权者WRITE_ACP的权限
x-amz-grant-full-control 允许授权者READ, WRITE, READ_ACP, WRITE_ACP的权限

例子:

   x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com"

results matching ""

    No results matching ""