1、读/写ACL权限
对象存储针对存储空间(Bucket)和对象(Object)提供2这种类型的ACL:Bucket ACL和Object ACL,分别如表1和表2所示,可以在创建存储空间或者上传对象后的任意时间内修改ACL。
对象的读/写权限,首先默认继承Bucket ACL。但是,专门设置的Object ACL权限大于Bucket ACL权限。例如,设置对象1的Object ACL权限为public-read,则无论Bucket ACL权限配置如何,该对象1都可被公共读访问。
表1 Bucket ACL权限值
权限值 |
名称 |
权限对访问者的限制 |
public-read-write |
公共读/写 |
任何人(包括匿名访问者)都可以对该存储空间中的对象进行读/写/删除操作,所有这些操作产生的费用由该存储空间的Owner承担,请慎用该权限 |
public-read |
公共读 |
只有该存储空间Owner或者授权对象可以对存放在其中的对象进行写/删除操作,其他任何人(包括匿名访问者)可以对对象进行读操作 |
private |
私有 |
只有该存储空间的Owner或者授权对象可以对存放在其中的对象进行读/写/删除操作,其他人在未经授权的情况下无法访问该存储空间的对象 |
表2 Object ACL权限值
权限值 |
名称 |
权限对访问者的限制 |
public-read-write |
公共读/写 |
所有用户都拥有对该对象的读/写权限 |
public-read |
公共读 |
非对象的Owner只有该对象的读权限,对象的Owner拥有Owner拥有读/写权限 |
private |
私有 |
只有该对象的Owner拥有该对象的读/写权限,其他用户根据授权范围确认是否有该对象的读/写权限。 |
default |
继承Bucket ACL |
对象遵循Bucket ACL的权限 |
2、基于用户的授权策略RAM Policy
ACL提供的权限粒度较粗,主要是读/写控制,没有实现对象存储具体操作的细粒度权限控制,导致使用时无法达到精细化。为了解决此问题,引入授权策略来限制用户可用的对象存储具体操作,从而实现更精确的权限控制。针对特定的RAM子用户、RAM组,指定策略来授权该用户/组能访问的资源,该策略就是RAM Policy。编写RAM Policy时要采用JSON格式,可以通过如下字段来定义。
- Version,策略格式的版本号。
- Statement,描述授权语义。每条语义都对Effect、Action、Resource和Condition 的描述。
- Effect(效力),通过配置允许或者拒绝,控制用户的执行效果。
- Action(操作),对应各种云资源描述,如OSS的PutObject。
- Resource(资源),表示授权的云资源描述,如OSS的存储空间和对象资源。
- Condition(条件),表示授权生效的条件,如来自指定的IP地址。
如下是对存储空间(名字为mybucket)进行完全控制权限的RAM Policy,在RAM控制台将该策略授予某RAM子用户,就可以控制该RAM子用户的权限。
3、基于资源的授权策略Bucket Policy
从资源管理的角度,需要将对象存储的数据共享给多个用户访问。如果采用基于用户的RAM Pollicy,需要为每个用户配置厕率,在希望共享访问的用户数量上万时,配置工作将会非常繁琐。
为了解决该问题,对象存储OSS提供Bucket Policy功能,该功能控制存储资源被指定的用户访问。基于图形界面的Bucket Policy简单易用,Bucket Policy如图1所示。
图1 Bucket Policy