腾讯云对象存储基于IAMPolicy的权限控制

基于IAMPolicy的权限控制

访问控制(IdentityandAccessManagement,IAM)是腾讯云提供的一项用户身份管理与资源访问控制服务。IAMPolicy是基于用户的授权策略。通过设置IAMPolicy,你可以集中管理你的用户(比如员工、系统或应用程序),以及控制用户可以访问你名下哪些资源的权限。比如能够限制你的用户只拥有对某一个Bucket的读权限。子账号是从属于主账号的,并且这些账号下不能拥有实际的任何资源,所有资源都属于主账号。

说明

腾讯云对象存储支持IAM中子用户及角色访问。使用IAMPolicy对子用户进行权限控制的前提是你必须登录IAM访问控制控制台,新建子用户,并授予其对应访问策略详见IAM。并且腾讯云对象存储本期不支持子账号登录控制台,你的子账号目前仅可通过使用API/SDK完成对腾讯云对象存储的各种操作。

如果你有跨账号授权的需求请查看。基于Bucketpolicy的访问控制,完成跨账号授权。

如何构建IAMPolicy

  • IAMPolicy基本元素
  • IAMPolicy示例

说明:目前BucketPolicy与IAMPolicy元素语法略有不同,请根据你的使用情况做好区分,不要混淆二者。

IAMPolicy基本元素

IAMPolicy语言包含以下基本意义的元素:

版本(Version):Version定义了IAMPolicy的版本,当前支持的"version"元素值为3。

  • 委托人(principal):描述策略授权的实体,用户授权访问策略中不需要指定,被授予IAMPolicy的子账号即是策略授权的实体。该元素对于存储空间访问策略(BucketPolicy)有效,对用户授权访问策略(IAMPolicy)则不应添加。

  • 语句(statement):描述一条或多条权限的详细信息。该元素包括效力、操作、资源等多个其他元素的权限或权限集合。一条策略有且仅有一个语句元素。

    • 效力(Effect):描述声明产生的结果是“允许”(allow),暂不支持显示拒绝(deny),功能更新中,敬请期待。该元素是必填项。
    • 操作(Action):描述被允许或拒绝的操作。操作可以是API或者功能集(一组特定的API)。该元素是必填项,详见下文【腾讯云对象存储在IAMPolicy中用法-指定Action】。
    • 资源(Resource):描述指代的是腾讯云对象存储上面的某个具体的资源或者某些资源。该元素是必填项,有关如何指定资源的信息,详见下文【腾讯云对象存储在IAMPolicy中用法-Resource】。

    Policy需遵循JSON语法规范,详细说明请参阅IAMPolicy-策略语法。

腾讯云对象存储在IAMPolicy中用法

1.指定Action

IAMpolicy中本期Action支持列表如下:

操作关键字操作项说明对应API操作级别oss:PutObject上传某个Object到该Bucket,支持普通上传和分块上传等PUTObject,POSTObject,PUTObject-COPY,InitiateMultipartUpload,UploadPart,CompleteMultipartUploadObject级别操作oss:GetObject获取该Bucket内某个Object及其相关信息GETObject,HEADObjectObject级别操作oss:DeleteObject删除该Bucket内ObjectDELETEObjectObject级别操作oss:AbortMultipartUpload终止分片上传AbortMultipartUploadObject级别操作oss:ListBucket列出该Bucket内的ObjcetGETBucket(ListObjects),HEADBucketBucket级别操作oss:DeleteBucket删除该BucketDELETEBucketBucket级别操作oss:ListBucketMultipartUploads罗列出Bucket中所有执行中的MultipartUpload事件ListMultipartUploadsBucket级别操作oss:腾讯云对象存储支持的所有操作,包括Service级别操作,Bucket级别操作,Object级别操作对应全部API列表参见API参考所有级别操作

示例:

例如,使用oss:GetObject权限,用户可对腾讯云对象存储执行下载操作。

说明

  • 上表中为本期支持用户自定义IAM策略指定的Action,后期会持续支持更多操作,敬请期待。

  • 腾讯云对象存储支持的Action分为三大类:

    • Service级别操作,对应的是GetService操作,用来列出所有属于该用户的某个地域的所有Bucket列表。本期不支持用户自定义IAM策略指定
    • Bucket级别操作,对应oss:DeleteBucket、oss:ListBucketMultipartUploads、oss:ListBucke操作的对象是Bucket。
    • Object级别操作,分为oss:GetObject、oss:PutObject、oss:DeleteObject和oss:AbortMultipartUpload,操作对象是Object。
  • 如想授权某一类的Object的操作,可以选择这几种的一种或几种。另外,所有的Action前面都必须加上前缀“oss:”,如上面例子所示。

1.指定Resource

对于你的腾讯云对象存储资源,在IAMpolicy中指定方式如下为:你不需要指定区域和命名空间,如下所示用""代替,relative-id指定你的腾讯云对象存储资源,可以是存储空间也可是其中一些或某个对象,目前仅支持通配符()。

各个资源描述方式详见访问控制-资源描述方式

//示例:jrn:oss:::bucket_namejrn:oss:::bucket_name/key_name

示例:以存储空间名为examplebucket为例

资源表示说明jrn:oss:::examplebucket/developers/design_info.doc表示examplebucket存储空间中developers/design_info.doc某个对象jrn:oss:::examplebucket/表示examplebucket存储存储空间中的所有对象jrn:oss:::examplebucket/dir/表示examplebucket存储存储空间中dir目录下的全部对象jrn:oss:::examplebucket/abc表示examplebucket存储存储空间以adc为前缀的对象jrn:oss:::examplebucket表示以examplebucket为前缀的存储存储空间以及其中全部对象IAMPolicy示例

1.完全授权的IAMPolicy

完全授权的IAMPolicy表示允许子账号可以对腾讯云对象存储进行任何操作。你可以登录访问控制控制台-用户管理直接授权系统策略(JDCloud腾讯云对象存储Admin)。

{"Statement":[{"Action":["oss:"],"Effect":"Allow","Resource":""}],"Version":"3"}

2.不限制前缀的只读不写IAMPolicy

此Policy表示子用户可对名为app-base-oss的Bucket下所有的Object能够列举与下载。

{"Statement":[{"Action":["oss:GetObject","oss:ListBucket"],"Effect":"Allow","Resource":["jrn:oss:::app-base-oss/","jrn:oss:::app-base-oss"]}],"Version":"3"}

3.限制前缀的只读不写IAMPolicy

此Policy表示子用户可对名为app-base-oss的Bucket中有前缀myuser1/的Object能够列举与下载。但无法下载其他前缀的Object。采用此种Policy,可以将不同的子账号控制的应用对应不同的前缀,就可以达到在同一个Bucket中空间隔离的效果。

{"Statement":[{"Action":["oss:GetObject","oss:ListBucket"],"Effect":"Allow","Resource":["jrn:oss:::app-base-oss/myuser1/","jrn:oss:::app-base-oss"]}],"Version":"3"}

4.不限制前缀的只写不读IAMPolicy

此Policy表示应用可以对名为app-base-oss的Bucket中完成带有前缀myuser1/的Object进行上传。但无法上传其他前缀的Object。采用此种Policy,如果不同的应用对应不同的前缀,就可以达到在同一个Bucket中空间隔离的效果。

{"Statement":[{"Action":["oss:PutObject"],"Effect":"Allow","Resource":["jrn:oss:::app-base-oss/myuser1/"]}],"Version":"3"}
#5.限制前缀的只写不读IAMPolicy

此Policy表示应用只可以对名为app-base-oss的Bucket进行上传。

{"Statement":[{"Action":["oss:PutObject"],"Effect":"Allow","Resource":["jrn:oss:::app-base-oss/"]}],"Version":"3"}

6.不限制前缀的读写IAMPolicy

此Policy表示应用只可以对名为app-base-oss的Bucket下所有的Object进行列举、下载、上传和删除。

{"Statement":[{"Action":["oss:GetObject","oss:PutObject","oss:DeleteObject","oss:ListBucket","oss:AbortMultipartUpload"],"Effect":"Allow","Resource":["jrn:oss:::app-base-oss/","jrn:oss:::app-base-oss"]}],"Version":"3"}
#7.限制前缀的读写IAMPolicy

此Policy表示应用可以对名为app-base-oss的Bucket下带有前缀myuser1/的Object进行列举、下载、上传和删除,但无法对其他前缀的Object进行读写。采用此种Policy,如果不同的子用户对应不同的前缀,就可以达到在同一个Bucket中空间隔离的效果。

{"Statement":[{"Action":["oss:GetObject","oss:PutObject","oss:DeleteObject","oss:ListBucket","oss:AbortMultipartUpload"],"Effect":"Allow","Resource":["jrn:oss:::app-base-oss/myuser1/","jrn:oss:::app-base-oss"]}],"Version":"3"}