一、OSS本身的权限控制
1.权限类型
Bucket目前有三种访问权限:public-read-write,public-read和private;Object目前有四种访问权限:default,public-read-write,public-read和private;对于权限的详细介绍看访问控制中的bucket级别权限及object级别权限的内容介绍;
2.权限设定与获取
Bucket级别及object级别的权限设置及获取均可以通过API/SDK/控制台等进行操作;
API:
Put Bucket ACL
PutBucket
GetBucketACL
PutObject
PutObjectACL
GetObjectACL
SDK:
Java SDK--Bucket
JavaSDK--Object
控制台:
Bucket:控制台—>OSS-->选择具体的bucket—>基础设置
Object:控制台—>OSS-->选择具体的bucket-->文件管理—>点击具体文件
3.常见问题
1)如何批量设置objectacl
调用listobject接口遍历需要设置的object,结合putobjectacl接口进行设置即可,参考Java—管理文件 ;
2)上传object过程中如何设置object acl
Java:
ObjectMetadata meta = new ObjectMetadata();
meta.setObjectAcl(CannedAccessControlList.PublicReadWrite);
Python:
bucket.put_object('remote.txt', 'content of object', headers={'x-oss-object-acl': permission})
str permission: 可以是oss2.OBJECT_ACL_DEFAULT、oss2.OBJECT_ACL_PRIVATE、oss2.OBJECT_ACL_PUBLIC_READ或oss2.OBJECT_ACL_PUBLIC_READ_WRITE。
参考:python Git源码
PHP:
$options = array(
OssClient::OSS_HEADERS => array(
'Expires' => '2012-10-01 08:00:00',
'Content-Disposition' => 'attachment; filename="xxxxxx"',
‘OSS_OBJECT_ACL’=>’ public-read’
));
try{
$ossClient->putObject($bucket, $object, $content, $options);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
读写权限,可选值 ['default', 'private', 'public-read', 'public-read-write']
参考:PHP Git源码
3)bucket设置为私有,能否防止恶意下载
不能防止,一但对应资源的签名url对外暴露,在签名url有效期内就可以通过签名url下载对应的资源;
4)bucket私有,如何获取资源的链接
参考:https://help.aliyun.com/knowledge_detail/65898.html
5)bucket私有,获取到的资源链接是否具有时效性
有时效性,一但过期就不可被访问
6)获取到的资源链接是否可以永久有效
将bucket改为公共读/公共读写,获取到的object链接一般都是永久有效的,但是如果bucket私有要获取永久有效的链接,不支持也没意义(私有本身就是为了保证数据安全性,一定期限内可访问,一定程度上防止恶意下载,链接有效时间过长也就失去了对应的意义)。
二、账户级别权限控制
账户分为主账户、子账户及STS临时账户,其中主账户有OSS的全部权限,子账户及STS临时账户可以进行细粒度的权限划分控制,授权OSS的部分权限;
子账户创建参考:OSS细粒度权限控制—子账户创建部分的内容 ;
STS临时账户创建:STS临时授权访问
OSS支持的权限:访问控制
1.子账户及STS临时账户的业务场景
1)子账户业务场景
子账户可以用于企业内部细粒度的OSS权限划分,如:管理员拥有OSS的全部权限;部分业务人员只拥有其业务应用的bucket的权限,其他bucket无权限;部分业务人员只有bucket的只读权限;部分业务人员只有bucket下某个目录的操作权限等;
子账户的创建便于企业内部的权限划分及回收,不建议将子账户应用于实际的业务服务端,控制客户的权限,服务端的权限控制建议自建数据库表进行权限控制;
2)临时账户业务场景
STS临时账户的定义为子账户扮演了某个角色而获取到了临时的权限,这样的账户叫做临时账户,故对应的子账户得拥有扮演对应角色的权限,而角色得拥有OSS的权限;临时账户拥有的权限是角色权限及创建临时账户policy权限的交集;
STS临时账户一般应用于移动端sdk或者web 端 ,OSS IOS/Android SDK初始化client就通过STS临时账户进行,JS web sdk可以通过STS临时账户操作OSS资源;或者如果企业客户要临时授权给第三方用户操作bucket的权限,也可以生成临时账户供其使用;临时账户具有时效性,最长3600秒过期,过期时间可控且权限粒度可控,具有较高的安全性;