如何构建IAM权限策略

更新时间: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

version定义了权限策略的版本,当前支持版本为“1”。

statement

通过statement描述授权语义,其中可以根据业务场景包含多条语义,每条包含对action、effect和resource的描述。每次请求系统会逐条依次匹配检查,所有匹配成功的statement会根据effect的设置不同分为通过(allow)、禁止(deny),其中禁止(deny)的优先。如果匹配成功的都为通过,该条请求即鉴权通过。如果匹配成功有一条禁止,或者没有任何条目匹配成功,该条请求被禁止访问。

action

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。

具体的action和S3 API的对应关系如下:

• Service 级别

S3 API action
GetService wos:GetService

注:给子账号分配了GetService权限,则子账号可以获取其父账号拥有的所有空间。(子账号创建的空间,该空间的拥有者为其父账号)

• Bucket 级别

S3 API action
GetBucket(ListObjects) wos:GetBucket
GetBucketLifecycle wos:GetBucketLifecycle
PutBucketLifecycle wos:PutBucketLifecycle
DeleteBucketLifecycle wos:DeleteBucketLifecycle
ListMultipartUploads wos:ListMultipartUploads

• Object 级别

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和控制台操作的对应关系如下:

• Service 级别

控制台操作 action
概览
查看 wos:GetService
统计分析
查询(查看) wos:GetBucketAnalysis

注:

  1. 给子账号分配了GetService权限,则子账号可以获取其父账号拥有的所有空间。(子账号创建的空间,该空间的拥有者为其父账号)
  2. 使用控制台的子账号,都需要有GetService权限,否则可能无法正常使用控制台上的其他操作。
  3. 给子账号分配了GetBucketAnalysis权限,则子账号可以查看统计分析下的所有菜单项。

• Bucket 级别

控制台操作 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

• Object 级别

操作 action
控制台-空间设置
更新镜像源 wos:Prefetch
控制台-文件管理
新建文件夹 wos:PutFolder
上传文件 wos:PutObject
删除 wos:DeleteObject
重命名 wos:PutObject
解冻 wos:RestoreObject

resource

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

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/*"
      ]
    }
  ]
}

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!