1.引子:如何授权子账号在控制台针对指定的Bucket设置图片样式呢?
【使用场景】:某企业内部有众多Bucket,并且不同的Bucket分别指定了Bucket的管理员。目前Bucket A的管理员期望能够针对Bucket A中的图片通过设置图片样式的方式进行通过管理。
目前可以通过授权子账号“AliyunOSSFullAccess”权限的方式在控制台进行图片样式设置。但是赋予子账号“AliyunOSSFullAccess”后,子账号的操作权限过大。该账号能够操作管理所有的Bucket。在企业的实际使用过程中,每个Bucket都是由明确的使用用途,基本不可能授予每个子账号管理所有Bucket的权限。
因此,我们考虑是不是可以通过RAM Policy的方式针对指定的子账号授予指定Bucket的操作管理权限。从而达到如上的预期?
2.配置操作
2.1准备工作:
- 创建1个子账号;(示例中子账号tmp-user)
- 创建1个Bucket;(示例中Bucket名称test-beijing-2019)
- 创建RAM Policy;(示例中的RAM Policy名称 BucketStylePolicy)
2.2 创建RAM Policy:
由于是在请求图片时带上了图片样式处理操作,例如“http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,h_100”。 因此RAM Policy需要包含2部分的授权:
- Get Object以及List Objects相关授权;
- 图片样式处理相关授权;
其中图片样式相关API操作如下.PS:详细图片样式相关API操作:图片样式API接口
Put Style //创建图片样式
List Style //获取某个Bucket下所有图片样式信息
Get Style //获取某个样式(Style)的属性信息,包括样式名称、内容,以及创建和最后修改时间
Delete Style //删除某个图片样式
如下是授予子账号创建、修改、删除图片样式的相关RAM Policy授权:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:ListObjects",
"oss:GetBucketAcl",
"oss:Putstyle",
"oss:Liststyle",
"oss:Getstyle",
"oss:Deletestyle"
],
"Resource": [
"acs:oss:*:*:test-beijing-2019",
"acs:oss:*:*:test-beijing-2019/*"
],
"Condition": {}
}
]
}
2.3子账号登录控制台进行验证:
1.使用子账号(tmp-user)登录控制台,并且创建style:
2.在请求中使用图片样式,例如:https://test-beijing-2019.oss-cn-beijing.aliyuncs.com/0012.jpg?x-oss-process=style/STYLE2;