更新时间:2020-10-09 13:48:58
对于IAM授权中使用的权限策略,详细规则如下。
{
"version": "1",
"statement": [
{
"action": [
"wos:GetBucket"
],
"resource": [
"wsc:wos:*:*:testbucket"
],
"effect": "allow"
},
{
"action": [
"wos:PutObject",
"wos:GetObject",
"wos:DeleteObject"
],
"resource": [
"wsc:wos:*:*:testbucket/*"
],
"effect": "allow"
}
]
}
这是一个授权的Policy,父账号可以用这样的一个Policy通过IAM服务向子账号授权。Policy当中有一个statement(一条Policy当中可以有多条statement)。statement里面规定了相应的action、resource和effect。
这条Policy配置的权限:列举空间testbucket中所有文件的信息;上传文件到空间testbucket;下载空间testbucket中的文件;删除空间testbucket中的文件。
version定义了权限策略的版本,当前支持版本为“1”。
通过statement描述授权语义,其中可以根据业务场景包含多条语义,每条包含对action、effect和resource的描述。每次请求系统会逐条依次匹配检查,所有匹配成功的statement会根据effect的设置不同分为通过(allow)、禁止(deny),其中禁止(deny)的优先。如果匹配成功的都为通过,该条请求即鉴权通过。如果匹配成功有一条禁止,或者没有任何条目匹配成功,该条请求被禁止访问。
action指代的是wos提供的S3 API或控制台的操作。action的规则是wos:{action_name},支持通配,可以用代表 0 个或多个任意的英文字母,如wos:List*表示wos提供的所有action_name以 List 开头的 S3 API或控制台操作。
action是一个列表,可以选择操作中的一种或几种,所有的action_name前面都必须加上“wos:”。可以有多个action。
action分为三大类:
• Service级别操作,对应类似于wos:GetService之类的操作。
• Bucket级别操作,对应类似于wos:PutBucketLifecycle、wos:GetBucket之类的操作,操作的对象是Bucket。
• Object级别操作,对应类似于wos:GetObject、wos:PutObject、wos:DeleteObject和wos:AbortMultipartUpload,操作对象是Object。
| S3 API | action |
|---|---|
| GetService | wos:GetService |
注:给子账号分配了GetService权限,则子账号可以获取其父账号拥有的所有空间。(子账号创建的空间,该空间的拥有者为其父账号)
| S3 API | action |
|---|---|
| GetBucket(ListObjects) | wos:GetBucket |
| GetBucketLifecycle | wos:GetBucketLifecycle |
| PutBucketLifecycle | wos:PutBucketLifecycle |
| DeleteBucketLifecycle | wos:DeleteBucketLifecycle |
| ListMultipartUploads | wos:ListMultipartUploads |
| S3 API | action |
|---|---|
| GetObject | wos:GetObject |
| HeadObject | wos:HeadObject |
| PutObject | wos:PutObject |
| PostObject | wos:PutObject |
| InitiateMultipartUpload | wos:PutObject |
| UploadPart | wos:PutObject |
| CompleteMultipartUpload | wos:PutObject |
| DeleteObject | wos:DeleteObject |
| MultiDelete | wos:DeleteObject |
| AbortMultipartUpload | wos:AbortMultipartUpload |
| ListParts | wos:ListParts |
| CopyObject | wos:GetObject,wos:PutObject |
| RestoreObject | wos:RestoreObject |
| 控制台操作 | action |
|---|---|
| 概览 | |
| 查看 | wos:GetService |
| 统计分析 | |
| 查询(查看) | wos:GetBucketAnalysis |
注:
| 控制台操作 | action |
|---|---|
| 概览 | |
| 新建空间 | wos:PutBucket |
| 空间设置 | |
| 删除空间 | wos:DeleteBucket |
| 查看-镜像存储 | wos:GetBucketMirror |
| 编辑-镜像存储 | wos:PutBucketMirror |
| 删除-镜像存储 | wos:DeleteBucketMirror |
| 查看-空间域名 | wos:GetBucketDomain |
| 绑定域名 | wos:PutBucketDomain |
| 修改协议 | wos:PutBucketDomain |
| 删除-空间域名 | wos:DeleteBucketDomain |
| 编辑-原图保护 | wos:PutBucketOriginal |
| 查看-分隔符设置 | wos:GetBucketDelimiter |
| 编辑-分隔符设置 | wos:PutBucketDelimiter |
| 查看-图片样式 | wos:GetBucketStyle |
| 新增图片样式 | wos:PutBucketStyle |
| 删除-图片样式 | wos:DeleteBucketStyle |
| 查看-生命周期设置 | wos:GetBucketLifecycle |
| 创建规则-生命周期设置 | wos:PutBucketLifecycle |
| 编辑-生命周期设置 | wos:PutBucketLifecycle |
| 清空全部规则-生命周期设置 | wos:DeleteBucketLifecycle |
| 删除-生命周期设置 | wos:DeleteBucketLifecycle |
| 创建规则-跨域设置 | wos:PutBucketCors |
| 编辑-跨域设置 | wos:PutBucketCors |
| 查看-跨域设置 | wos:GetBucketCors |
| 删除-跨域设置 | wos:DeleteBucketCors |
| 清空全部规则-跨域设置 | wos:DeleteBucketCors |
| 控制台-文件管理 | |
| 查询(查看) | wos:GetBucket |
| 操作 | action |
|---|---|
| 控制台-空间设置 | |
| 更新镜像源 | wos:Prefetch |
| 控制台-文件管理 | |
| 新建文件夹 | wos:PutFolder |
| 上传文件 | wos:PutObject |
| 删除 | wos:DeleteObject |
| 重命名 | wos:PutObject |
| 解冻 | wos:RestoreObject |
resource指代的是存储在wos上的资源,resource的规则是wsc:wos:{region}:{bucket_owner}:{bucket_name}/{object_name},支持通配。可以用代表 0 个或多个任意的英文字母。其中的region字段暂时不做支持,设置为“*”。
resource也是一个列表,可以包含一个或多个资源。可以有多个resource。
对于所有Service级别的操作,不支持指定到具体的资源,即wsc: wos:
*: * : * 。
对于所有Bucket级别的操作,只支持指定到具体的空间,即wsc:wos:{region}:{bucket_owner}:{bucket_name}。
对于所有Object级别的操作。支持指定到具体的文件,即wsc:wos:{region}:{bucket_owner}:{bucket_name}/{object_name}。
effect代表本条的statement的授权的结果,分为allow和deny,分别指代通过和禁止。多条statement同时匹配成功时,禁止(deny)的优先级更高。
例如,期望禁止用户对某一目录进行删除,但对于其他文件有全部权限:
{
"version": "1",
"statement": [
{
"effect": "allow",
"action": [
"wos:*"
],
"resource": [
"wsc:wos:*:*:bucketname/*"
]
},
{
"effect": "deny",
"action": [
"wos:DeleteObject"
],
"resource": [
"wsc:wos:*:*:bucketname/test/*"
]
}
]
}