# ACL访问控制
新浪云存储ACL(Access Control List,即:访问控制列表)在计算机文件系统中体现为附加在一个object上的权限列表;用户可以通过ACL指定哪些用户、组或系统进程可被授予object的访问权限,以及允许在object上进行哪些操作。
# ACL功能
云存储ACL具备以下功能:
# 身份认证
新浪云存储的开发者可根据AccessKey和SecureKey对本次请求进行签名,ACL根据签名来判断当前发起请求的用户的身份。
# 权限管理与校验
新浪云存储用户可通过ACL来管理bucket和object的访问控制权限,管理方式即设置bucket policy和object policy。通过设置policy可允许云存储的注册用户将资源(bucket和object)的访问和控制权限开放给其他用户。
新浪云存储用户可以是:
- 云存储注册用户
- 匿名用户
- 其他用户系统中的用户, 通过签名方式灵活指定
policy的功能说明:
- bucket policy:可通过对bucket的权限设置实现粗粒度的权限控制;
- object policy:则是针对单个文件进行权限控制。
# ACL基本概念
名称 | 含义 | 描述 |
---|---|---|
Policy | 权限 | 用户通过Policy来管理云存储内资源访问权限;Policy可以由一条或多条策略组成;Policy之间相互独立。 |
Owner | 资源的拥有者 | 创建bucket或object时,ACL在policy中设置的Owner信息;Owner与Bucket、Object绑定,不可被修改,对用户透明;Owner具备Bucket、Object的root权限,可以进行任何操作;ACL通过签名信息来判断当前发起请求的用户是不是Owner。 |
Requester | 请求者 | Requester即发起Http Request的云存储使用者。 |
Group | 被授权的组 | 用户可以设置特定组内的用户对所属资源的访问权限。指定本条权限是针对哪个用户组。 |
User | 被授权的人 | 指定本条权限是针对哪个用户。 |
Grantee | 授权的人或者组 | Grantee可以是User,也可以是Group。 |
Grant | 授予何种权限 | 例如:授权A用户对资源只读;授权B用户对资源有读写权限; |
# Grantee是谁
Grantee可以是一个云存储中的注册用户,用UserId标示, 例如:SINA0000001001HBK388。
Grantee还可以是一个新浪云存储预定义的用户组,有如下几种:
- GRPS0000000CANONICAL:此组表示所有的新浪云存储注册帐户。所有的请求必须签名(认证),如果签名认证通过,即可按照已设置的权限规则进行访问。
- GRPS000000ANONYMOUSE:匿名用户组,对应的请求可以不带签名。例如:把资源/bucket_name/file.txt对GRPS000000ANONYMOUSE设置为只读,则任何人不用签名就可以进行下载。
- SINA000000000000IMGX:图片处理服务,将您的bucket的ACL设置为对SINA000000000000IMGX的读写权限,在您使用图片处理服务的时候可以免签名。
# Grant包括什么
下表列出了可以给资源(bucket或者object)授予的权限:
权限 | 被作用于Bucket时 | 被作用于Object时 |
---|---|---|
READ | 允许Grantee列当前Bucket中的文件 | 允许Grantee下载文件、获取文件的Metadata |
WRITE | 允许Grantee在当前Bucket中创建、覆盖、删除任何Object | 不适用 |
READ_ACP | 允许Grantee读取当前Bucket的ACL信息 | 允许Grantee读取当前Object的ACL信息 |
WRITE_ACP | 允许Grantee设置当前Bucket的ACL | 允许Grantee设置当前Object的ACL |
FULL_CONTROL | FULL_CONTROL = READ + WRITE + READ_ACP + WRITE_ACP | FULL_CONTROL = READ + WRITE + READ_ACP + WRITE_ACP |
# 示例
/*
用户SINA0000000123456789有全部权限
匿名用户只读
认证用户读写
*/
{
'SINA0000000123456789' : [ "read", "read_acp" , "write", "write_acp" ],
'GRPS000000ANONYMOUSE' : [ "read" ],
'GRPS0000000CANONICAL' : [ "read", "write" ]
}
# 快捷ACL
当您通过HTTP请求创建资源(bucket或object)时,可以设置Request Header(请求头):x-amz-acl
,创建资源的同时设置ACL。
快捷ACL | 作用于 | 描述 |
---|---|---|
private | Bucket和Object | Owner权限 = FULL_CONTROL,其他人没有任何权限 |
public-read | Bucket和Object | Owner权限 = FULL_CONTROL,GRPS000000ANONYMOUSE权限 = READ |
public-read-write | Bucket和Object | Owner权限 = FULL_CONTROL,GRPS000000ANONYMOUSE权限 = READ + WRITE |
authenticated-read | Bucket和Object | Owner权限 = FULL_CONTROL,GRPS0000000CANONICAL权限 = READ |
# 如何设置
设置ACL有两种方式:
- 以上面示例中的JSON格式,通过调用PUT ACL接口对已有资源进行设置;
- 通过快捷方式,在创建资源(bucket或object)时,可以设置Request Header(请求头):x-amz-acl,创建资源的同时设置ACL。
相关API,请参照API文档中的介绍。